diff --git a/sdnr/wt/devicemanager/feature/pom.xml b/sdnr/wt/devicemanager/feature/pom.xml
new file mode 100644
index 0000000..d48fe35
--- /dev/null
+++ b/sdnr/wt/devicemanager/feature/pom.xml
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager.feature
+ * ================================================================================
+ * Copyright (C) 2018 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-devicemanager-feature</artifactId>
+  <version>0.4.1-SNAPSHOT</version>
+  <packaging>feature</packaging>
+  <name>ccsdk-features-sdnr-wt :: ${project.artifactId} :: feature</name>
+
+  <parent>
+    <groupId>org.onap.ccsdk.parent</groupId>
+    <artifactId>single-feature-parent</artifactId>
+    <version>1.2.1-SNAPSHOT</version>
+    <relativePath />
+  </parent>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.opendaylight.mdsal.model</groupId>
+        <artifactId>mdsal-model-artifacts</artifactId>
+        <version>${odl.mdsal.model.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.opendaylight.controller</groupId>
+        <artifactId>mdsal-artifacts</artifactId>
+        <version>${odl.controller.mdsal.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+  <dependencies>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>sdnr-wt-devicemodel-model</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>sdnr-wt-devicemanager-model</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>sdnr-wt-devicemanager-provider</artifactId>
+      <version>${project.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>com.fasterxml.jackson.core</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.fasterxml.jackson.dataformat</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.elasticsearch</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.lucene</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.twitter</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.hdrhistogram</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.tdunning</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.ning</groupId>
+          <artifactId>compress-lzf</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>io.netty</groupId>
+          <artifactId>netty</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.yaml</groupId>
+          <artifactId>snakeyaml</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>jakarta-regexp</groupId>
+          <artifactId>jakarta-regexp</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.joda</groupId>
+          <artifactId>joda-convert</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>joda-time</groupId>
+          <artifactId>joda-time</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.carrotsearch</groupId>
+          <artifactId>hppc</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.spatial4j</groupId>
+          <artifactId>spatial4j</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/sdnr/wt/devicemanager/installer/pom.xml b/sdnr/wt/devicemanager/installer/pom.xml
new file mode 100755
index 0000000..8397117
--- /dev/null
+++ b/sdnr/wt/devicemanager/installer/pom.xml
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager.installer
+ * ================================================================================
+ * Copyright (C) 2018 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.onap.ccsdk.parent</groupId>
+    <artifactId>odlparent-lite</artifactId>
+    <version>1.2.1-SNAPSHOT</version>
+    <relativePath />
+  </parent>
+
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-devicemanager-installer</artifactId>
+  <version>0.4.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+  <name>ccsdk-features-sdnr-wt :: ${project.artifactId}</name>
+
+  <properties>
+    <application.name>sdnr-wt-devicemanager</application.name>
+    <include.transitive.dependencies>false</include.transitive.dependencies>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+      <artifactId>${application.name}-feature</artifactId>
+      <version>${project.version}</version>
+      <type>xml</type>
+      <classifier>features</classifier>
+      <exclusions>
+        <exclusion>
+          <groupId>*</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+      <artifactId>${application.name}-provider</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>maven-repo-zip</id>
+            <goals>
+              <goal>single</goal>
+            </goals>
+            <phase>package</phase>
+            <configuration>
+              <attach>true</attach>
+              <finalName>stage/${application.name}-${project.version}</finalName>
+              <descriptors>
+                <descriptor>src/assembly/assemble_mvnrepo_zip.xml</descriptor>
+              </descriptors>
+              <appendAssemblyId>true</appendAssemblyId>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>copy-nested-dependencies</id>
+            <goals>
+              <goal>copy-dependencies</goal>
+            </goals>
+            <phase>prepare-package</phase>
+            <configuration>
+              <transitive>true</transitive>
+              <outputDirectory>${project.build.directory}/assembly/system</outputDirectory>
+              <overWriteReleases>false</overWriteReleases>
+              <overWriteSnapshots>true</overWriteSnapshots>
+              <overWriteIfNewer>true</overWriteIfNewer>
+              <useRepositoryLayout>true</useRepositoryLayout>
+              <addParentPoms>false</addParentPoms>
+              <copyPom>false</copyPom>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <artifactId>maven-resources-plugin</artifactId>
+        <version>2.6</version>
+        <executions>
+          <execution>
+            <id>copy-schemas</id>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <phase>validate</phase>
+            <configuration>
+              <outputDirectory>${project.build.directory}/assembly/cache/schema</outputDirectory>
+              <resources>
+                <resource>
+                  <directory>${basedir}/../provider/src/main/resources/preload.cache.schema</directory>
+                  <includes>
+                    <include>*.yang</include>
+                  </includes>
+                  <filtering>true</filtering>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/sdnr/wt/devicemanager/installer/src/assembly/assemble_mvnrepo_zip.xml b/sdnr/wt/devicemanager/installer/src/assembly/assemble_mvnrepo_zip.xml
new file mode 100644
index 0000000..c4eb9aa
--- /dev/null
+++ b/sdnr/wt/devicemanager/installer/src/assembly/assemble_mvnrepo_zip.xml
@@ -0,0 +1,49 @@
+<!--
+  ============LICENSE_START=======================================================
+  ONAP : CCSDK
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights
+  						reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  -->
+
+<!-- Defines how we build the .zip file which is our distribution. -->
+
+<assembly
+	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+  <id>repo</id>
+	<formats>
+		<format>zip</format>
+	</formats>
+
+	<!--  we want "system" and related files right at the root level
+		  as this file is suppose to be unzip on top of a karaf
+		  distro. -->
+	<includeBaseDirectory>false</includeBaseDirectory>
+
+	<fileSets>
+		<fileSet>
+			<directory>target/assembly/</directory>
+			<outputDirectory>.</outputDirectory>
+			<excludes>
+			</excludes>
+		</fileSet>
+	</fileSets>
+
+
+
+</assembly>
diff --git a/sdnr/wt/devicemanager/model/pom.xml b/sdnr/wt/devicemanager/model/pom.xml
new file mode 100644
index 0000000..eccdc56
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/pom.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager.model
+ * ================================================================================
+ * Copyright (C) 2018 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-devicemanager-model</artifactId>
+  <version>0.4.1-SNAPSHOT</version>
+  <name>ccsdk-features-sdnr-wt :: ${project.artifactId}</name>
+  <packaging>bundle</packaging>
+
+  <parent>
+    <groupId>org.onap.ccsdk.parent</groupId>
+    <artifactId>binding-parent</artifactId>
+    <version>1.2.1-SNAPSHOT</version>
+    <relativePath />
+  </parent>
+
+  <properties>
+    <maven.javadoc.skip>true</maven.javadoc.skip>
+  </properties>
+
+  <licenses>
+    <license>
+      <name>Apache License, Version 2.0</name>
+      <url>http://www.apache.org/licenses/LICENSE-2.0</url>
+    </license>
+  </licenses>
+
+  <dependencies>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.jacoco</groupId>
+        <artifactId>jacoco-maven-plugin</artifactId>
+        <configuration>
+          <excludes>
+            <exclude>**/gen/**</exclude>
+            <exclude>**/generated-sources/**</exclude>
+            <exclude>**/yang-gen-sal/**</exclude>
+            <exclude>**/pax/**</exclude>
+          </excludes>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
+
diff --git a/sdnr/wt/devicemanager/model/src/main/yang/devicemanager.yang b/sdnr/wt/devicemanager/model/src/main/yang/devicemanager.yang
new file mode 100644
index 0000000..97eb099
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/yang/devicemanager.yang
@@ -0,0 +1,189 @@
+module devicemanager {
+
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:devicemanager";
+    prefix "devicemanager";
+
+    description
+        "DeviceManager Api Module";
+
+    revision "2019-01-09" {
+        description
+            "Initial revision";
+    }
+
+    grouping maintenance-mode-g {
+        leaf mountpoint-name{
+            mandatory true;
+            type string;
+            description
+                "Mountpoint-name as key of node";
+        }
+        leaf node-name {
+            mandatory true;
+            type string;
+            description
+                "Node-name as node";
+        }
+        list filter {
+            container definition {
+                leaf object-id-ref {
+                    mandatory true;
+                    type string;
+                    description
+                        "object id to filter on";
+                }
+                leaf problem {
+                    mandatory true;
+                    type string;
+                    description
+                        "name of the problem to filter";
+                }
+            }
+            leaf description {
+                mandatory true;
+                type string;
+                description
+                    "Node-name as node";
+            }
+            leaf start-date {
+                mandatory true;
+                type string;
+                description
+                    "begin of maintenance-mode";
+            }
+            leaf end-date {
+                mandatory true;
+                type string;
+                description
+                    "end of maintenance-mode";
+            }
+        }
+    }
+
+    rpc set-maintenance-mode{
+        description
+            "Set maintenance mode for network element";
+        input{
+            uses maintenance-mode-g;
+        }
+        output {
+            uses maintenance-mode-g;
+        }
+    }
+    rpc get-maintenance-mode{
+        description
+            "Get maintenance mode Configuration";
+        input{
+            leaf mountpoint-name{
+                mandatory true;
+                type string;
+                description
+                    "Mountpoint-name as key of node";
+            }
+        }
+        output {
+            uses maintenance-mode-g;
+        }
+    }
+    rpc test-maintenance-mode{
+        description
+            "Send test pattern similar to notification that are test from algorithm";
+        input{
+            leaf mountpoint-name {
+                mandatory true;
+                type string;
+                description    "mountpoint for test";
+            }
+            leaf object-id-ref {
+                mandatory true;
+                type string;
+                description    "object id for test";
+            }
+            leaf problem-name {
+                mandatory true;
+                type string;
+                description    "problem for test";
+            }
+            leaf test-date {
+                mandatory true;
+                type string;
+                description    "point in time used for the test";
+            }
+
+        }
+        output {
+            leaf result-string {
+                mandatory true;
+                type string;
+                description    "Describin if mountpoint was found and result of maintenance mode testing";
+            }
+            uses maintenance-mode-g;
+        }
+    }
+    rpc show-required-network-element {
+        description
+          "Get information for required network element";
+
+        input {
+            leaf mountpoint-name {
+                mandatory true;
+                type string;
+                description
+                    "Mountpoint-name as key of the node to be displayed.";
+            }
+        }
+        output {
+            container required-network-element {
+                leaf mountpoint-name {
+                    type string;
+                    description
+                       "The name of the mountpoint";
+                }
+                leaf status {
+                    type string;
+                    description
+                        "Status: pre-provisoning, installed, end-of-life (Later enum)";
+                }
+                leaf description {
+                    type string;
+                    description "Device description";
+                }
+            }
+        }
+    }
+
+    rpc get-required-network-element-keys {
+        description
+          "Returns a list of netconf nodes for each data store space";
+
+        output {
+            leaf-list mountpoint-names {
+                type string;
+                description
+                  "List of required-network-element keys that are the mountpoint-names";
+            }
+        }
+    }
+
+    rpc clear-current-fault-by-nodename {
+        description
+            "try to clear alarms and sync the alarm with the devices currently connected";
+        input {
+            leaf-list nodenames {
+                type string;
+                description
+                    "list of network-elements to clear alarms for nodenames, if list empty then all";
+            }
+        }
+        output {
+            leaf-list nodenames {
+                type string;
+                description
+                    "list of network-elements alarms cleared";
+            }
+        }
+    }
+
+}
+
diff --git a/sdnr/wt/devicemanager/pom.xml b/sdnr/wt/devicemanager/pom.xml
new file mode 100755
index 0000000..3321e1b
--- /dev/null
+++ b/sdnr/wt/devicemanager/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager
+ * ================================================================================
+ * Copyright (C) 2018 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+      <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+    <artifactId>sdnr-wt-devicemanager-top</artifactId>
+    <version>0.4.1-SNAPSHOT</version>
+    <packaging>pom</packaging>
+    <name>ccsdk-features-sdnr-wt :: ${project.artifactId}</name>
+
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>odlparent-lite</artifactId>
+        <version>1.2.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <properties>
+        <feature-name>sdnr-wt-devicemanager</feature-name>
+    </properties>
+
+    <modules>
+        <module>model</module>
+        <module>provider</module>
+        <module>feature</module>
+        <module>installer</module>
+    </modules>
+
+</project>
diff --git a/sdnr/wt/devicemanager/provider/copyright b/sdnr/wt/devicemanager/provider/copyright
new file mode 100644
index 0000000..c5487c3
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/copyright
@@ -0,0 +1,15 @@
+============LICENSE_START========================================================================
+ONAP : ccsdk feature sdnr wt
+=================================================================================================
+Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+=================================================================================================
+Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+in compliance with the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software distributed under the License
+is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+or implied. See the License for the specific language governing permissions and limitations under
+the License.
+============LICENSE_END==========================================================================
diff --git a/sdnr/wt/devicemanager/provider/pom.xml b/sdnr/wt/devicemanager/provider/pom.xml
new file mode 100644
index 0000000..d401ee0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/pom.xml
@@ -0,0 +1,463 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- ============LICENSE_START=======================================================
+    ONAP : CCSDK / SDNR / WT / devicemanager ================================================================================
+    Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All
+    rights reserved. ================================================================================
+    Licensed under the Apache License, Version 2.0 (the "License"); you may not
+    use this file except in compliance with the License. You may obtain a copy
+    of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+    by applicable law or agreed to in writing, software distributed under the
+    License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+    OF ANY KIND, either express or implied. See the License for the specific
+    language governing permissions and limitations under the License. ============LICENSE_END========================================================= -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-devicemanager-provider</artifactId>
+  <version>0.4.1-SNAPSHOT</version>
+  <name>ccsdk-features-sdnr-wt :: ${project.artifactId}</name>
+  <packaging>bundle</packaging>
+
+  <parent>
+    <groupId>org.onap.ccsdk.parent</groupId>
+    <artifactId>binding-parent</artifactId>
+    <version>1.2.1-SNAPSHOT</version>
+    <relativePath></relativePath>
+  </parent>
+
+  <properties>
+    <checkstyle.skip>true</checkstyle.skip> <!-- POM configuration -->
+    <maven.javadoc.skip>true</maven.javadoc.skip>
+    <maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
+    <buildtime>${maven.build.timestamp} UTC</buildtime>
+  </properties>
+
+  <licenses>
+    <license>
+      <name>Apache License, Version 2.0</name>
+      <url>http://www.apache.org/licenses/LICENSE-2.0</url>
+    </license>
+  </licenses>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.opendaylight.controller</groupId>
+        <artifactId>mdsal-artifacts</artifactId>
+        <version>1.6.1</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+  <dependencies>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>sdnr-wt-devicemanager-model</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+      <artifactId>sdnr-wt-websocketmanager2-model</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>sdnr-wt-devicemodel-model</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>sal-binding-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.netconf</groupId>
+      <artifactId>sal-netconf-connector</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.json</groupId>
+      <artifactId>json</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.typesafe.akka</groupId>
+      <artifactId>akka-actor_2.12</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.typesafe.akka</groupId>
+      <artifactId>akka-cluster_2.12</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.compendium</artifactId>
+    </dependency>
+
+        <!-- Elasticsearch dependencies below should be part of this bundle -->
+        <!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch -->
+        <!-- Includes all implicit dependencies -->
+
+    <dependency>
+      <groupId>org.elasticsearch</groupId>
+      <artifactId>elasticsearch</artifactId>
+      <version>2.2.0</version>
+    </dependency>
+    <!--
+    <dependency>
+      <groupId>org.elasticsearch.plugin</groupId>
+      <artifactId>delete-by-query</artifactId>
+      <version>2.2.0</version>
+    </dependency> -->
+    <dependency>
+      <groupId>com.spatial4j</groupId>
+      <artifactId>spatial4j</artifactId>
+      <version>0.5</version>
+    </dependency>
+    <dependency>
+      <groupId>org.elasticsearch</groupId>
+      <artifactId>securesm</artifactId>
+      <version>1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>com.carrotsearch</groupId>
+      <artifactId>hppc</artifactId>
+      <version>0.7.1</version>
+    </dependency>
+    <dependency>
+      <groupId>joda-time</groupId>
+      <artifactId>joda-time</artifactId>
+      <version>2.8.2</version>
+    </dependency>
+    <dependency>
+      <groupId>org.joda</groupId>
+      <artifactId>joda-convert</artifactId>
+      <version>1.2</version>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-core</artifactId>
+      <version>2.6.3</version>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-annotations</artifactId>
+      <version>2.6.3</version>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-databind</artifactId>
+      <version>2.6.3</version>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.dataformat</groupId>
+      <artifactId>jackson-dataformat-smile</artifactId>
+      <version>2.6.3</version>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.dataformat</groupId>
+      <artifactId>jackson-dataformat-yaml</artifactId>
+      <version>2.6.3</version>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.dataformat</groupId>
+      <artifactId>jackson-dataformat-cbor</artifactId>
+      <version>2.6.3</version>
+    </dependency>
+    <dependency>
+      <groupId>org.yaml</groupId>
+      <artifactId>snakeyaml</artifactId>
+      <version>1.15</version>
+    </dependency>
+    <dependency>
+      <groupId>io.netty</groupId>
+      <artifactId>netty</artifactId>
+      <version>3.10.5.Final</version>
+    </dependency>
+    <dependency>
+      <groupId>com.ning</groupId>
+      <artifactId>compress-lzf</artifactId>
+      <version>1.0.2</version>
+    </dependency>
+    <dependency>
+      <groupId>com.tdunning</groupId>
+      <artifactId>t-digest</artifactId>
+      <version>3.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.hdrhistogram</groupId>
+      <artifactId>HdrHistogram</artifactId>
+      <version>2.1.6</version>
+    </dependency>
+    <dependency>
+      <groupId>com.twitter</groupId>
+      <artifactId>jsr166e</artifactId>
+      <version>1.1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-core</artifactId>
+      <version>5.4.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-backward-codecs</artifactId>
+      <version>5.4.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-analyzers-common</artifactId>
+      <version>5.4.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-queries</artifactId>
+      <version>5.4.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-memory</artifactId>
+      <version>5.4.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-highlighter</artifactId>
+      <version>5.4.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-queryparser</artifactId>
+      <version>5.4.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-sandbox</artifactId>
+      <version>5.4.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-suggest</artifactId>
+      <version>5.4.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-misc</artifactId>
+      <version>5.4.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-join</artifactId>
+      <version>5.4.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-grouping</artifactId>
+      <version>5.4.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-spatial</artifactId>
+      <version>5.4.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lucene</groupId>
+      <artifactId>lucene-spatial3d</artifactId>
+      <version>5.4.1</version>
+    </dependency>
+    <dependency>
+      <groupId>jakarta-regexp</groupId>
+      <artifactId>jakarta-regexp</artifactId>
+      <version>1.4</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-collections</groupId>
+      <artifactId>commons-collections</artifactId>
+      <version>3.2.2</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-logging</groupId>
+      <artifactId>commons-logging</artifactId>
+      <version>1.2</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-cli</groupId>
+      <artifactId>commons-cli</artifactId>
+      <version>1.3.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+      <version>3.4</version>
+    </dependency>
+  </dependencies>
+  <build>
+    <resources>
+      <resource>
+        <directory>src/main/resources</directory>
+      </resource>
+      <resource>
+        <directory>target/plugins</directory>
+        <targetPath>elasticsearch/plugins</targetPath>
+      </resource>
+    </resources>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>copy-plugin</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>copy</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>org.elasticsearch.plugin</groupId>
+                  <artifactId>delete-by-query</artifactId>
+                  <version>2.2.0</version>
+                  <type>jar</type>
+                  <overWrite>true</overWrite>
+                  <outputDirectory>${project.basedir}/target/plugins/delete-by-query</outputDirectory>
+                </artifactItem>
+              </artifactItems>
+              <includes>**/*</includes>
+              <overWriteReleases>true</overWriteReleases>
+              <overWriteSnapshots>true</overWriteSnapshots>
+              <excludeTransitive>true</excludeTransitive>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <extensions>true</extensions>
+        <configuration>
+          <instructions>
+            <Import-Package>
+              org.opendaylight.controller.md.sal.binding.api;version="[1.6,2)",
+              org.opendaylight.controller.md.sal.common.api.data;version="[1.6,2)",
+              org.opendaylight.controller.sal.binding.api;version="[1.6,2)",
+              org.opendaylight.yangtools.concepts;version="[2.0,3)",
+              org.opendaylight.yangtools.yang.binding;version="[0.12,1)",
+              org.opendaylight.yangtools.yang.common;version="[2.0,3)",
+              org.osgi.framework;version="[1.7,2)",
+              org.osgi.service.blueprint.container,
+              org.slf4j;version="[1.7,2)",
+              org.slf4j.spi;version="[1.7,2)",
+              com.typesafe.config;version= "[1.3,2)",
+              org.json,
+              javax.annotation,
+              javax.net.ssl,
+              javax.xml.bind,
+              javax.xml.bind.annotation,
+              org.apache.commons.lang3.exception,
+
+              com.github.mustachejava;resolution:=optional,
+              com.sun.jna;resolution:=optional,
+              com.sun.jna.ptr;resolution:=optional,
+              com.sun.jna.win32;resolution:=optional,
+              com.vividsolutions.jts.algorithm;resolution:=optional,
+              com.vividsolutions.jts.geom;resolution:=optional,
+              com.vividsolutions.jts.geom.impl;resolution:=optional,
+              com.vividsolutions.jts.geom.prep;resolution:=optional,
+              com.vividsolutions.jts.io;resolution:=optional,
+              com.vividsolutions.jts.operation.union;resolution:=optional,
+              com.vividsolutions.jts.operation.valid;resolution:=optional,
+              com.vividsolutions.jts.util;resolution:=optional,
+              org.apache.log;
+              org.apache.log4j.helpers;resolution:=optional;version="[1.2,2)",
+              org.noggit;resolution:=optional,
+
+              com.google.common.base;version="[23.6,24)",
+              com.google.common.cache;version="[23.6,24)",
+              com.google.common.collect;version="[23.6,24)",
+              com.google.common.hash;version="[23.6,24)",
+              com.google.common.io;version="[23.6,24)",
+              com.google.common.math;version="[23.6,24)",
+              com.google.common.net;version="[23.6,24)",
+              com.google.common.primitives;version="[23.6,24)",
+              com.google.common.util.concurrent;version="[23.6,24)",
+
+              org.jboss.netty.bootstrap;version="[3.10,4)",
+              org.jboss.netty.buffer;version="[3.10,4)",
+              org.jboss.netty.channel;version="[3.10,4)",
+              org.jboss.netty.channel.socket.nio;version="[3.10,4)",
+              org.jboss.netty.channel.socket.oio;version="[3.10,4)",
+              org.jboss.netty.handler.codec.embedder;version="[3.10,4)",
+              org.jboss.netty.handler.codec.frame;version="[3.10,4)",
+              org.jboss.netty.handler.codec.http;version="[3.10,4)",
+              org.jboss.netty.handler.timeout;version="[3.10,4)",
+              org.jboss.netty.logging;version="[3.10,4)",
+              org.jboss.netty.util;version="[3.10,4)",
+
+              org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105,
+
+              org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714;version="[1.4,2)",
+              org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ptp.dataset.rev170208;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ptp.dataset.rev170208.port.ds.entry;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715;version="[2013.7,2014)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.equipment.g;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.extension.g;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.manufactured.thing.g;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.network.element;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.air._interface.historical.performance.type.g;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.container.historical.performance.type.g;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.air._interface.diversity.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.air._interface.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.ethernet.container.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.hybrid.mw.structure.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.pure.ethernet.structure.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.tdm.container.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.air._interface.historical.performance.type.g;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.container.historical.performance.type.g;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.air._interface.diversity.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.air._interface.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.ethernet.container.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.hybrid.mw.structure.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.pure.ethernet.structure.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.tdm.container.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.air._interface.historical.performance.type.g;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.container.historical.performance.type.g;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.air._interface.diversity.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.air._interface.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.ethernet.container.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.hybrid.mw.structure.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.pure.ethernet.structure.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.tdm.container.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.equipment.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.network.element.current.problems.g;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.network.element.pac;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114;version="[1.7,2)",
+              org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status;version="[1.7,2)",
+              org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.network.topology.topology.topology.types;version="[1.7,2)",
+              org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.maintenance.mode.g;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.maintenance.mode.g.filter;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.show.required.network.element.output;version="[0.3,1)",
+              org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021;version="[2013.10,2014)",
+              org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology;version="[2013.10,2014)",
+              org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology;version="[2013.10,2014)"
+            </Import-Package>
+            <Embed-Dependency>jackson*,ela*,joda*,Hdr*,lucene*,
+              hppc,jsr166e,t-digest,snakeyaml,securesm,spatial4j,compress-lzf,commons-cli,jakarta-regexp,
+              commons-lang3,commons-collections,commons-logging,commons-beanutils</Embed-Dependency>
+            <Include-Resource>{maven-resources},{maven-dependencies},META-INF/git.properties=-target/classes/META-INF/git.properties</Include-Resource>
+            <Embed-Transitive>true</Embed-Transitive>
+          </instructions>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
+
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/AaiProviderClient.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/AaiProviderClient.java
new file mode 100644
index 0000000..d5030c1
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/AaiProviderClient.java
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.aaiconnector.impl;
+
+import java.util.List;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.http.BaseHTTPResponse;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InventoryInformation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCoreNetworkElementRepresentation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.HtDevicemanagerConfiguration;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.IConfigChangedListener;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.AaiConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AaiProviderClient implements AutoCloseable {
+
+    private static Logger LOG = LoggerFactory.getLogger(AaiProviderClient.class);
+    private static boolean reloadConfigFlag;
+    private static final IConfigChangedListener configChangedListener = () -> reloadConfigFlag = true;
+
+    private AaiConfig config;
+    private final DeviceManagerImpl deviceManager;
+    private final HtDevicemanagerConfiguration htconfig;
+
+
+    public AaiConfig getConfig() {
+        return this.config;
+    }
+
+
+    public AaiProviderClient(HtDevicemanagerConfiguration cfg, DeviceManagerImpl devMgr) {
+        this.config = cfg.getAai();
+        this.htconfig = cfg;
+        this.htconfig.registerConfigChangedListener(configChangedListener);
+        this.deviceManager = devMgr;
+
+    }
+
+    private void _reload() {
+        if (reloadConfigFlag) {
+            this.config = AaiConfig.reload();
+            LOG.info("config reloaded: {}", config == null ? "null" : config);
+        }
+        reloadConfigFlag = false;
+    }
+
+    public void onDeviceRegistered(String mountPointName) {
+        this._reload();
+        if (this.config.isOff()) {
+            return;
+        }
+        ONFCoreNetworkElementRepresentation ne =
+                this.deviceManager != null ? this.deviceManager.getNeByMountpoint(mountPointName) : null;
+        this.onDeviceRegistered(mountPointName,
+                ne != null ? ne.getInventoryInformation("MWPS") : InventoryInformation.getDefault());
+
+    }
+
+    public void onDeviceRegistered(String mountPointName, InventoryInformation i) {
+        this._reload();
+        if (this.config.isOff()) {
+            return;
+        }
+        new Thread(new AaiCreateRequestRunnable(mountPointName, i.getType(), i.getModel(), i.getVendor(),
+                i.getDeviceIpv4(), i.getInterfaceUuidList())).start();
+    }
+
+    public void onDeviceUnregistered(String mountPointName) {
+        this._reload();
+        if (this.config.isOff()) {
+            return;
+        }
+        if (this.config.doDeleteOnMountPointRemoved()) {
+            new Thread(new AaiDeleteRequestRunnable(mountPointName)).start();
+        } else {
+            LOG.debug("prevent deleting device {} by config", mountPointName);
+        }
+    }
+
+    @Override
+    public void close() throws Exception {
+        this.htconfig.unregisterConfigChangedListener(configChangedListener);
+    }
+
+    private class AaiCreateRequestRunnable implements Runnable {
+
+        private static final int RESPCODE_NOTFOUND = BaseHTTPResponse.CODE404;
+        private static final int RESPCODE_FOUND = BaseHTTPResponse.CODE200;
+        private final AaiWebApiClient mClient;
+        private final String pnfId;
+        private final String type;
+        private final String model;
+        private final String vendor;
+        private final String oamIp;
+        private final List<String> ifaces;
+        private final int timeout;
+
+        public AaiCreateRequestRunnable(String pnfId, String type, String model, String vendor, String oamIp,
+                List<String> ifaces) {
+            this.pnfId = pnfId;
+            this.type = type;
+            this.model = model;
+            this.vendor = vendor;
+            this.oamIp = oamIp;
+            this.ifaces = ifaces;
+            this.timeout = AaiProviderClient.this.config.getConnectionTimeout();
+            this.mClient = new AaiWebApiClient(AaiProviderClient.this.config.getBaseUrl(),
+                    AaiProviderClient.this.config.getHeaders(), AaiProviderClient.this.config.getTrustAll(),
+                    AaiProviderClient.this.config.getPcks12CertificateFilename(),
+                    AaiProviderClient.this.config.getPcks12CertificatePassphrase());
+        }
+
+        @Override
+        public void run() {
+            LOG.debug("check if pnfid {} exists", pnfId);
+            this.mClient.setTimeout(timeout);
+            int responseCode = this.mClient.pnfCheckIfExists(pnfId);
+            if (responseCode == RESPCODE_NOTFOUND) {
+                LOG.debug("do pnfCreate for {}", pnfId);
+                this.mClient.pnfCreate(pnfId, type, model, vendor, oamIp, ifaces);
+            } else if (responseCode == RESPCODE_FOUND) {
+                LOG.debug("pnfid {} found, nothing to do", pnfId);
+            } else {
+                LOG.warn("unhandled response code: {}", responseCode);
+            }
+        }
+    };
+
+    private class AaiDeleteRequestRunnable implements Runnable {
+
+        private final AaiWebApiClient mClient;
+        private final String pnfId;
+        private final int timeout;
+
+
+        public AaiDeleteRequestRunnable(String pnfId) {
+            this.pnfId = pnfId;
+            this.timeout = AaiProviderClient.this.config.getConnectionTimeout();
+            this.mClient = new AaiWebApiClient(AaiProviderClient.this.config.getBaseUrl(),
+                    AaiProviderClient.this.config.getHeaders(), AaiProviderClient.this.config.getTrustAll(),
+                    AaiProviderClient.this.config.getPcks12CertificateFilename(),
+                    AaiProviderClient.this.config.getPcks12CertificatePassphrase());
+        }
+
+        @Override
+        public void run() {
+            this.mClient.setTimeout(this.timeout);
+            this.mClient.pnfDelete(pnfId);
+        }
+    };
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/AaiWebApiClient.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/AaiWebApiClient.java
new file mode 100644
index 0000000..6ce4cff
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/AaiWebApiClient.java
@@ -0,0 +1,157 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.aaiconnector.impl;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.http.BaseHTTPClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.http.BaseHTTPResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AaiWebApiClient extends BaseHTTPClient {
+
+    private static Logger LOG = LoggerFactory.getLogger(AaiWebApiClient.class);
+    private static final String PNF_JSON_INTERFACE_TEMPLATE = "        {\n"
+            + "            \"interface-name\": \"@interface@\",\n" + "            \"speed-value\": \"300\",\n"
+            + "            \"speed-units\": \"MBit/s\",\n"
+            + "            \"port-description\": \"Air Interface (MWPS)\",\n"
+            + "            \"equipment-identifier\": \"@pnfId@-@interface@\",\n"
+            + "            \"interface-role\": \"Wireless\",\n"
+            + "            \"interface-type\": \"Air Interface (MWPS)\",\n"
+            + "            \"resource-version\": \"@model@\",\n" + "            \"relationship-list\": [\n"
+            + "                {\n"
+            + "                    \"related-to\": \"A keyword provided by A&AI to indicate type of node.\",\n"
+            + "                    \"related-link\": \"URL to the object in A&AI.\",\n"
+            + "                    \"relationship-data\": [\n" + "                        {\n"
+            + "                            \"relationship-key\": \"A keyword provided by A&AI to indicate an attribute.\",\n"
+            + "                            \"relationship-value\": \"Value of the attribute\"\n"
+            + "                        }\n" + "                    ],\n"
+            + "                    \"related-to-property\": [\n" + "                        {\n"
+            + "                            \"property-key\": \"Key part of a key/value pair\",\n"
+            + "                            \"property-value\": \"Value part of a key/value pair\"\n"
+            + "                        }\n" + "                    ]\n" + "                }\n" + "            ]\n"
+            + "        }\n";
+    private static final String PNF_JSON_TEMPLATE = "{\n" + "    \"pnf-name\": \"@pnfId@\",\n"
+            + "    \"pnf-id\": \"@pnfId@\",\n" + "    \"equip-type\": \"@type@\",\n"
+            + "    \"equip-model\": \"@model@\",\n" + "    \"equip-vendor\": \"@vendor@\",\n"
+            + "    \"ipaddress-v4-oam\": \"@oamIp@\",\n" + "    \"in-maint\": false,\n"
+            + "    \"prov-status\":\"PROV\",\n" + "    \"p-interfaces\": @interface-list@\n" + "}\n" + "";
+    private static final String PNF_URI = "network/pnfs/pnf/";
+    private static final String EMPTY_MESSAGE = "";
+
+    private final Map<String, String> headerMap;
+
+
+    public AaiWebApiClient(String baseUrl, Map<String, String> headers, boolean trustAllCerts) {
+        this(baseUrl, headers, trustAllCerts, null, null);
+    }
+
+    public AaiWebApiClient(String baseUrl, Map<String, String> headers, boolean trustAllCerts, String certFilename,
+            String passphrase) {
+        super(baseUrl, trustAllCerts, certFilename, passphrase, BaseHTTPClient.getSslCertPcks());
+
+        this.headerMap = new HashMap<>();
+        this.headerMap.putAll(headers);
+        this.headerMap.put("Content-Type", "application/json");
+        this.headerMap.put("Accept", "application/json");
+    }
+
+    /**
+     * Create and specify defition parametrs of pnf
+     * @param pnfId name
+     * @param type type
+     * @param model model
+     * @param vendor vendor
+     * @param oamIp ip
+     * @param ifaces interfaces
+     * @return true if http response code was 200 or false if not.
+     */
+    public boolean pnfCreate(String pnfId, String type, String model, String vendor, String oamIp,
+            List<String> ifaces) {
+        LOG.debug("registering {} (type={}, model={}, vendor={},ip={})", pnfId, type, model, vendor, oamIp);
+        String message = getPnfTemplateFilled(pnfId, type, model, vendor, oamIp, ifaces);
+        return pnfRequest(pnfId, "PUT", message) == 200;
+    }
+
+    /**
+     * Unregister
+     * @param pnfId name
+     * @return true if http response code was 200 or false if not.
+     */
+    public boolean pnfDelete(String pnfId) {
+        LOG.debug("unregistering {}", pnfId);
+        return pnfRequest(pnfId, "DELETE", EMPTY_MESSAGE) == 200;
+    }
+
+    /**
+     * Send registration request
+     * @param pnfId name
+     * @return error accoring to http response code or -1
+     */
+    public int pnfCheckIfExists(String pnfId) {
+        LOG.debug("check for {}", pnfId);
+        return pnfRequest(pnfId, "GET", EMPTY_MESSAGE);
+    }
+
+    /*
+     * Private classes
+     */
+
+    private int pnfRequest(String pnfId, String method, String message) {
+        BaseHTTPResponse response;
+        try {
+            String uri = PNF_URI + URLParamEncoder.encode(pnfId);
+            response = this.sendRequest(uri, method, message, headerMap);
+            LOG.debug("finished with responsecode {}", response.code);
+            return response.code;
+        } catch (IOException e) {
+            LOG.warn("problem registering {} : {}", pnfId, e.getMessage());
+            return -1;
+        }
+    }
+
+
+    private static String getPnfTemplateFilled(String pnfId, String type, String model, String vendor, String oamIp,
+            List<String> ifaces) {
+        return PNF_JSON_TEMPLATE.replace("@pnfId@", pnfId).replace("@type@", type).replace("@model@", model)
+                .replace("@vendor@", vendor).replace("@oamIp@", oamIp)
+                .replace("@interface-list@", getPnfTemplateInterfaceList(pnfId, ifaces, model));
+    }
+
+    private static String getPnfTemplateInterfaceList(String pnfId, List<String> ifaces, String model) {
+        StringBuffer s = new StringBuffer();
+        s.append("[");
+        if (ifaces != null) {
+            for (int i = 0; i < ifaces.size(); i++) {
+                if (i > 0) {
+                    s.append(",");
+                }
+                s.append(PNF_JSON_INTERFACE_TEMPLATE.replace("@interface@", ifaces.get(i)));
+            }
+        }
+        s.append("]");
+
+        return s.toString().replace("@pnfId@", pnfId).replace("@model@", model);
+    }
+
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/URLParamEncoder.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/URLParamEncoder.java
new file mode 100644
index 0000000..2e8b44f
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/URLParamEncoder.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.aaiconnector.impl;
+
+class URLParamEncoder {
+
+    public static String encode(String input) {
+        StringBuilder resultStr = new StringBuilder();
+        for (char ch : input.toCharArray()) {
+            if (isUnsafe(ch)) {
+                resultStr.append('%');
+                resultStr.append(toHex(ch / 16));
+                resultStr.append(toHex(ch % 16));
+            } else {
+                resultStr.append(ch);
+            }
+        }
+        return resultStr.toString();
+    }
+
+    private static char toHex(int ch) {
+        return (char) (ch < 10 ? '0' + ch : 'A' + ch - 10);
+    }
+
+    private static boolean isUnsafe(char ch) {
+        if (ch > 128 || ch < 0) {
+            return true;
+        }
+        return " %$&+,/:;=?@<>#%".indexOf(ch) >= 0;
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/EsBaseRequireNetworkElement.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/EsBaseRequireNetworkElement.java
new file mode 100644
index 0000000..7c78a4a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/EsBaseRequireNetworkElement.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database;
+
+public class EsBaseRequireNetworkElement extends EsObject {
+    public static final String ESDATATYPENAME = "required-networkelement";
+
+    public EsBaseRequireNetworkElement() {
+
+    }
+
+    public EsBaseRequireNetworkElement(String mountpountName) {
+        super();
+        this.setEsId(mountpountName);
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/EsObject.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/EsObject.java
new file mode 100644
index 0000000..4b188d1
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/EsObject.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * @author Herbert
+ *
+ */
+public class EsObject implements IsEsObject {
+
+    @JsonIgnore
+    private String esId;
+
+    @Override
+    public String getEsId() {
+        return esId;
+    }
+
+    @Override
+    public void setEsId(String esId) {
+        this.esId = esId;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDataBase.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDataBase.java
new file mode 100644
index 0000000..8561631
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDataBase.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database;
+
+import org.elasticsearch.client.Client;
+import org.elasticsearch.common.bytes.BytesReference;
+import org.elasticsearch.index.query.QueryBuilder;
+import org.elasticsearch.search.SearchHit;
+
+
+/**
+ * Interface, used by access one object
+ * @author Herbert
+ *
+ */
+public interface HtDataBase {
+
+    String getNetworkIndex();
+    void setNetworkIndex(String networkIndex);
+
+    Client getClient();
+    void closeDb();
+
+    public BytesReference doReadJsonData( String dataTypeName, IsEsObject esId );
+    public BytesReference doReadJsonData(String dataTypeName, String esId);
+    public SearchHit[] doReadAllJsonData( int start, int length, String dataTypeName );
+    public SearchHit[] doReadByQueryJsonData( int start, int length, String dataTypeName, QueryBuilder query);
+
+    public String doWriteByteArray( String dataTypeName, IsEsObject esId, byte[] json);
+    public String doWriteJsonString( String dataTypeName, IsEsObject esId, String json);
+
+    public boolean doRemove( String dataTypeName, IsEsObject esId );
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDataBaseReaderAndWriter.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDataBaseReaderAndWriter.java
new file mode 100644
index 0000000..f13b106
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDataBaseReaderAndWriter.java
@@ -0,0 +1,242 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+import org.elasticsearch.index.query.QueryBuilder;
+import org.elasticsearch.search.SearchHit;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Generic class to write lists of model classes to the database.
+ *
+ */
+public class HtDataBaseReaderAndWriter<T extends IsEsObject> {
+
+    private static final Logger log = LoggerFactory.getLogger(HtDataBaseReaderAndWriter.class);
+
+
+    private final HtDataBase db;
+    private final String dataTypeName;
+    private final HtMapper<T> mapper;
+
+    /**
+     * Class specific access to database
+     * @param db ES database descriptor
+     * @param dataTypeName datatype name
+     * @param clazz class of datatype
+     */
+    public HtDataBaseReaderAndWriter(HtDataBase db, String dataTypeName, Class<? extends T> clazz) {
+
+        this.db = db;
+        this.dataTypeName = dataTypeName;
+        this.mapper = new HtMapper<>( clazz );
+
+    }
+
+    /**
+     * Remove Object from database
+     * @param object Object with content
+     * @return true if remove is done
+     */
+    public boolean doRemove( T object) {
+
+        return db.doRemove(dataTypeName, object );
+
+    }
+
+    /**
+     * Remove all data that match the filter
+     * @param query to specify data to be deleted
+     * @return number of removed objects
+     */
+    public int doRemoveByQuery(QueryBuilder query) {
+
+        int idx = 0;                //Idx for getAll
+        int iterateLength = 100;    //Step width for iterate
+
+        SearchHit hits[];
+        do {
+            hits = db.doReadByQueryJsonData(idx, iterateLength, dataTypeName, query);
+            log.debug("Found: {} elements: {}  Failures: {}",dataTypeName,hits.length, mapper.getMappingFailures());
+
+            T object;
+            idx += hits.length;
+            for (SearchHit hit : hits) {
+
+                object = mapper.getObjectFromJson( hit.getSourceRef() );
+
+                log.debug("Mapp Object: {}\nSource: '{}'\nResult: '{}'\n Failures: {}", hit.getId(), hit.getSourceAsString(), object, mapper.getMappingFailures());
+                if (object != null) {
+                    object.setEsId( hit.getId() );
+                    doRemove(object);
+                } else {
+                    log.warn("Mapp result null Object: {}\n Source: '{}'\n : '", hit.getId(), hit.getSourceAsString());
+                }
+            }
+        } while (hits.length == iterateLength); //Do it until end indicated, because less hits than iterateLength allows.
+
+        return idx;
+    }
+
+    /**
+     * Do the mapping for test purpose
+     * @param object object for test purpose
+     * @return json String
+     */
+    public String getJson( T object ) {
+        String json = mapper.objectToJson(object);
+        return json;
+    }
+
+    /**
+     * Write one object into Database
+     * @param object Object with content
+     * @return This object for chained call pattern.
+     */
+    public T doWrite( T object) {
+
+        String json = mapper.objectToJson(object);
+        return doWrite(object, json);
+
+    }
+
+    /**
+     * Write one object into Database
+     * @param object Object with content
+     * @param json string
+     * @return This object for chained call pattern.
+     */
+    public T doWrite( T object, String json) {
+
+        log.debug("doWrite {} {}",object.getClass().getSimpleName(), object.getEsId());
+
+        if (json != null) {
+            String esId = db.doWriteJsonString(dataTypeName, object, json);
+            object.setEsId(esId);
+            log.debug("doWrite done for {} {}",object.getClass().getSimpleName(), object.getEsId());
+            return esId == null ? null : object;
+        } else {
+            log.warn("Can not map object and write to database. {} {}",object.getClass().getSimpleName(), object);
+            return null;
+        }
+
+    }
+
+
+    /**
+     * Write a list of Objects to the database.
+     * @param list Object list with content
+     * @return This object for chained call pattern.
+     */
+    public HtDataBaseReaderAndWriter<T> doWrite( Collection<T> list) {
+
+        int writeError = 0;
+        String indexName = db.getNetworkIndex();
+
+        log.debug("Write to ES database {}, {} Class: {}  {} elements",indexName,dataTypeName, mapper.getClazz().getSimpleName(), list.size());
+
+        if (indexName == null) {
+            throw new IllegalArgumentException("Missing Index");
+        }
+
+        if (list != null && !list.isEmpty()) {
+            for( T s : list ) {
+                if ( doWrite(s) == null )  {
+                    if ( ++writeError > 5 ) {
+                        log.warn("Leave because of to >5 write errors");
+                        break;
+                    }
+                }
+            }
+
+        }
+
+        return this;
+    }
+
+    /**
+     * Read one object via the object class specific ID
+     * @param object Object refrenced by idString
+     * @return The Object if found or null
+     */
+    public @Nullable T doRead( IsEsObject object ) {
+        T res = mapper.getObjectFromJson( db.doReadJsonData( dataTypeName, object) );
+        if (res != null) {
+            res.setEsId(object.getEsId());
+        }
+        return res;
+    }
+
+    /**
+     * Read one object via the object class specific ID
+     * @param objectEsId Object refrence
+     * @return The Object if found or null
+     */
+    public @Nullable T doRead( String objectEsId ) {
+        T res = mapper.getObjectFromJson( db.doReadJsonData( dataTypeName, objectEsId ) );
+        if (res != null) {
+            res.setEsId(objectEsId);
+        }
+        return res;
+    }
+
+
+    /**
+     * Read all existing objects of a type
+     * @return the list of all objects
+     */
+    public List<T> doReadAll() {
+
+        List<T> res = new ArrayList<>();
+        int idx = 0;                //Idx for getAll
+        int iterateLength = 100;    //Step width for iterate
+
+        SearchHit hits[];
+
+
+        do {
+            hits = db.doReadAllJsonData(idx, iterateLength, dataTypeName);
+            log.debug("Read: {} elements: {}  Failures: {}",dataTypeName,hits.length, mapper.getMappingFailures());
+
+            T object;
+            idx += hits.length;
+            for (SearchHit hit : hits) {
+
+                object = mapper.getObjectFromJson( hit.getSourceRef() );
+
+                log.debug("Mapp Object: {}\nSource: '{}'\nResult: '{}'\n Failures: {}", hit.getId(), hit.getSourceAsString(), object, mapper.getMappingFailures());
+                if (object != null) {
+                    object.setEsId( hit.getId() );
+                    res.add( object );
+                } else {
+                    log.warn("Mapp result null Object: {}\n Source: '{}'\n : '", hit.getId(), hit.getSourceAsString());
+                }
+            }
+        } while (hits.length == iterateLength); //Do it until end indicated, because less hits than iterateLength allows.
+
+        return res;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseClientAbstract.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseClientAbstract.java
new file mode 100644
index 0000000..9b7d115
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseClientAbstract.java
@@ -0,0 +1,766 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import org.elasticsearch.ElasticsearchException;
+import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse;
+import org.elasticsearch.action.admin.cluster.node.info.NodesInfoResponse;
+import org.elasticsearch.action.admin.indices.alias.IndicesAliasesResponse;
+import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;
+import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
+import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequestBuilder;
+import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;
+import org.elasticsearch.action.admin.indices.mapping.put.PutMappingResponse;
+import org.elasticsearch.action.delete.DeleteResponse;
+import org.elasticsearch.action.get.GetResponse;
+import org.elasticsearch.action.index.IndexRequestBuilder;
+import org.elasticsearch.action.index.IndexResponse;
+import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.client.Client;
+import org.elasticsearch.client.transport.TransportClient;
+import org.elasticsearch.cluster.node.DiscoveryNode;
+import org.elasticsearch.common.bytes.BytesReference;
+import org.elasticsearch.common.settings.Settings;
+import org.elasticsearch.common.transport.InetSocketTransportAddress;
+import org.elasticsearch.common.unit.TimeValue;
+import org.elasticsearch.index.query.QueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.search.SearchHit;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author Herbert
+ *
+ */
+public class HtDatabaseClientAbstract implements HtDataBase, AutoCloseable {
+
+    private final Logger log = LoggerFactory.getLogger(HtDatabaseClientAbstract.class);
+
+    private static int DELAYSECONDS = 10;
+    private final Client client;
+    private String esIndexAlias;
+
+    /**
+     * Full database initialization.
+     *
+     * @param esIndex Database index
+     * @param esNodeserverName Servername or Server-IP that hosts the node.
+     * @param esClusterName Name of the cluster
+     * @param esNodeName Name of the node within the cluster to connect to.
+     * @throws UnknownHostException Servername not known.
+     */
+    public HtDatabaseClientAbstract(String esIndex, String esNodeserverName, String esClusterName, String esNodeName)
+            throws UnknownHostException {
+
+        this.esIndexAlias = esIndex;
+
+        Settings settings =
+                Settings.settingsBuilder().put("cluster.name", esClusterName).put("node.name", esNodeName).build();
+        this.client = getClient(esNodeserverName, settings);
+
+    }
+
+    /**
+     * Do not use the hostname, but use the IP for getting the client
+     *
+     * @param esIndex index to be used by the client
+     * @param esClusterName name of the ES cluster
+     * @param esNodeName name of the node
+     * @throws UnknownHostException if hostname not known
+     */
+    public HtDatabaseClientAbstract(String esIndex, String esClusterName, String esNodeName)
+            throws UnknownHostException {
+
+        this.esIndexAlias = esIndex;
+        Settings settings =
+                Settings.settingsBuilder().put("cluster.name", esClusterName).put("node.name", esNodeName).build();
+        this.client = getClient(null, settings);
+    }
+
+
+    /**
+     * Simple database initialization. Query all ES configuration information from cluster node.
+     *
+     * @param esIndex Database index
+     * @param esNodeserverHostName Servername or Server-IP that hosts the node.
+     * @throws UnknownHostException Servername not known.
+     */
+
+    public HtDatabaseClientAbstract(String esIndex, String esNodeserverHostName) throws UnknownHostException {
+
+        this.esIndexAlias = esIndex;
+
+        Settings settings = Settings.settingsBuilder().put("client.transport.ignore_cluster_name", true)
+                .put("client.transport.sniff", true).build();
+        this.client = getClient(esNodeserverHostName, settings);
+    }
+
+    /**
+     * Simple database initialization. Query all ES configuration information from cluster node.
+     *
+     * @param esIndex Database index
+     * @param database database node descriptor
+     */
+    public HtDatabaseClientAbstract(String esIndex, @Nonnull HtDatabaseNode database) {
+
+        this.esIndexAlias = esIndex;
+        this.client = database.getClient();
+    }
+
+
+    /*----------------------------------
+     * some constructing functions, used by public constructors
+     */
+    /**
+     *
+     * @param esNodeserverName
+     * @param settings
+     * @return
+     * @throws UnknownHostException
+     */
+    private final TransportClient getClient(@Nullable String esNodeserverName, Settings settings)
+            throws UnknownHostException {
+
+        TransportClient newClient = TransportClient.builder().settings(settings).build();
+
+        if (esNodeserverName != null) {
+            InetAddress nodeIp = InetAddress.getByName(esNodeserverName);
+            newClient.addTransportAddress(new InetSocketTransportAddress(nodeIp, 9300));
+        }
+
+        setup(newClient);
+        return newClient;
+    }
+
+    private void setup(TransportClient newClient) {
+        NodesInfoResponse nodeInfos = newClient.admin().cluster().prepareNodesInfo().get();
+        String clusterName = nodeInfos.getClusterName().value();
+
+        // ------ Debug/ Info
+        StringBuffer logInfo = new StringBuffer();
+        logInfo.append("Create ES Client an localhost for Cluster '");
+        logInfo.append(clusterName);
+        logInfo.append("' for index '");
+        logInfo.append(esIndexAlias);
+        logInfo.append("' Nodelist: ");
+        for (DiscoveryNode node : newClient.connectedNodes()) {
+            logInfo.append("(");
+            logInfo.append(node.toString());
+            logInfo.append(") ");
+        }
+        log.info(logInfo.toString());
+        // ------ Debug/ Info
+
+        log.info("Starting Database service. Short wait.");
+
+        ClusterHealthResponse nodeStatus = newClient.admin().cluster().prepareHealth().setWaitForGreenStatus()
+                // .setWaitForYellowStatus()
+                .setTimeout(TimeValue.timeValueSeconds(DELAYSECONDS)).get();
+        log.debug("Elasticsearch client started with status {}", nodeStatus.toString());
+
+
+        List<DiscoveryNode> nodeList = newClient.connectedNodes();
+
+        if (nodeList.isEmpty()) {
+            log.info("ES Client created for nodes: <empty node list>");
+        } else {
+            int t = 0;
+            for (DiscoveryNode dn : nodeList) {
+                log.info("ES Client created for node#{}: {}", t, dn.getName());
+            }
+        }
+
+        Runtime.getRuntime().addShutdownHook(new Thread() {
+            @Override
+            public void run() {
+                log.info("Shutdown node " + HtDatabaseClientAbstract.class.getSimpleName());
+            }
+        });
+
+        log.info("Database service started.");
+
+    }
+
+
+    /*----------------------------------
+     * Getter / Setter
+     */
+
+    @Override
+    public String getNetworkIndex() {
+        return esIndexAlias;
+    }
+
+    @Override
+    public void setNetworkIndex(String es_index) {
+        this.esIndexAlias = es_index;
+    }
+
+    @Override
+    public Client getClient() {
+        return client;
+    }
+
+    /*----------------------------------
+     * Functions
+     */
+
+    /**
+     * Close function
+     */
+    @Override
+    public void close() {
+        client.close();
+    }
+
+    /**
+     * Create an ES index. Delete an existing index.
+     */
+    public void doDeleteIndex() {
+        log.info("Remove index {}", esIndexAlias);
+
+        if (esIndexAlias == null) {
+            throw new IllegalArgumentException("Missing Index");
+        }
+
+        try {
+
+            // Delete index
+            IndicesExistsResponse res = client.admin().indices().prepareExists(esIndexAlias).execute().actionGet();
+
+            if (res.isExists()) {
+                log.info("Delete Index start: {}", esIndexAlias);
+                DeleteIndexRequestBuilder delIdx = client.admin().indices().prepareDelete(esIndexAlias);
+                delIdx.execute().actionGet();
+                log.info("Delete Index done.");
+            }
+
+        } catch (ElasticsearchException e) {
+            log.warn(e.getDetailedMessage());
+        }
+    }
+
+    /**
+     * Verify if index already created
+     *
+     * @return boolean accordingly
+     */
+    public boolean isExistsIndex() {
+
+        if (esIndexAlias == null) {
+            throw new IllegalArgumentException("Missing Index");
+        }
+
+        log.debug("Check status of ES index: {}", esIndexAlias);
+
+        final IndicesExistsResponse indexStatus =
+                client.admin().indices().prepareExists(esIndexAlias).execute().actionGet();
+
+        return indexStatus.isExists();
+
+    }
+
+
+    /**
+     * Create and write the mapping and setting of the index
+     *
+     * @param jsonIndexMappingSetting with mapping and setting definition Object or null for no
+     *        configuration
+     */
+    public void doCreateIndexWithMapping(JSONObject jsonIndexMappingSetting) {
+
+        if (esIndexAlias == null) {
+            throw new IllegalArgumentException("Missing Index");
+        }
+
+        try {
+            // Create index with mapping and setting
+            String esIndexName = esIndexAlias + "_v1";
+            log.debug("Create not existing ES index: {} with alias:{}", esIndexName, esIndexAlias);
+
+            doCreateIndexWithMappingsAndSettings(esIndexName, jsonIndexMappingSetting);
+
+            // Set Alias
+            log.debug("Set alias {} to index {}", esIndexAlias, esIndexName);
+            IndicesAliasesResponse setAliasResponse =
+                    client.admin().indices().prepareAliases().addAlias(esIndexName, esIndexAlias).execute().actionGet();
+            log.debug("CreateIndex response {}", setAliasResponse);
+
+        } catch (ElasticsearchException e) {
+            log.warn("ElasticsearchException: {}", e.getDetailedMessage());
+        }
+    }
+
+
+    /**
+     * Assign each mapping in the mappings section as separate mapping entry
+     *
+     * @param createIndexRequestBuilder builder for command to ES
+     * @param jsonIndexMappingSetting json with mapping information
+     */
+    private void doCreateIndexWithMappingsAndSettings(String esIndexName, JSONObject jsonIndexMappingSetting) {
+
+        CreateIndexRequestBuilder createIndexRequestBuilder = client.admin().indices().prepareCreate(esIndexName);
+        if (createIndexRequestBuilder == null) {
+            throw new HtDatabaseClientException("No client. Can not create index.", esIndexAlias);
+        }
+
+        if (jsonIndexMappingSetting != null) {
+            try {
+                doAddMappings(createIndexRequestBuilder, jsonIndexMappingSetting);
+                doAddSetting(createIndexRequestBuilder, jsonIndexMappingSetting);
+                log.debug(" doCreateIndexWithMapping");
+            } catch (RuntimeException e) {
+                log.info("Exception during adding mappings or settings to CreateIndexRequestBuilder. ", e);
+            }
+        }
+
+        CreateIndexResponse createResponse = createIndexRequestBuilder.execute().actionGet();
+        log.debug("CreateIndex response {}", createResponse);
+    }
+
+    /**
+     * Add one or more mappings to command
+     *
+     * @param createIndexRequestBuilder to add parameters
+     * @param jsonIndexMappingSetting contains mapping and setting information
+     */
+    private void doAddMappings(CreateIndexRequestBuilder createIndexRequestBuilder,
+            JSONObject jsonIndexMappingSetting) {
+
+        // If there are json information .. verify if they contain mappings
+        JSONObject jsonMapping = jsonIndexMappingSetting.optJSONObject("mappings");
+
+        // Handle optional mappings if requested
+        if (jsonMapping != null) {
+            log.debug("Set mapping for index {} {}", esIndexAlias, jsonMapping);
+
+            // For any reason the function below was not working without iterator
+            Set<String> keys = getStringKeySet(jsonMapping);
+            if (log.isDebugEnabled()) {
+                log.debug("Found length: {} keys: {}", jsonMapping.length(), keys.size());
+            }
+
+            for (String docType : keys) {
+                JSONObject jsonObject = jsonMapping.getJSONObject(docType);
+                if (jsonObject != null) {
+                    String jsonObjectString = jsonObject.toString();
+                    log.debug("Doctype:{} mapping:{}", docType, jsonObjectString);
+                    createIndexRequestBuilder.addMapping(docType, jsonObjectString);
+                    log.debug("Mapping created Doctype:{}", docType);
+                } else {
+                    log.debug("No jsonObject for docType {}", docType);
+                }
+            }
+        } else {
+            log.debug("No mapping requested for index {}", esIndexAlias);
+        }
+    }
+
+    /**
+     * Add one setting to command
+     *
+     * @param createIndexRequestBuilder to add parameters
+     * @param jsonIndexMappingSetting contains mapping and setting information
+     */
+    private void doAddSetting(CreateIndexRequestBuilder createIndexRequestBuilder, JSONObject jsonIndexMappingSetting) {
+        // Handle optional settings if requested
+        log.debug("Handle settings");
+        JSONObject jsonSettings = jsonIndexMappingSetting.optJSONObject("settings");
+        if (jsonSettings != null) {
+            log.debug("Set setting for index {} {}", esIndexAlias, jsonSettings);
+            createIndexRequestBuilder.setSettings(Settings.settingsBuilder().loadFromSource(jsonSettings.toString()));
+        } else {
+            log.debug("No settings requested for index {}", esIndexAlias);
+        }
+    }
+
+    /**
+     * Create Index with alias according to definition, but no mapping
+     */
+    public void doCreateIndex() {
+        doCreateIndexWithMapping(null);
+    }
+
+    /**
+     * Write a JSON mapping definition for a document from a file to ES Hint: A later change of the
+     * mapping is not possible.
+     *
+     * @param jsonString String with mapping definition in JSON Format
+     */
+
+    public void doWriteMappingJson(String jsonString) {
+
+        if (esIndexAlias == null) {
+            throw new IllegalArgumentException("Missing Index");
+        }
+        if (jsonString == null) {
+            String s = "Mapping string parameter is null";
+            log.warn(s);
+            throw new IllegalArgumentException(s);
+        }
+
+        try {
+            // MAPPING GOES HERE
+            log.debug("Check status of ES index: {}", esIndexAlias);
+
+            final IndicesExistsResponse indexStatus =
+                    client.admin().indices().prepareExists(esIndexAlias).execute().actionGet();
+
+            if (indexStatus.isExists()) {
+                log.debug("ES index exists: {}", esIndexAlias);
+                // A change of mapping is not working. This here works only for new datatypes
+
+                PutMappingResponse res = client.admin().indices().preparePutMapping(esIndexAlias).setSource(jsonString)
+                        .execute().actionGet();
+                if (log.isDebugEnabled()) {
+                    log.debug("Result: {}", res);
+                }
+
+            } else {
+                log.debug("Create not existing ES index: {}", esIndexAlias);
+
+                CreateIndexRequestBuilder createIndexRequestBuilder =
+                        client.admin().indices().prepareCreate(esIndexAlias);
+                createIndexRequestBuilder.addMapping(jsonString).execute().actionGet();
+            }
+
+        } catch (ElasticsearchException e) {
+            log.warn(e.getDetailedMessage());
+        }
+    }
+
+    /**
+     * Write a Json mapping definition for a document from a file to ES
+     *
+     * @param fileName Filename with json definition.
+     */
+    public void doWriteMappingFromFile(String fileName) {
+
+
+        log.info("Write mapping from File: {}", fileName);
+
+        if (esIndexAlias == null) {
+            throw new IllegalArgumentException("Missing Index");
+        }
+
+        if (fileName == null) {
+            log.warn("No mapping for {} specified in parameter file.", esIndexAlias);
+            return;
+        }
+
+        String content = null;
+
+        try {
+            content = new String(Files.readAllBytes(Paths.get(fileName)), StandardCharsets.UTF_8);
+        } catch (IOException e1) {
+            log.warn("Problem with file {}: {}", fileName, e1.getMessage());
+        }
+
+        doWriteMappingJson(content);
+
+    }
+
+    /**
+     * Write list with json objects from json files
+     *
+     * @param docTypeAndFileName List with 2 String Array. String[0] Contains the dataType name
+     *        String[1] Contains the filename
+     */
+    public void doWriteJsonFiles(List<String[]> docTypeAndFileName) {
+
+        if (docTypeAndFileName != null) {
+            log.debug("Write number of JSONFiles: {}", docTypeAndFileName.size());
+            int t = 1;
+            for (String[] s : docTypeAndFileName) {
+                if (s.length == 2) {
+                    writeJsonObjectsFromFile(s[0], s[1]);
+                } else {
+                    log.warn("Wrong parameters number. Entry: {}", t);
+                }
+                t++;
+            }
+        }
+    }
+
+    /**
+     * Write one object into Database
+     *
+     * @param esId Database index
+     * @param dataTypeName Name of datatype
+     * @param json String in JSON format.
+     * @return esId of the object
+     */
+    @Override
+    public String doWriteJsonString(String dataTypeName, IsEsObject esId, String json) {
+        return doWriteByteArray(dataTypeName, esId, json.getBytes());
+    }
+
+    /**
+     * Write one object into Database
+     *
+     * @param esId Database index
+     * @param dataTypeName Name of datatype
+     * @param json String in JSON format.
+     * @return esId of the object
+     */
+
+    @Override
+    public String doWriteByteArray(String dataTypeName, IsEsObject esId, byte[] json) {
+        return doWriteRaw(dataTypeName, esId.getEsId(), json);
+    }
+
+    /**
+     * Write one object into Database
+     *
+     * @param dataTypeName Name of datatype
+     * @param id id of the object or null
+     * @param json Object as json
+     * @return esId of the Object
+     */
+    public String doWriteJsonObject(String dataTypeName, String id, JSONObject json) {
+        return doWriteRaw(dataTypeName, id, json.toString().getBytes());
+    }
+
+    /**
+     * Write one object into Database
+     *
+     * @param esId Database index or null
+     * @param dataTypeName Name of datatype
+     * @param json String in JSON format.
+     * @return esId of the object
+     */
+
+    public String doWriteRaw(String dataTypeName, String esId, byte[] json) {
+
+        if (esIndexAlias == null) {
+            throw new IllegalArgumentException("Missing Index");
+        }
+
+        IndexRequestBuilder request = esId == null || esId.isEmpty() ? client.prepareIndex(esIndexAlias, dataTypeName)
+                : client.prepareIndex(esIndexAlias, dataTypeName, esId);
+
+        IndexResponse response = null;
+        try {
+            response = request.setSource(json).execute().actionGet();
+        } catch (ElasticsearchException e) {
+            log.warn("ES Exception {} Json: {}", e.getMessage(), new String(json));
+        }
+
+        if (response == null) {
+            String jsonString = new String(json);
+            log.warn("Response null during write: {} {}", esId, jsonString);
+            return null;
+        } else {
+            return response.getId();
+        }
+    }
+
+    /**
+     * Write JSON Data. First level contains datatype, next level id Example "datatype" : { "id" : { } }
+     * @param json Object
+     */
+    public void doWriteJSONObject(JSONObject json) {
+
+        Set<String> docTypes = getStringKeySet(json);
+        log.debug("Found number of keys: {} keys: {}", json.length(), docTypes.size());
+        for (String docType : docTypes) {
+            JSONObject objects = json.optJSONObject(docType);
+            if (objects == null) {
+                log.debug("Skip json {} with class {}", docType, json.get(docType).getClass());
+            } else {
+                doWriteJsonObjectsWithIds(docType, objects);
+            }
+        }
+    }
+
+    /**
+     * Write object and Id of object for a doctype
+     * @param docType of the objects
+     * @param objects a bunch of objects with ids as object name
+     */
+    private void doWriteJsonObjectsWithIds(String docType, JSONObject objects) {
+        Set<String> ids = getStringKeySet(objects);
+        log.debug("write doctype {} with elements {}", docType, ids.size());
+        for (String id : ids) {
+            JSONObject jsonIdObject = objects.optJSONObject(id);
+            if (jsonIdObject == null) {
+                log.debug("Skip jsonsub {} with class {}", id, objects.get(id).getClass());
+            } else {
+                if (log.isTraceEnabled()) {
+                    log.trace("Jsonsub object of id {} '{}'", id, jsonIdObject);
+                }
+                this.doWriteRaw(docType, id, jsonIdObject.toString().getBytes());
+            }
+        }
+    }
+
+    /**
+     * Remove Object from database
+     */
+    @Override
+    public boolean doRemove(String dataTypeName, IsEsObject esId) {
+
+        if (esIndexAlias == null) {
+            throw new IllegalArgumentException("Missing Index");
+        }
+
+        DeleteResponse response =
+                client.prepareDelete(esIndexAlias, dataTypeName, esId.getEsId()).execute().actionGet();
+
+        return response.isFound();
+    }
+
+    /**
+     * Read Json Object from database
+     */
+    @Override
+    public @Nullable BytesReference doReadJsonData(String dataTypeName, IsEsObject esId) {
+
+        if (esId.getEsId() == null) {
+            throw new IllegalArgumentException("Read access to object without database Id");
+        }
+
+        return doReadJsonData(dataTypeName, esId.getEsId());
+    }
+
+    /**
+     * Read Json Object from database
+     */
+    @Override
+    public @Nullable BytesReference doReadJsonData(String dataTypeName, String esId) {
+
+        log.debug("NetworkIndex read: {}", esIndexAlias);
+
+        GetResponse response = client.prepareGet(esIndexAlias, dataTypeName, esId)
+                // .setOperationThreaded(false)
+                .execute().actionGet();
+
+        return response.isExists() ? response.getSourceAsBytesRef() : null;
+    }
+
+
+    @Override
+    public SearchHit[] doReadByQueryJsonData(int start, int length, String dataTypeName, QueryBuilder qb) {
+
+        log.debug("NetworkIndex query and read: {}", esIndexAlias);
+
+        SearchResponse response1 = client.prepareSearch(esIndexAlias).setTypes(dataTypeName).setQuery(qb).setFrom(start)
+                .setSize(length).execute().actionGet();
+
+        return response1.getHits().hits();
+    }
+
+
+    @Override
+    public SearchHit[] doReadAllJsonData(int start, int length, String dataTypeName) {
+        // Use query
+        QueryBuilder qb = QueryBuilders.matchAllQuery();
+        return doReadByQueryJsonData(start, length, dataTypeName, qb);
+    }
+
+    /**
+     * Write Json datetype that is specified by file to ES
+     *
+     * @param dataType ES Datatype name
+     * @param fileName file name
+     */
+    public void writeJsonObjectsFromFile(String dataType, String fileName) {
+
+        log.debug("Start: Index: '{}' ' datatype: '{}'  File: '{}'", esIndexAlias, dataType, fileName);
+
+        String content = null;
+
+        try {
+            content = new String(Files.readAllBytes(Paths.get(fileName)), StandardCharsets.UTF_8);
+        } catch (IOException e1) {
+            log.warn("Can not read file: {}", e1.getMessage());
+        }
+
+        if (content != null && content.charAt(0) == 0xfeff) {
+            content = content.substring(1);
+            log.debug("Delete first char {} {}", dataType, fileName);
+        }
+
+        if (content != null) {
+            IndexResponse response = null;
+            try {
+                response = client.prepareIndex(esIndexAlias, dataType).setSource(content).execute().actionGet();
+            } catch (ElasticsearchException e) {
+                log.error("ElasticsearchException during write:  for {} from {} from {}", e.getMessage(), dataType, fileName);
+            } catch (Exception e) {
+                log.error("Exception during write:  for {} from {} from {}", e.getMessage(), dataType, fileName);
+            }
+
+            if (response != null) {
+                if (!response.isCreated()) {
+                    String responseAsString = response.toString();
+                    log.warn("Jackson Response not created: {} {} {}", dataType, fileName, responseAsString);
+                } else {
+                    log.debug("Created: {}", response.getId());
+                }
+            } else {
+                log.warn("Jackson Response null after write {} {}", dataType, fileName);
+            }
+        }
+
+    }
+
+    @Override
+    public void closeDb() {
+        if (client != null) {
+            client.close();
+        }
+    }
+
+
+    // For any reason the function json.keySet() was not working in Oxygen => replaced by iterator
+    public static @Nonnull Set<String> getStringKeySet(JSONObject json) {
+        Set<String> keys = new HashSet<>();
+        Iterator<?> iterator = json.keys();
+        while (iterator.hasNext()) {
+            keys.add((String) iterator.next());
+        }
+        return keys;
+    }
+
+
+    private static class HtDatabaseClientException extends RuntimeException {
+
+        private static final long serialVersionUID = 1L;
+
+        public HtDatabaseClientException(String string, String esIndexAlias) {
+            super(string + " Effected index: " + "esIndexAlias");
+        }
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseNode.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseNode.java
new file mode 100644
index 0000000..47d7570
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseNode.java
@@ -0,0 +1,261 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database;
+
+import static org.elasticsearch.node.NodeBuilder.nodeBuilder;
+import java.io.File;
+import java.io.IOException;
+import java.net.DatagramSocket;
+import java.net.ServerSocket;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.List;
+import javax.annotation.Nullable;
+import org.apache.lucene.util.Version;
+import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse;
+import org.elasticsearch.client.Client;
+import org.elasticsearch.common.settings.Settings;
+import org.elasticsearch.common.unit.TimeValue;
+import org.elasticsearch.node.Node;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.Resources;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.AkkaConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.EsConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.GeoConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.util.ClusterNodeInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class HtDatabaseNode implements AutoCloseable {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(HtDatabaseNode.class);
+    private static final String DBCONFIGFILENAME = "etc/elasticsearch.yml";
+    private static final String RESFOLDER_PLUGIN = "elasticsearch/plugins";
+    private static final String RESFOLDER_PLUGINHEAD = RESFOLDER_PLUGIN + "/head";
+    private static final String RESFOLDER_PLUGINDELETE = RESFOLDER_PLUGIN + "/delete-by-query";
+    private static int MIN_PORT_NUMBER = 1024;
+    private static int MAX_PORT_NUMBER = 65535;
+    private static int ES_PORT = 9200;
+    private static int DELAYSECONDS = 120;
+    private static String PLUGINFOLDER = "etc/elasticsearch-plugins";
+
+    private static HtDatabaseNode oneNode = null;
+    private static Object initializationLock = new Object();
+    private static Integer initializedTarget = 0;
+    private static Integer initializedReached = 0;
+
+    private final Node node;
+
+    private HtDatabaseNode() {
+        LOGGER.debug("Start elasticsearch service");
+
+        LOGGER.debug("Lucine version: " + Version.LATEST);
+
+        node = nodeBuilder().settings(Settings.builder().put("path.home", "etc").put("path.conf", "etc")).node();
+        LOGGER.info("Starting Database service. Wait {} s", DELAYSECONDS);
+        // Wait for orange status for single node without redundancy
+        ClusterHealthResponse nodeStatus = node.client().admin().cluster().prepareHealth().setWaitForYellowStatus()
+                .setTimeout(TimeValue.timeValueSeconds(DELAYSECONDS)).get();
+
+        LOGGER.debug("Elasticsearch service started with status {}", nodeStatus.toString());
+    }
+
+    /**
+     * Close node
+     */
+    @Override
+    public void close() {
+        node.close();
+        oneNode = null; // Release the one instance that was started !
+    }
+
+    /**
+     * Provide indication if all Index initializations are done.
+     *
+     * @return true if all index initializations are ready, false if not
+     */
+    public Boolean getInitialized() {
+        synchronized (initializationLock) {
+            return initializedTarget != 0 && initializedReached == initializedTarget;
+        }
+    }
+
+    public void setInitializedReached() {
+        synchronized (initializationLock) {
+            HtDatabaseNode.initializedReached++;
+        }
+    }
+
+    public void setInitializedTarget() {
+        synchronized (initializationLock) {
+            HtDatabaseNode.initializedTarget++;
+        }
+    }
+
+    public Client getClient() {
+        return node.client();
+    }
+
+
+    /*
+     * --------------------------------------- Static functions below
+     */
+
+
+    // Visibility package for test purpose
+    static void checkorcreateplugins(String pluginFolder) {
+        File f = new File(pluginFolder);
+        if (!f.exists()) {
+            f.mkdir();
+        }
+        Resources.copyFolderInto(RESFOLDER_PLUGINHEAD, PLUGINFOLDER, RESFOLDER_PLUGIN);
+        Resources.copyFolderInto(RESFOLDER_PLUGINDELETE, PLUGINFOLDER, RESFOLDER_PLUGIN);
+    }
+
+    /**
+     * Checks to see if a specific port is available.
+     *
+     * @param port the port to check for availability
+     */
+    private static boolean isPortAvailable(int port) {
+        if (port < MIN_PORT_NUMBER || port > MAX_PORT_NUMBER) {
+            throw new IllegalArgumentException("Invalid start port: " + port);
+        }
+
+        ServerSocket ss = null;
+        DatagramSocket ds = null;
+        try {
+            ss = new ServerSocket(port);
+            ss.setReuseAddress(true);
+            ds = new DatagramSocket(port);
+            ds.setReuseAddress(true);
+            return true;
+        } catch (IOException e) {
+        } finally {
+            if (ds != null) {
+                ds.close();
+            }
+
+            if (ss != null) {
+                try {
+                    ss.close();
+                } catch (IOException e) {
+                    /* should not be thrown */
+                }
+            }
+        }
+
+        return false;
+    }
+
+    private static void checkorcreateConfigFile(EsConfig config, AkkaConfig akkaConfig, GeoConfig geoConfig) {
+        File f = new File(DBCONFIGFILENAME);
+        if (!f.exists()) {
+            LOGGER.debug("no " + DBCONFIGFILENAME + " found - extracting from resources");
+            if (Resources.extractFileTo("elasticsearch/elasticsearch.yml", f)) {
+                // replace template values
+                LOGGER.debug("replace template values with config:" + config);
+                Charset charset = StandardCharsets.UTF_8;
+                try {
+                    Path p = f.toPath();
+                    String hostName = "0.0.0.0"; // Default as initialisation value
+                    if (akkaConfig != null && akkaConfig.isCluster()) {
+                        LOGGER.debug("cluster configuration found");
+                        hostName = akkaConfig.getClusterConfig().getHostName(hostName);
+                        String clusterDBName = akkaConfig.getClusterConfig().getDBClusterName(null);
+                        String nodeName = String.format("node%d.%s", akkaConfig.getClusterConfig().getRoleMemberIndex(),
+                                clusterDBName);
+                        if (clusterDBName != null) {
+                            config.setCluster(clusterDBName);
+                            config.setNode(nodeName);
+                            config.save();
+                            LOGGER.info("set db name to " + clusterDBName + " nodename=" + nodeName);
+                        } else {
+                            LOGGER.warn("unable to set correct db clustername");
+                        }
+                    }
+                    String content = new String(Files.readAllBytes(p), charset);
+                    content = content.replaceAll("\\$clustername", config.getCluster())
+                            .replaceAll("\\$nodename", config.getNode()).replaceAll("\\$hostname", hostName);
+
+                    // add cluster configuration
+                    if (akkaConfig != null && akkaConfig.isCluster()) {
+                        List<ClusterNodeInfo> seedNodes = akkaConfig.getClusterConfig().getSeedNodes();
+                        String nodesJSONString = "[\"" + seedNodes.get(0).getRemoteAddress() + "\"";
+                        for (int i = 1; i < seedNodes.size(); i++) {
+                            nodesJSONString += ",\"" + seedNodes.get(i).getRemoteAddress() + "\"";
+                        }
+                        nodesJSONString += "]";
+                        content += System.lineSeparator()
+                                + String.format("discovery.zen.ping.unicast.hosts: %s", nodesJSONString);
+
+                        if (geoConfig != null) {
+                            LOGGER.debug("adding zone configuration");
+                            content += System.lineSeparator() + String
+                                    .format("cluster.routing.allocation.awareness.force.zone.values: zone1,zone2");
+                            content += System.lineSeparator()
+                                    + String.format("cluster.routing.allocation.awareness.attributes: zone");
+                            if (geoConfig.isPrimary(akkaConfig.getClusterConfig().getRoleMember())) {
+                                content += System.lineSeparator() + String.format("node.zone: zone1");
+                                LOGGER.debug("setting zone to zone1");
+                            } else {
+                                content += System.lineSeparator() + String.format("node.zone: zone2");
+                                LOGGER.debug("setting zone to zone2");
+                            }
+                        }
+                    }
+                    Files.write(p, content.getBytes(charset));
+                } catch (IOException e) {
+                    LOGGER.warn("problem replacing values in file: " + e.getMessage());
+
+                }
+            } else {
+                LOGGER.warn("problem writing database.yml to etc folder from res");
+            }
+        }
+    }
+
+    /**
+     * Start as singleton
+     *
+     * @return the node or null if external node used
+     */
+    public static @Nullable HtDatabaseNode start(EsConfig config) throws IllegalStateException {
+        return start(config, null, null);
+    }
+
+    public static HtDatabaseNode start(EsConfig config, AkkaConfig akkaConfig, GeoConfig geoConfig) {
+        if (isPortAvailable(ES_PORT)) {
+            LOGGER.info("ES Port not in use. Start internal ES.");
+            if (oneNode == null) {
+                checkorcreateplugins(PLUGINFOLDER);
+                checkorcreateConfigFile(config, akkaConfig, geoConfig);
+                oneNode = new HtDatabaseNode();
+            } else {
+                throw new IllegalStateException(
+                        "Database is already started, but can only be started once. Stop here.");
+            }
+        } else {
+            LOGGER.info("ES Port in use. External ES used.");
+        }
+
+        return oneNode;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseUpdateFile.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseUpdateFile.java
new file mode 100644
index 0000000..f846000
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseUpdateFile.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Enumeration;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.json.JSONTokener;
+
+public class HtDatabaseUpdateFile extends ZipFile {
+
+	public static final String FILENAME_DEFAULT = "elasticsearch_update.zip";
+
+	public class EsUpdateObject {
+		public final String Uri;
+		public final String Method;
+		public final JSONObject Body;
+
+		public EsUpdateObject(JSONObject o) {
+			this.Uri = o.getString("uri");
+			this.Method = o.getString("method");
+			this.Body = o.getJSONObject("body");
+		}
+	}
+
+	public interface FileReadCallback {
+		void read(EsUpdateObject obj,String filename);
+
+		void onerror(String filename,IOException e);
+	}
+
+	private static final Comparator<ZipEntry> byfilenameComparator = new Comparator<ZipEntry>() {
+
+		@Override
+		public int compare(ZipEntry o1, ZipEntry o2) {
+			return o1.getName().compareTo(o2.getName());
+		}
+	};
+
+	public HtDatabaseUpdateFile(String filename) throws IOException {
+		super(filename);
+	}
+
+	private static String readFile(final InputStream s) throws IOException {
+		// read file
+		BufferedReader in = new BufferedReader(new InputStreamReader(s));
+		StringBuilder sb = new StringBuilder();
+		String inputLine;
+		while ((inputLine = in.readLine()) != null) {
+			sb.append(inputLine);
+		}
+		in.close();
+		s.close();
+		return sb.toString();
+	}
+
+	public boolean readFiles(FileReadCallback cb) {
+		boolean r=true;
+		Enumeration<? extends ZipEntry> entries = this.entries();
+		ArrayList<? extends ZipEntry> list = Collections.list(entries);
+		Collections.sort(list, byfilenameComparator);
+		for (ZipEntry entry : list) {
+			if (entry.isDirectory())
+				continue;
+			try {
+				InputStream stream = this.getInputStream(entry);
+				Object data = new JSONTokener(readFile(stream)).nextValue();
+				stream.close();
+				if(data instanceof JSONArray)
+				{
+					JSONArray a=(JSONArray)data;
+					for(int i=0;i<a.length();i++)
+					{
+						cb.read(new EsUpdateObject(a.getJSONObject(i)),entry.getName());
+					}
+				}
+				else if(data instanceof JSONObject)
+				{
+					cb.read(new EsUpdateObject( (JSONObject)data),entry.getName());
+				}
+			} catch (IOException e) {
+				r=false;
+				cb.onerror(entry.getName(),e);
+			}
+		}
+		return r;
+	}
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseWebAPIClient.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseWebAPIClient.java
new file mode 100644
index 0000000..2593079
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseWebAPIClient.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class HtDatabaseWebAPIClient {
+
+    private static Logger LOG = LoggerFactory.getLogger(HtDatabaseWebAPIClient.class);
+    private static final int BUFSIZE = 1024;
+    private static final String CHARSET = "UTF-8";
+    private final String host;
+    private final int port;
+
+    public HtDatabaseWebAPIClient() {
+        this.host = "http://localhost";
+        this.port = 9200;
+    }
+
+    public String sendRequest(String uri, String method, JSONObject body) throws IOException {
+        LOG.debug("try to send request with uri=" + uri + " as method=" + method);
+        String sresponse = "";
+        int responseCode = -1;
+
+        if (body != null) {
+            LOG.trace("body: {}", body);
+            InputStream response = null;
+            String surl = String.format("%s:%d%s", this.host, this.port, uri);
+            URL url = new URL(surl);
+            URLConnection urlConnection = url.openConnection();
+            if (urlConnection instanceof HttpURLConnection) {
+                HttpURLConnection http = (HttpURLConnection) urlConnection;
+                http.setRequestMethod(method);
+                http.setDoOutput(true);
+                http.setRequestProperty("Content-Type", "application/json");
+                // send request
+                // Send the message to destination
+                if (!method.equals("GET")) {
+                    try (OutputStream output = http.getOutputStream()) {
+                        output.write(body.toString().getBytes(CHARSET));
+                    }
+                }
+                responseCode = http.getResponseCode();
+                // Receive answer
+                if (responseCode >= 200 && responseCode < 300) {
+                    response = http.getInputStream();
+                } else {
+                    response = http.getErrorStream();
+                    if (response == null) {
+                        http.getInputStream();
+                    }
+                }
+            }
+            byte[] buffer = new byte[BUFSIZE];
+            int len = 0;
+            if (response != null) {
+                while (true) {
+                    len = response.read(buffer, 0, BUFSIZE);
+                    if (len <= 0) {
+                        break;
+                    }
+                    sresponse += new String(buffer, 0, len, CHARSET);
+                }
+                response.close();
+            } else {
+                LOG.debug("response is null");
+            }
+        }
+        LOG.debug("ResponseCode: " + responseCode);
+        LOG.trace("Response: " + sresponse);
+
+        return sresponse;
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtMapper.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtMapper.java
new file mode 100644
index 0000000..64d3fa0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtMapper.java
@@ -0,0 +1,166 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+import org.elasticsearch.common.bytes.BytesReference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.JsonNode;
+
+/**
+ * @author Herbert
+ *
+ */
+public class HtMapper<T> {
+
+    private static final Logger log = LoggerFactory.getLogger(HtDatabaseClientAbstract.class);
+
+    private final Class<? extends T> clazz;
+
+    private final JsonMapperBase objectMapperRead;
+    private final JsonMapperBase objectMapperWrite;
+
+    private int mappingFailures;
+
+
+    public HtMapper(Class<? extends T> clazz) {
+
+        this.mappingFailures = 0;
+        this.clazz = clazz;
+
+        this.objectMapperRead = new JsonMapperBase();
+        this.objectMapperWrite = this.objectMapperRead;
+    }
+
+    public Class<? extends T> getClazz() {
+        return clazz;
+    }
+
+    public int getMappingFailures() {
+        return mappingFailures;
+    }
+
+    public String objectToJson( T object ) {
+        return objectMapperWrite.objectToJson(object);
+    }
+
+    public String objectListToJson( List<T> objectList ) {
+        return objectMapperWrite.objectListToJson( objectList );
+    }
+
+    public T readValue( JsonNode node ) {
+
+        try {
+            T object = objectMapperRead.readValue(node.traverse(), clazz);
+            return object;
+        } catch (JsonParseException e) {
+            mappingFailures++;
+            log.warn(e.toString());
+        } catch (JsonMappingException e) {
+            mappingFailures++;
+            log.warn(e.toString());
+        } catch (IOException e) {
+            mappingFailures++;
+            log.warn(e.toString());
+        } catch (Exception e) {
+            mappingFailures++;
+            log.warn(e.toString());
+        }
+        log.warn("Can not parse: {} {} ", clazz, node);
+        return null;
+
+    }
+
+    /**
+     * Do the mapping from Json to class
+     * Block further mapping if there is are to many failures
+     * @param json String with Objects JSON representation
+     * @return The Object
+     */
+    public @Nullable T getObjectFromJson(byte[] json) {
+
+    	if (json == null)
+    		return null;
+    	else if (mappingFailures < 10) {
+            try {
+                T object = objectMapperRead.readValue(json, clazz);
+                return object;
+            } catch (JsonParseException e) {
+                mappingFailures++;
+                log.warn(e.toString());
+            } catch (JsonMappingException e) {
+                mappingFailures++;
+                log.warn(e.toString());
+            } catch (IOException e) {
+                mappingFailures++;
+                log.warn(e.toString());
+            } catch (Exception e) {
+                mappingFailures++;
+                log.warn(e.toString());
+            }
+        }
+        log.warn("Problems parsing : {} {}", clazz, json);
+        return null;
+    }
+
+    /**
+     * Do the mapping from Json to class
+     * Block further mapping if there is are to many failures
+     * @param json Byte array with JSON Object representation
+     * @return The Object
+     */
+    public @Nullable T getObjectFromJson(BytesReference json) {
+
+        return json == null ? null : getObjectFromJson(json.toBytes());
+
+    }
+
+    /**
+     * Read json from File.
+     * @param fileName File with JSON text
+     * @return Object Object
+     */
+    public T readJsonObjectFromFile( String fileName ) {
+        byte[] content = null;
+        log.debug("Filename readJsonObjectFromFile: {}",fileName);
+
+        try {
+            content = Files.readAllBytes(Paths.get(fileName));
+        } catch (IOException e1) {
+            log.warn("IO Problem: {}", e1.getMessage());
+        }
+
+        if (content != null) {
+            return getObjectFromJson(content);
+        } else {
+            return null;
+        }
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/IndexClientBuilder.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/IndexClientBuilder.java
new file mode 100644
index 0000000..facc1c6
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/IndexClientBuilder.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+import org.json.JSONObject;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.Resources;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Setup index in the database
+ * @author herbert
+ *
+ */
+public class IndexClientBuilder implements AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(IndexClientBuilder.class);
+
+    /** Index name to be used */
+    private final String index;
+    /** Location of mapping data **/
+    private String mappingSettingFileName = null;
+    /** Location of configuration data **/
+    private String modelDataDirectory = null;
+
+	private final ScheduledExecutorService scheduler;
+    private HtDatabaseClientAbstract client;
+    private HtDatabaseNode databaseNode;
+
+
+    // --- Construct and initialize
+
+    public IndexClientBuilder(String index) {
+    	this.index = index;
+    	this.databaseNode = null;
+    	this.scheduler = Executors.newSingleThreadScheduledExecutor();
+    }
+
+    // Additional setter functions
+
+    public IndexClientBuilder setMappingSettingJsonFileName(String jsonFileName) {
+    	this.mappingSettingFileName = jsonFileName;
+    	return(this);
+    }
+
+    public IndexClientBuilder setModelDataDirectory(String jsonDirectory) {
+    	this.modelDataDirectory = jsonDirectory;
+    	return(this);
+    }
+
+    public HtDatabaseClientAbstract create(HtDatabaseNode database) {
+		LOG.info("Create {} start with node", this.getClass().getSimpleName() );
+     	this.databaseNode = database;
+		client = new HtDatabaseClientAbstract(index, database);
+		setupIndex();
+       	return client;
+    }
+
+
+    public void stop() {
+	   this.scheduler.shutdown();
+    }
+
+    @Override
+    public void close() throws Exception {
+	   stop();
+    }
+
+    private void setupIndex() {
+		if (! client.isExistsIndex()) {
+			LOG.info("Index not existing ... create index");
+
+			// Initialisation 1
+			if (mappingSettingFileName != null) {
+  				JSONObject indexconfigdata=Resources.getJSONFile(mappingSettingFileName);
+    			client.doCreateIndexWithMapping(indexconfigdata);
+			} else
+				client.doCreateIndex();
+
+			// Initialisation 2 - start asynchron initialization and let it run
+   			scheduler.schedule(fillDatabase, 0, TimeUnit.SECONDS);
+		}
+    }
+
+    private final Runnable fillDatabase = new Runnable() {
+    	@Override
+    	public void run() {
+    		if (databaseNode != null) {
+    			databaseNode.setInitializedTarget();
+    		}
+    		try { //Prevent ending task by exception
+				if (modelDataDirectory != null) {
+					LOG.info("... write initial data for index {}",index);
+					List<JSONObject> dataList=Resources.getJSONFiles(modelDataDirectory, false);
+					LOG.debug("received number of objects: {} of index {}", dataList.size(), index);
+					for (JSONObject da: dataList) {
+						client.doWriteJSONObject(da);
+					}
+					LOG.debug("wrote all objects for index {}", index);
+				} else {
+					LOG.info("No initial data for index {}",index);
+				}
+			} catch (Exception e) {
+				LOG.warn("Problem during initialization of index "+index+" {}", e);
+			}
+    		if (databaseNode != null) {
+    			databaseNode.setInitializedReached();
+    		}
+    	}
+    };
+
+    /*---------------------------------------------------------
+     * static files
+     */
+
+    public static IndexClientBuilder getBuilder(String index) {
+    	return new IndexClientBuilder(index);
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/IsEsObject.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/IsEsObject.java
new file mode 100644
index 0000000..7e9db59
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/IsEsObject.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database;
+
+/**
+ * Element is a document in the ES database.
+ */
+public interface IsEsObject {
+
+    /**
+     * Set the ES Id
+     * @param id Set the ID, created by ES for this Object
+     */
+    void setEsId( String id );
+
+    /**
+     * Get Id content as string that is used in ES
+     * @return Related ID, that was specified by set command.
+     */
+    String getEsId();
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/JsonMapperBase.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/JsonMapperBase.java
new file mode 100644
index 0000000..4a89c9b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/JsonMapperBase.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.core.JsonGenerationException;
+import com.fasterxml.jackson.core.JsonGenerator.Feature;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+
+/**
+ * This class is used to define default for JSON Serialization and Deserialization for the project at a single place
+ */
+public class JsonMapperBase extends ObjectMapper {
+
+    private static final long serialVersionUID = 1L;
+    private static final Logger LOG = LoggerFactory.getLogger(JsonMapperBase.class);
+
+    public JsonMapperBase() {
+
+        setVisibility(PropertyAccessor.ALL, Visibility.NONE);
+        setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
+
+        // Deserialization
+        configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true);
+
+        // Serialization
+        configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+        getFactory().configure(Feature.ESCAPE_NON_ASCII, true);
+    }
+
+    public JsonMapperBase(int t) {
+
+    	switch(t) {
+    		case 0:
+    			break;
+	    	case 1:
+	    		setVisibility(PropertyAccessor.ALL, Visibility.NONE);
+	    		setVisibility(PropertyAccessor.FIELD, Visibility.DEFAULT);
+	    		break;
+	    	case 2:
+	    		setVisibility(PropertyAccessor.ALL, Visibility.NONE);
+	    		setVisibility(PropertyAccessor.FIELD, Visibility.PROTECTED_AND_PUBLIC);
+	    		break;
+	    	case 3:
+	    		setVisibility(PropertyAccessor.ALL, Visibility.NONE);
+	    		setVisibility(PropertyAccessor.GETTER, Visibility.ANY);
+	    		setVisibility(PropertyAccessor.IS_GETTER, Visibility.ANY);
+	    		break;
+	    	default:
+	    		setVisibility(PropertyAccessor.ALL, Visibility.NONE);
+	            setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
+	    		break;
+
+    	}
+
+        // Deserialization
+        configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true);
+
+        // Serialization
+        configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+        getFactory().configure(Feature.ESCAPE_NON_ASCII, true);
+    }
+
+
+
+    public String objectToJson( Object object ) {
+        String res = null;
+
+        try {
+
+        	res = writeValueAsString(object);
+
+        } catch (JsonGenerationException e) {
+            LOG.debug(e.toString());
+        } catch (JsonMappingException e) {
+            LOG.debug(e.toString());
+        } catch (IOException e) {
+            LOG.debug(e.toString());
+        } catch (Exception e) {
+            LOG.debug(e.toString());
+        }
+
+        return res;
+    }
+
+    public String objectListToJson( List<? extends Object> objectList ) {
+        String res = null;
+
+        try {
+
+            StringWriter stringEmp = new StringWriter();
+            writeValue(stringEmp, objectList);
+            res = stringEmp.toString();
+            stringEmp.close();
+
+        } catch (JsonGenerationException e) {
+            LOG.debug(e.toString());
+        } catch (JsonMappingException e) {
+            LOG.debug(e.toString());
+        } catch (IOException e) {
+            LOG.debug(e.toString());
+        } catch (Exception e) {
+            LOG.debug(e.toString());
+        }
+
+        return res;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/http/BaseHTTPClient.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/http/BaseHTTPClient.java
new file mode 100644
index 0000000..b0404ee
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/http/BaseHTTPClient.java
@@ -0,0 +1,325 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.http;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.security.KeyFactory;
+import java.security.KeyManagementException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.security.interfaces.RSAPrivateKey;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.util.Base64;
+import java.util.Map;
+import javax.annotation.Nonnull;
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.KeyManager;
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.xml.bind.DatatypeConverter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class BaseHTTPClient {
+
+    private static Logger LOG = LoggerFactory.getLogger(BaseHTTPClient.class);
+    private static final int SSLCERT_NONE = -1;
+    private static final int SSLCERT_PCKS = 0;
+    private static final int SSLCERT_PEM = 1;
+    private static final int BUFSIZE = 1024;
+    private static final Charset CHARSET = StandardCharsets.UTF_8;
+    private static final String SSLCONTEXT = "TLSv1.2";
+    private static final int DEFAULT_HTTP_TIMEOUT_MS = 30000; // in ms
+
+    private final boolean trustAll;
+    private final String baseUrl;
+
+    private int timeout = DEFAULT_HTTP_TIMEOUT_MS;
+    private SSLContext sc = null;
+
+    public BaseHTTPClient(String base) {
+        this(base, false);
+    }
+
+    public BaseHTTPClient(String base, boolean trustAllCerts) {
+        this(base, trustAllCerts, null, null, SSLCERT_NONE);
+    }
+
+    public BaseHTTPClient(String base, boolean trustAllCerts, String certFilename, String passphrase, int sslCertType) {
+        this.baseUrl = base;
+        this.trustAll = trustAllCerts;
+        try {
+            sc = setupSsl(trustAll, certFilename, passphrase, sslCertType);
+        } catch (KeyManagementException | NoSuchAlgorithmException | UnrecoverableKeyException | CertificateException
+                | KeyStoreException | IOException | InvalidKeySpecException e) {
+            LOG.warn("problem ssl setup: " + e.getMessage());
+        }
+    }
+
+    protected @Nonnull BaseHTTPResponse sendRequest(String uri, String method, String body, Map<String, String> headers)
+            throws IOException {
+        return this.sendRequest(uri, method, body != null ? body.getBytes(CHARSET) : null, headers);
+    }
+
+    protected @Nonnull BaseHTTPResponse sendRequest(String uri, String method, byte[] body, Map<String, String> headers)
+            throws IOException {
+        if (uri == null) {
+            uri = "";
+        }
+        String surl = this.baseUrl;
+        if (!surl.endsWith("/") && uri.length() > 0) {
+            surl += "/";
+        }
+        if (uri.startsWith("/")) {
+            uri = uri.substring(1);
+        }
+        surl += uri;
+        LOG.debug("try to send request with url=" + this.baseUrl + uri + " as method=" + method);
+        LOG.trace("body:" + (body == null ? "null" : new String(body, CHARSET)));
+        URL url = new URL(surl);
+        URLConnection http = url.openConnection();
+        http.setConnectTimeout(this.timeout);
+        if (surl.toString().startsWith("https")) {
+            if (sc != null) {
+                ((HttpsURLConnection) http).setSSLSocketFactory(sc.getSocketFactory());
+                if (trustAll) {
+                    LOG.debug("trusting all certs");
+                    HostnameVerifier allHostsValid = (hostname, session) -> true;
+                    ((HttpsURLConnection) http).setHostnameVerifier(allHostsValid);
+                }
+            } else // Should never happen
+            {
+                LOG.warn("No SSL context available");
+                return new BaseHTTPResponse(-1, "");
+            }
+        }
+        ((HttpURLConnection) http).setRequestMethod(method);
+        http.setDoOutput(true);
+        if (headers != null && headers.size() > 0) {
+            for (String key : headers.keySet()) {
+                http.setRequestProperty(key, headers.get(key));
+                LOG.trace("set http header " + key + ": " + headers.get(key));
+            }
+        }
+        byte[] buffer = new byte[BUFSIZE];
+        int len = 0, lensum = 0;
+        // send request
+        // Send the message to destination
+        if (!method.equals("GET") && body != null && body.length > 0) {
+            try (OutputStream output = http.getOutputStream()) {
+                output.write(body);
+            }
+        }
+        // Receive answer
+        int responseCode = ((HttpURLConnection) http).getResponseCode();
+        String sresponse = "";
+        InputStream response = null;
+        try {
+            if (responseCode >= 200 && responseCode < 300) {
+                response = http.getInputStream();
+            } else {
+                response = ((HttpURLConnection) http).getErrorStream();
+                if (response == null) {
+                    response = http.getInputStream();
+                }
+            }
+            if (response != null) {
+                while (true) {
+                    len = response.read(buffer, 0, BUFSIZE);
+                    if (len <= 0) {
+                        break;
+                    }
+                    lensum += len;
+                    sresponse += new String(buffer, 0, len, CHARSET);
+                }
+            } else {
+                LOG.debug("response is null");
+            }
+        } catch (Exception e) {
+            LOG.debug("No response. ", e);
+        } finally {
+            if (response != null) {
+                response.close();
+            }
+        }
+        LOG.debug("ResponseCode: " + responseCode);
+        LOG.trace("Response (len:{}): {}", String.valueOf(lensum), sresponse);
+        return new BaseHTTPResponse(responseCode, sresponse);
+    }
+
+    public static SSLContext setupSsl(boolean trustall)
+            throws NoSuchAlgorithmException, KeyManagementException, CertificateException, FileNotFoundException,
+            IOException, UnrecoverableKeyException, KeyStoreException, InvalidKeySpecException {
+
+        return setupSsl(trustall, null, null, SSLCERT_NONE);
+    }
+
+    /**
+     * @param keyFilename filename for key file
+     * @param certFilename filename for cert file
+     * @throws NoSuchAlgorithmException
+     * @throws KeyManagementException
+     * @throws IOException
+     * @throws FileNotFoundException
+     * @throws CertificateException
+     * @throws KeyStoreException
+     * @throws UnrecoverableKeyException
+     * @throws InvalidKeySpecException
+     */
+    /**
+     * Setup of SSLContext
+     *
+     * @param trustall true to switch of certificate verification
+     * @param certFilename filename for certificate file
+     * @param passPhrase for certificate
+     * @param certType of certificate
+     * @return SSL Context according to parameters
+     * @throws NoSuchAlgorithmException according name
+     * @throws KeyManagementException according name
+     * @throws CertificateException according name
+     * @throws FileNotFoundException according name
+     * @throws IOException according name
+     * @throws UnrecoverableKeyException according name
+     * @throws KeyStoreException according name
+     * @throws InvalidKeySpecException according name
+     */
+    public static SSLContext setupSsl(boolean trustall, String certFilename, String passPhrase, int certType)
+            throws NoSuchAlgorithmException, KeyManagementException, CertificateException, FileNotFoundException,
+            IOException, UnrecoverableKeyException, KeyStoreException, InvalidKeySpecException {
+
+        SSLContext sc = SSLContext.getInstance(SSLCONTEXT);
+        TrustManager[] trustCerts = null;
+        if (trustall) {
+            trustCerts = new TrustManager[] {new javax.net.ssl.X509TrustManager() {
+                @Override
+                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
+                    return null;
+                }
+
+                @Override
+                public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {}
+
+                @Override
+                public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {}
+            }};
+
+        }
+        KeyManager[] kms = null;
+        if (certFilename != null && passPhrase != null && !certFilename.isEmpty() && !passPhrase.isEmpty()) {
+            if (certType == SSLCERT_PCKS) {
+                LOG.debug("try to load pcks file " + certFilename + " with passphrase=" + passPhrase);
+                KeyStore keyStore = KeyStore.getInstance("PKCS12");
+                FileInputStream fileInputStream = new FileInputStream(certFilename);
+                keyStore.load(fileInputStream, passPhrase.toCharArray());
+                KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
+                kmf.init(keyStore, passPhrase.toCharArray());
+                kms = kmf.getKeyManagers();
+                fileInputStream.close();
+                LOG.debug("successful");
+
+            } else if (certType == SSLCERT_PEM) {
+                LOG.debug("try to load pem files cert=" + certFilename + " key=" + passPhrase);
+                File fCert = new File(certFilename);
+                File fKey = new File(passPhrase);
+                KeyStore keyStore = KeyStore.getInstance("JKS");
+                keyStore.load(null);
+                byte[] certBytes = parseDERFromPEM(Files.readAllBytes(fCert.toPath()), "-----BEGIN CERTIFICATE-----",
+                        "-----END CERTIFICATE-----");
+                byte[] keyBytes = parseDERFromPEM(Files.readAllBytes(fKey.toPath()), "-----BEGIN PRIVATE KEY-----",
+                        "-----END PRIVATE KEY-----");
+
+                X509Certificate cert = generateCertificateFromDER(certBytes);
+                RSAPrivateKey key = generatePrivateKeyFromDER(keyBytes);
+                keyStore.setCertificateEntry("cert-alias", cert);
+                keyStore.setKeyEntry("key-alias", key, "changeit".toCharArray(), new Certificate[] {cert});
+
+                KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
+                kmf.init(keyStore, "changeit".toCharArray());
+                kms = kmf.getKeyManagers();
+                LOG.debug("successful");
+            }
+        }
+        // Init the SSLContext with a TrustManager[] and SecureRandom()
+        sc.init(kms, trustCerts, new java.security.SecureRandom());
+        return sc;
+    }
+
+    protected static byte[] parseDERFromPEM(byte[] pem, String beginDelimiter, String endDelimiter) {
+        String data = new String(pem);
+        String[] tokens = data.split(beginDelimiter);
+        tokens = tokens[1].split(endDelimiter);
+        return DatatypeConverter.parseBase64Binary(tokens[0]);
+    }
+
+    protected static RSAPrivateKey generatePrivateKeyFromDER(byte[] keyBytes)
+            throws InvalidKeySpecException, NoSuchAlgorithmException {
+        PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
+
+        KeyFactory factory = KeyFactory.getInstance("RSA");
+
+        return (RSAPrivateKey) factory.generatePrivate(spec);
+    }
+
+    protected static X509Certificate generateCertificateFromDER(byte[] certBytes) throws CertificateException {
+        CertificateFactory factory = CertificateFactory.getInstance("X.509");
+
+        return (X509Certificate) factory.generateCertificate(new ByteArrayInputStream(certBytes));
+    }
+
+    public static String getAuthorizationHeaderValue(String username, String password) {
+        return "Basic " + new String(Base64.getEncoder().encode((username + ":" + password).getBytes()));
+    }
+
+    public void setTimeout(int timeout) {
+        this.timeout = timeout;
+    }
+
+    public static int getSslCertPcks() {
+        return SSLCERT_PCKS;
+    }
+
+    public static int getSslCertNone() {
+        return SSLCERT_NONE;
+    }
+
+    public static int getSslCertPEM() {
+        return SSLCERT_PEM;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/http/BaseHTTPResponse.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/http/BaseHTTPResponse.java
new file mode 100644
index 0000000..ddadd11
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/http/BaseHTTPResponse.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.http;
+
+public class BaseHTTPResponse {
+
+	public static final int CODE404 = 404;
+	public static final int CODE200 = 200;
+	public static final BaseHTTPResponse UNKNOWN = new BaseHTTPResponse(-1, "");
+	public final int code;
+	public final String body;
+
+	public BaseHTTPResponse(int code,String body)
+	{
+		this.code=code;
+		this.body=body;
+	}
+
+	@Override
+	public String toString() {
+		return "BaseHTTPResponse [code=" + code + ", body=" + body + "]";
+	}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/Environment.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/Environment.java
new file mode 100644
index 0000000..b56fe12
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/Environment.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes;
+
+import java.net.Inet4Address;
+import java.net.UnknownHostException;
+import java.util.Map;
+
+public class Environment {
+
+	public static String getVar(String v)
+	{
+		if(v.equals("$HOSTNAME"))
+		{
+			String s=null;
+			try {
+				s = Inet4Address.getLocalHost().getHostName();
+			} catch (UnknownHostException e) {
+
+			}
+			if(s!=null && s.length()>0)
+				return s;
+		}
+		Map<String, String> env = System.getenv();
+        for (String envName : env.keySet()) {
+           if(envName!=null && envName.equals(v))
+              return env.get(envName);
+        }
+        return null;
+	}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/FileWatchdog.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/FileWatchdog.java
new file mode 100644
index 0000000..90bb843
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/FileWatchdog.java
@@ -0,0 +1,128 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes;
+
+import java.io.File;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Check every now and then that a certain file has not changed. If it has, then call the
+ * {@link #doOnChange} method.
+ *
+ * @author JunHo Yoon
+ * @since 3.1.1
+ */
+public abstract class FileWatchdog extends Thread {
+    private static final Logger LOGGER = LoggerFactory.getLogger(FileWatchdog.class);
+    /**
+     * The default delay between every file modification check, set to 60 seconds.
+     */
+    public static final long DEFAULT_DELAY = 60000;
+    /**
+     * The name of the file to observe for changes.
+     */
+    private final String filename;
+
+    /**
+     * The delay to observe between every check. By default set {@link #DEFAULT_DELAY}.
+     */
+    private long delay = DEFAULT_DELAY;
+
+    private final File file;
+    private long lastModified = 0;
+    private boolean warnedAlready = false;
+
+    protected FileWatchdog(String filename) {
+        this.filename = filename;
+        file = new File(filename);
+        setDaemon(true);
+        checkAndConfigure();
+    }
+
+    /**
+     * Set the delay to observe between each check of the file changes.
+     *
+     * @param delay the frequency of file watch.
+     */
+    public void setDelay(long delay) {
+        this.delay = delay;
+    }
+
+    /**
+     * abstract method to be run when the file is changed.
+     */
+    protected abstract void doOnChange();
+
+    protected void checkAndConfigure() {
+        boolean fileExists;
+        try {
+            fileExists = file.exists();
+        } catch (SecurityException e) {
+            LOGGER.warn("Was not allowed to read check file existence, file:[{}].",filename);
+            this.interrupt(); // there is no point in continuing
+            return;
+        }
+
+        if (fileExists) {
+            long l = file.lastModified(); // this can also throw a
+            if (lastModified == 0) {
+                lastModified = l; // is very unlikely.
+            }
+            if (l > lastModified) { // however, if we reached this point this
+                lastModified = l; // is very unlikely.
+                doOnChange();
+                warnedAlready = false;
+            }
+        } else {
+            if (!warnedAlready) {
+                LOGGER.debug("[{}] does not exist.", filename);
+                warnedAlready = true;
+            }
+        }
+    }
+
+    @Override
+    public void run() {
+        while (!isInterrupted()) {
+            checkAndConfigure();
+            try {
+                Thread.sleep(delay);
+            } catch (InterruptedException e) {
+                LOGGER.debug("Interrupted sleep. {}", e.getMessage());
+                Thread.currentThread().interrupt();
+            }
+        }
+        LOGGER.debug("Stoppen file watchdog for file {}", filename);
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/IniConfigurationFile.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/IniConfigurationFile.java
new file mode 100644
index 0000000..8fe64b5
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/IniConfigurationFile.java
@@ -0,0 +1,397 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map.Entry;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class IniConfigurationFile {
+
+    private static final Logger LOG = LoggerFactory.getLogger(IniConfigurationFile.class);
+
+    private static final String SECTIONNAME_ROOT = "";
+    private static final String DELIMITER = "=";
+    private static final String COMMENTCHARS[] = {"#", ";"};
+    private static final String LR = "\n";
+
+    private final File mFile;
+    private final List<Section> sections;
+
+    public IniConfigurationFile(File f) {
+        this.mFile = f;
+        this.sections = new ArrayList<>();
+        this.sections.add(new Section(SECTIONNAME_ROOT));
+    }
+
+    public void load() throws ConfigurationException {
+        String curSectionName = SECTIONNAME_ROOT;
+        LOG.debug("loading file");
+        BufferedReader br = null;
+        try {
+            br = new BufferedReader(new FileReader(this.mFile));
+            for (String line; (line = br.readLine()) != null;) {
+                line = line.trim();
+                if (line.isEmpty()) {
+                    continue;
+                }
+                if (line.startsWith("[") && line.endsWith("]")) {
+                    curSectionName = line.substring(1, line.length() - 1);
+                    this.addSection(curSectionName);
+                } else {
+                    this.getSection(curSectionName).addLine(line);
+                }
+            }
+
+        } catch (Exception e) {
+            throw new ConfigurationException(e.getMessage());
+        } finally {
+            try {
+                if (br != null) {
+                    br.close();
+                }
+            } catch (IOException e) {
+            }
+        }
+        LOG.debug("finished loading file");
+        LOG.debug("start parsing sections");
+        for (Section section : this.sections) {
+            section.parseLines();
+        }
+        LOG.debug("finished parsing " + this.sections.size() + " sections");
+    }
+
+    private Section getSection(String name) {
+        for (Section s : this.sections) {
+            if (s.Name.equals(name)) {
+                return s;
+            }
+        }
+        return this.addSection(name);
+
+    }
+
+    private Section addSection(String name) {
+
+        Section s = new Section(name);
+        this.sections.add(s);
+        return s;
+    }
+
+    public void reLoad() throws ConfigurationException {
+        this.sections.clear();
+        this.sections.add(new Section(SECTIONNAME_ROOT));
+        this.load();
+    }
+
+    public String getProperty(String key, String defValue) {
+        Section s;
+        if (key.contains(".")) {
+            s = this.getSection(key.substring(0, key.indexOf(".")));
+            key = key.substring(key.indexOf(".") + 1);
+        } else {
+            s = this.getSection(SECTIONNAME_ROOT);
+        }
+
+        String v = s.getProperty(key);
+        if (v == null || v.isEmpty()) {
+            return defValue;
+        }
+        return v;
+    }
+
+    public void setProperty(String key, String value) {
+        Section s;
+        if (key.contains(".")) {
+            s = this.getSection(key.substring(0, key.indexOf(".")));
+            key = key.substring(key.indexOf(".") + 1);
+        } else {
+            s = this.getSection(SECTIONNAME_ROOT);
+        }
+        s.setProperty(key, value);
+    }
+
+    public int getProperty(String key, int defValue) throws ConversionException {
+        Section s;
+        if (key.contains(".")) {
+            s = this.getSection(key.substring(0, key.indexOf(".")));
+            key = key.substring(key.indexOf(".") + 1);
+        } else {
+            s = this.getSection(SECTIONNAME_ROOT);
+        }
+
+        return s.getInt(key, defValue);
+    }
+
+    public void setProperty(String key, int value) {
+        Section s;
+        if (key.contains(".")) {
+            s = this.getSection(key.substring(0, key.indexOf(".")));
+            key = key.substring(key.indexOf(".") + 1);
+        } else {
+            s = this.getSection(SECTIONNAME_ROOT);
+        }
+        s.setProperty(key, String.format("%d", value));
+    }
+
+    public boolean getProperty(String key, boolean defValue) throws ConversionException {
+        Section s;
+        if (key.contains(".")) {
+            s = this.getSection(key.substring(0, key.indexOf(".")));
+            key = key.substring(key.indexOf(".") + 1);
+        } else {
+            s = this.getSection(SECTIONNAME_ROOT);
+        }
+
+        return s.getBoolean(key, defValue);
+    }
+
+    public void setProperty(String key, boolean value) {
+        Section s;
+        if (key.contains(".")) {
+            s = this.getSection(key.substring(0, key.indexOf(".")));
+            key = key.substring(key.indexOf(".") + 1);
+        } else {
+            s = this.getSection(SECTIONNAME_ROOT);
+        }
+        s.setProperty(key, value ? "true" : "false");
+    }
+
+    public void setProperty(String key, Object value) {
+        this.setProperty(key, value == null ? "null" : value.toString());
+    }
+
+    public void save() {
+        try (BufferedWriter bw = new BufferedWriter(new FileWriter(this.mFile, false))) {
+            for (Section section : this.sections) {
+                if (section.hasValues()) {
+                    bw.write(String.join(LR, section.toLines()) + LR + LR);
+                }
+            }
+            bw.close();
+        } catch (Exception e) {
+            LOG.warn("problem saving value: " + e.getMessage());
+        }
+    }
+
+    public Section subset(String section) {
+        return this.getSection(section);
+    }
+
+    public static class ConfigurationException extends Exception {
+
+        private static final long serialVersionUID = 733061908616404383L;
+
+        public ConfigurationException(String m) {
+            super(m);
+        }
+    }
+
+    public static class ConversionException extends Exception {
+        private static final long serialVersionUID = 5179891576029923079L;
+
+        public ConversionException(String m) {
+            super(m);
+        }
+    }
+
+    private static class SectionValue {
+        private String Value;
+        private final List<String> Comments;
+        private boolean IsUncommented;
+
+        public SectionValue(String value) {
+            this(value, new ArrayList<String>(), false);
+        }
+
+        public SectionValue(String value, List<String> commentsForValue, boolean isuncommented) {
+            this.Comments = commentsForValue;
+            this.Value = value;
+            this.IsUncommented = isuncommented;
+        }
+    }
+
+    public static class Section {
+        private final String Name;
+        private final List<String> rawLines;
+        private final LinkedHashMap<String, SectionValue> values;
+
+        public Section(String name) {
+            LOG.debug("new section created:" + name);
+            this.Name = name;
+            this.rawLines = new ArrayList<>();
+            this.values = new LinkedHashMap<>();
+        }
+
+        public void addLine(String line) {
+            LOG.trace("adding raw line:" + line);
+            this.rawLines.add(line);
+        }
+
+        public String getProperty(String key) {
+            return this.getProperty(key, null);
+        }
+
+        public String getProperty(String key, String defValue) {
+            if (values.containsKey(key)) {
+                return values.get(key).Value;
+            }
+            return defValue;
+        }
+
+        public void setProperty(String key, String value) {
+            boolean isuncommented = this.isCommentLine(key);
+            if (isuncommented) {
+                key = key.substring(1);
+            }
+            if (this.values.containsKey(key)) {
+                this.values.get(key).Value = value;
+                this.values.get(key).IsUncommented = isuncommented;
+            } else {
+                SectionValue sv = new SectionValue(value);
+                sv.IsUncommented = isuncommented;
+                this.values.put(key, sv);
+            }
+        }
+
+        public void parseLines() {
+            this.values.clear();
+            List<String> commentsForValue = new ArrayList<>();
+            boolean uncommented = false;
+            for (String line : rawLines) {
+
+                if (this.isCommentLine(line)) {
+                    if (!line.contains(DELIMITER)) {
+                        commentsForValue.add(line);
+                        continue;
+                    } else {
+                        uncommented = true;
+                        line = line.substring(1);
+                    }
+                }
+                if (!line.contains(DELIMITER)) {
+                    continue;
+                }
+                String hlp[] = line.split(DELIMITER);
+                if (hlp.length > 1) {
+                    String key = hlp[0];
+                    String value =
+                            line.length() > (key + DELIMITER).length() ? line.substring((key + DELIMITER).length())
+                                    : "";
+                    if (this.values.containsKey(key)) {
+                        this.values.get(key).Value = value;
+                    } else {
+                        this.values.put(key, new SectionValue(value, commentsForValue, uncommented));
+                        commentsForValue = new ArrayList<>();
+                    }
+                } else {
+                    LOG.warn("ignoring unknown formatted line:" + line);
+                }
+                uncommented = false;
+            }
+        }
+
+        private boolean isCommentLine(String line) {
+            for (String c : COMMENTCHARS) {
+                if (line.startsWith(c)) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        public String[] toLines() {
+            List<String> lines = new ArrayList<>();
+            if (!this.Name.isEmpty()) {
+                lines.add("[" + this.Name + "]");
+            }
+            for (Entry<String, SectionValue> entry : this.values.entrySet()) {
+                if (entry.getValue().Comments.size() > 0) {
+                    for (String comment : entry.getValue().Comments) {
+                        lines.add(comment);
+                    }
+                }
+                lines.add((entry.getValue().IsUncommented ? COMMENTCHARS[0] : "") + entry.getKey() + DELIMITER
+                        + entry.getValue().Value);
+            }
+            String[] alines = new String[lines.size()];
+            return lines.toArray(alines);
+        }
+
+        public String getString(String key, String def) {
+            return this.getProperty(key, def);
+        }
+
+        public boolean getBoolean(String key, boolean def) throws ConversionException {
+            String v = this.getProperty(key);
+            if (v == null || v.isEmpty()) {
+                return def;
+            }
+            if (v.equals("true")) {
+                return true;
+            }
+            if (v.equals("false")) {
+                return false;
+            }
+            throw new ConversionException("invalid value for key " + key);
+        }
+
+        public int getInt(String key, int def) throws ConversionException {
+            String v = this.getProperty(key);
+            if (v == null || v.isEmpty()) {
+                return def;
+            }
+            try {
+                return Integer.parseInt(v);
+            } catch (NumberFormatException e) {
+                throw new ConversionException(e.getMessage());
+            }
+        }
+
+        public long getLong(String key, long def) throws ConversionException {
+            String v = this.getProperty(key);
+            if (v == null || v.isEmpty()) {
+                return def;
+            }
+            try {
+                return Long.parseLong(v);
+            } catch (NumberFormatException e) {
+                throw new ConversionException(e.getMessage());
+            }
+        }
+
+        public boolean hasValues() {
+            return this.values.size() > 0;
+        }
+
+        public boolean hasKey(String key) {
+            return this.values.containsKey(key);
+        }
+
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/InternalDateAndTime.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/InternalDateAndTime.java
new file mode 100644
index 0000000..cc5b831
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/InternalDateAndTime.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.NetconfTimeStamp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.DateAndTime;
+
+/**
+ * Converts time stamps into internal format according to ONF1.2 and ISO 8601.
+ * @author herbert
+ *
+ */
+public class InternalDateAndTime {
+
+    private static final NetconfTimeStamp NETCONFTIME_CONVERTER = NetconfTimeStamp.getConverter();
+
+    private static final InternalDateAndTime TESTPATTERN = new InternalDateAndTime("2017-01-01T00:00:00.0Z");
+
+    String internalDateAndTime;
+
+    /**
+     * Static builder ONF1.2
+     * @param time in ONF1.2 yang format
+     * @return  InternalDateAndTime
+     */
+    public static InternalDateAndTime valueOf(DateAndTime time) {
+        return new InternalDateAndTime(time);
+    }
+
+    /**
+     * Static builder ONF1.0
+     * @param time in ONF1.0 yang format
+     * @return  InternalDateAndTime
+     */
+
+    public static InternalDateAndTime valueOf(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime time) {
+        return new InternalDateAndTime(time);
+    }
+
+    /**
+     * @return     Getter with String representation
+     */
+    public String getValue() {
+        return internalDateAndTime;
+    }
+
+    /*----------------------------------------------------------------
+     * Private constructors and functions
+     */
+
+    /**
+     * Convert ONF 1.2 DateAndTime to String
+     * @param time as input
+     */
+    private InternalDateAndTime(DateAndTime time) {
+        internalDateAndTime = NETCONFTIME_CONVERTER.getTimeStampFromNetconf(time.getValue());
+    }
+
+    /**
+     * Convert ONF 1.2 DateAndTime to String
+     * @param time as input
+     */
+    private InternalDateAndTime(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime time) {
+        internalDateAndTime = NETCONFTIME_CONVERTER.getTimeStampFromNetconf(time.getValue());
+    }
+
+    /**
+     * Setup static TEST
+     * @param internalDateAndTime
+     */
+    private InternalDateAndTime(String internalDateAndTime) {
+        this.internalDateAndTime = internalDateAndTime;
+    }
+
+    /**
+     * Get a testpattern
+     * @return testpattern
+     */
+    public static InternalDateAndTime getTestpattern() {
+        return TESTPATTERN;
+    }
+
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/InternalSeverity.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/InternalSeverity.java
new file mode 100644
index 0000000..20c3193
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/InternalSeverity.java
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ * @author herbert
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes;
+
+public enum InternalSeverity {
+
+        NonAlarmed,
+        Warning,
+        Minor,
+        Major,
+        Critical;
+
+    public boolean isNoAlarmIndication() {
+        return this == NonAlarmed;
+    }
+
+    public String getValueAsString() {
+        return this.name();
+    }
+
+    @Override
+    public String toString() {
+        return this.name();
+    }
+
+    public String toNetconfString()
+    {
+        switch(this)
+        {
+        case NonAlarmed:
+            return "non-alarmed";
+        case Warning:
+            return "warning";
+        case Minor:
+            return "minor";
+        case Major:
+            return "major";
+        case Critical:
+            return "critical";
+        }
+        return "not-specified";
+    }
+
+    /**
+     * convert ONF 1.2 Severity
+     * @param severity as input
+     * @return String with related output
+     */
+    public static InternalSeverity valueOf(org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.SeverityType severity ) {
+        switch( severity ) {
+            case NonAlarmed:
+                return InternalSeverity.NonAlarmed;
+            case Warning:
+                return InternalSeverity.Warning;
+            case Minor:
+                return InternalSeverity.Minor;
+            case Major:
+                return InternalSeverity.Major;
+            case Critical:
+                return InternalSeverity.Critical;
+        }
+        return null;
+    }
+
+    /**
+     * convert ONF 1.2.1.1 Severity
+     * @param severity as input
+     * @return String with related output
+     */
+    public static InternalSeverity valueOf(org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.SeverityType severity ) {
+        switch( severity ) {
+            case NonAlarmed:
+                return InternalSeverity.NonAlarmed;
+            case Warning:
+                return InternalSeverity.Warning;
+            case Minor:
+                return InternalSeverity.Minor;
+            case Major:
+                return InternalSeverity.Major;
+            case Critical:
+                return InternalSeverity.Critical;
+        }
+        return null;
+    }
+
+    /**
+     * convert ONF 1.2.1.1p Severity
+     * @param severity as input
+     * @return String with related output
+     */
+    public static InternalSeverity valueOf(org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.SeverityType severity ) {
+        switch( severity ) {
+            case NonAlarmed:
+                return InternalSeverity.NonAlarmed;
+            case Warning:
+                return InternalSeverity.Warning;
+            case Minor:
+                return InternalSeverity.Minor;
+            case Major:
+                return InternalSeverity.Major;
+            case Critical:
+                return InternalSeverity.Critical;
+        }
+        return null;
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/InventoryInformation.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/InventoryInformation.java
new file mode 100644
index 0000000..e4ce4af
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/InventoryInformation.java
@@ -0,0 +1,130 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class InventoryInformation {
+
+    private static final String UNKNOWN = "unknown";
+    private static final List<String> EMPTY = new ArrayList<>();
+    private static final InventoryInformation DEFAULT = new InventoryInformation();
+
+    private String type;
+    private String model;
+    private String vendor;
+    private String deviceIpv4;
+    private String deviceIpv6;
+    private List<String> interfaceUuidList;
+
+    public InventoryInformation()
+    {
+        this.type=UNKNOWN;
+        this.model=UNKNOWN;
+        this.vendor=UNKNOWN;
+        this.deviceIpv4=UNKNOWN;
+        this.deviceIpv6=UNKNOWN;
+        this.interfaceUuidList=EMPTY;
+    }
+
+    public InventoryInformation(InventoryInformation inventoryInformation) {
+        this.type=inventoryInformation.type;
+        this.model=inventoryInformation.model;
+        this.vendor=inventoryInformation.vendor;
+        this.deviceIpv4=inventoryInformation.deviceIpv4;
+        this.deviceIpv6=inventoryInformation.deviceIpv6;
+        this.interfaceUuidList=new ArrayList<>(inventoryInformation.interfaceUuidList);
+    }
+
+    public InventoryInformation(
+                String type, String model, String vendor, String deviceIpv4,
+                String deviceIpv6, List<String> interfaceUuidList) {
+        setType(type);
+        setModel(model);
+        setVendor(vendor);
+        setDeviceIpv4(deviceIpv4);
+        setDeviceIpv6(deviceIpv6);
+        setInterfaceUuidList(interfaceUuidList);
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public String getModel() {
+        return model;
+    }
+
+    public String getVendor() {
+        return vendor;
+    }
+
+    public String getDeviceIpv4() {
+        return deviceIpv4;
+    }
+
+    public String getDeviceIpv6() {
+        return deviceIpv6;
+    }
+
+    public List<String> getInterfaceUuidList() {
+        return interfaceUuidList;
+    }
+
+    public InventoryInformation setType(String type) {
+        this.type = type != null ? type : UNKNOWN;
+        return this;
+    }
+
+    public InventoryInformation setModel(String model) {
+        this.model = model != null ? model : UNKNOWN;
+        return this;
+    }
+
+    public InventoryInformation setVendor(String vendor) {
+        this.vendor = vendor != null ? vendor : UNKNOWN;
+        return this;
+    }
+
+    public InventoryInformation setDeviceIpv4(String deviceIpv4) {
+        this.deviceIpv4 = deviceIpv4 != null ? deviceIpv4 : UNKNOWN;
+        return this;
+    }
+
+    public InventoryInformation setDeviceIpv6(String deviceIpv6) {
+        this.deviceIpv6 = deviceIpv6 != null ? deviceIpv6 : UNKNOWN ;
+        return this;
+    }
+
+    public InventoryInformation setInterfaceUuidList(List<String> interfaceUuidList) {
+        this.interfaceUuidList = interfaceUuidList != null ? interfaceUuidList : EMPTY;
+        return this;
+    }
+
+    public static InventoryInformation getDefault() {
+        return DEFAULT;
+    }
+
+    @Override
+    public String toString() {
+        return "InventoryInformation [type=" + type + ", model=" + model + ", vendor=" + vendor + ", deviceIpv4="
+                + deviceIpv4 + ", deviceIpv6=" + deviceIpv6 + ", interfaceUuidList=" + interfaceUuidList + "]";
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/Resources.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/Resources.java
new file mode 100644
index 0000000..b4fec08
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/Resources.java
@@ -0,0 +1,336 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.FrameworkUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Resources {
+
+    private static final Logger LOG = LoggerFactory.getLogger(Resources.class);
+
+    private static final String RESSOURCEROOT = "src/main/resources";
+
+    private static URL getFileURL(String resFile) {
+        Bundle b = FrameworkUtil.getBundle(Resources.class);
+        URL u = null;
+        LOG.debug("try to get file {}", resFile);
+        if (b == null) {
+            LOG.info("Load resource as file: {}", resFile);
+            u = getUrlForRessource(resFile);
+        } else {
+            LOG.info("Load resource from bundle: {}", resFile);
+            u = b.getEntry(resFile);
+        }
+        return u;
+    }
+
+    private static File getFile(String resFile) {
+        Bundle b = FrameworkUtil.getBundle(Resources.class);
+        File f = null;
+        LOG.debug("try to get file {}", resFile);
+        if (b == null) {
+            LOG.warn("cannot load bundle resources");
+            f = new File(RESSOURCEROOT + resFile);
+        } else {
+            try {
+
+                f = new File(b.getEntry(resFile).toURI());
+            } catch (URISyntaxException e) {
+
+            }
+        }
+        return f;
+    }
+
+    private static String readFile(final URL u) throws IOException {
+        return readFile(u.openStream());
+    }
+
+    private static String readFile(final InputStream s) throws IOException {
+        // read file
+        BufferedReader in = new BufferedReader(new InputStreamReader(s));
+        StringBuilder sb = new StringBuilder();
+        String inputLine;
+        while ((inputLine = in.readLine()) != null) {
+            sb.append(inputLine);
+        }
+        in.close();
+        s.close();
+        return sb.toString();
+    }
+
+    public static List<URL> getFileURLs(String folder, final String filter, final boolean recursive)
+            throws IOException {
+        Bundle b = FrameworkUtil.getBundle(Resources.class);
+        List<URL> list = new ArrayList<>();
+        if (b == null) {
+            FileFilter ff = pathname -> {
+                if (pathname.isFile()) {
+                    return pathname.getName().contains(filter);
+                } else {
+                    return true;
+                }
+            };
+            File ffolder = getFile(folder);
+            if (ffolder != null && ffolder.isDirectory()) {
+                File[] files = ffolder.listFiles(ff);
+                if (files != null && files.length > 0) {
+                    for (File f : files) {
+                        if (f.isFile()) {
+                            list.add(f.toURI().toURL());
+                        } else if (f.isDirectory() && recursive) {
+                            getFileURLsRecursive(f, ff, list);
+                        }
+                    }
+                }
+            }
+        } else {
+            getResourceURLsTreeRecurse(b, filter, b.getEntryPaths(folder), recursive, list);
+        }
+        return list;
+    }
+
+    private static void getFileURLsRecursive(File root, FileFilter ff, List<URL> list) throws MalformedURLException {
+        if (root != null && root.isDirectory()) {
+            File[] files = root.listFiles(ff);
+            if (files != null && files.length > 0) {
+                for (File f : files) {
+                    if (f.isFile()) {
+                        list.add(f.toURI().toURL());
+                    } else if (f.isDirectory()) {
+                        getFileURLsRecursive(f, ff, list);
+                    }
+                }
+            }
+        }
+
+    }
+
+    private static void getResourceURLsTreeRecurse(Bundle b, String filter, Enumeration<String> resource,
+            boolean recursive, List<URL> outp) throws IOException {
+        while (resource.hasMoreElements()) {
+            String name = resource.nextElement();
+            Enumeration<String> list = b.getEntryPaths(name);
+            if (list != null) {
+                if (recursive) {
+                    getResourceURLsTreeRecurse(b, filter, list, recursive, outp);
+                }
+            } else {
+                // Read
+                if (name.contains(filter)) {
+                    LOG.debug("add {} to list", name);
+                    outp.add(b.getEntry(name));
+                } else {
+                    LOG.debug("filtered out {}", name);
+                }
+            }
+        }
+    }
+
+    public static List<JSONObject> getJSONFiles(String folder, boolean recursive) {
+        List<JSONObject> list = new ArrayList<>();
+        List<URL> urls;
+        try {
+            urls = getFileURLs(folder, ".json", recursive);
+            LOG.debug("found {} files", urls.size());
+        } catch (IOException e1) {
+            urls = new ArrayList<>();
+            LOG.warn("failed to get urls from resfolder {} : {}", folder, e1.getMessage());
+        }
+        for (URL u : urls) {
+            LOG.debug("try to parse " + u.toString());
+            try {
+                JSONObject o = new JSONObject(readFile(u));
+                list.add(o);
+            } catch (JSONException | IOException e) {
+                LOG.warn("problem reading/parsing file {} : {}", u, e.getMessage());
+            }
+        }
+        return list;
+    }
+
+    public static JSONObject getJSONFile(String resFile) {
+        LOG.debug("loading json file {} from res", resFile);
+        URL u = getFileURL(resFile);
+        if (u == null) {
+            LOG.warn("cannot find resfile: {}", resFile);
+            return null;
+        }
+        JSONObject o = null;
+        try {
+            // parse to jsonobject
+            o = new JSONObject(readFile(u));
+        } catch (Exception e) {
+            LOG.warn("problem reading/parsing file: {}", e.getMessage());
+        }
+        return o;
+    }
+
+    /**
+     * Used for reading plugins from resource files
+     *      /elasticsearch/plugins/head
+     *      /etc/elasticsearch-plugins
+     *      /elasticsearch/plugins
+     * @param resFolder resource folder pointing to the related files
+     * @param dstFolder destination
+     * @param rootDirToRemove part from full path to remove
+     * @return true if files could be extracted
+     */
+    public static boolean copyFolderInto(String resFolder, String dstFolder, String rootDirToRemove) {
+
+        Enumeration<URL> urls = null;
+        Bundle b = FrameworkUtil.getBundle(Resources.class);
+        if (b == null) {
+            LOG.info("Running in file text.");
+            urls = getResourceFolderFiles(resFolder);
+        } else {
+            urls = b.findEntries(resFolder, "*", true);
+        }
+
+        boolean success = true;
+        URL srcUrl;
+        String srcFilename;
+        String dstFilename;
+        while (urls.hasMoreElements()) {
+            srcUrl = urls.nextElement();
+            srcFilename = srcUrl.getFile();
+
+            if (srcFilename.endsWith("/")) {
+               LOG.warn("Skip directory: {}", srcFilename);
+               continue;
+            }
+
+            LOG.debug("try to copy res {} to {}", srcFilename, dstFolder);
+            if (rootDirToRemove != null) {
+                srcFilename = srcFilename
+                        .substring(srcFilename.indexOf(rootDirToRemove) + rootDirToRemove.length() + 1);
+                LOG.debug("dstfilename trimmed to {}", srcFilename);
+            }
+            dstFilename = dstFolder + "/" + srcFilename;
+            try {
+                if (!extractFileTo(srcUrl, new File(dstFilename))) {
+                    success = false;
+                }
+            } catch (Exception e) {
+                LOG.warn("problem copying res {} to {}: {}", srcFilename, dstFilename, e.getMessage());
+            }
+        }
+
+        return success;
+
+    }
+    private static Enumeration<URL> getResourceFolderFiles (String folder) {
+        LOG.info("Get ressource: {}", folder);
+        URL url = getUrlForRessource(folder);
+        String path = url.getPath();
+        File[] files = new File(path).listFiles();
+        Collection<URL> urlCollection = new ArrayList<>();
+
+        if (files != null) {
+            for (File f : files) {
+                try {
+                    if (f.isDirectory()) {
+                        urlCollection.addAll(Collections.list(getResourceFolderFiles(folder+"/"+f.getName())));
+                    } else {
+                        urlCollection.add(f.toURI().toURL());
+                    }
+                } catch (MalformedURLException e) {
+                    LOG.error("Can not read ressources", e);
+                    break;
+                }
+            }
+        }
+
+        Enumeration<URL> urls = Collections.enumeration(urlCollection);
+        return urls;
+      }
+
+    private static URL getUrlForRessource (String fileOrDirectory) {
+        ClassLoader loader = Thread.currentThread().getContextClassLoader();
+        URL url = loader.getResource(fileOrDirectory);
+        return url;
+      }
+
+    public static boolean extractFileTo(String resFile, File oFile) {
+        if (oFile == null) {
+            return false;
+        }
+        LOG.debug("try to copy {} from res to {}", resFile, oFile.getAbsolutePath());
+        URL u = getFileURL(resFile);
+        if (u == null) {
+            LOG.warn("cannot find resfile: {}", resFile);
+            return false;
+        }
+        return extractFileTo(u, oFile);
+    }
+
+    public static boolean extractFileTo(URL u, File oFile) {
+
+        if (oFile.isDirectory()) {
+            oFile.mkdirs();
+            return true;
+        } else {
+            oFile.getParentFile().mkdirs();
+        }
+
+        if (!oFile.exists()) {
+            try {
+                oFile.createNewFile();
+            } catch (IOException e) {
+                LOG.warn("problem creating file {}: {}", oFile.getAbsoluteFile(), e.getMessage());
+            }
+        }
+        try (InputStream in = u.openStream(); OutputStream outStream = new FileOutputStream(oFile);) {
+
+            int theInt;
+            while ((theInt = in.read()) >= 0) {
+                outStream.write(theInt);
+            }
+            in.close();
+            outStream.flush();
+            outStream.close();
+            LOG.debug("file written successfully");
+        } catch (IOException e) {
+            LOG.error("problem writing file: {}", e.getMessage());
+            return false;
+        }
+        return true;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/TemplateFile.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/TemplateFile.java
new file mode 100644
index 0000000..3703e18
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/TemplateFile.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+public class TemplateFile {
+
+    protected final HashMap<String, Object> mKeyValuePairs;
+    private final String mContent;
+
+    public TemplateFile(String content) {
+        this.mKeyValuePairs = new HashMap<>();
+        this.mContent = content;
+
+    }
+
+    public TemplateFile(File f) throws IOException {
+        this(initialize(f));
+    }
+
+    public void addValue(String key, Object value) {
+        this.mKeyValuePairs.put(key, value);
+    }
+
+    public void removeValue(String key) {
+        this.mKeyValuePairs.remove(key);
+    }
+
+    private String replace() {
+        String s = this.mContent;
+        String key;
+        Object value;
+        for (Map.Entry<String, Object> entry : this.mKeyValuePairs.entrySet()) {
+            key = entry.getKey();
+            value = entry.getValue();
+            if (value != null) {
+                s = s.replace(key, value.toString());
+            }
+        }
+        return s;
+    }
+
+    @Override
+    public String toString() {
+        return this.replace();
+    }
+
+    private static String initialize(File f) throws FileNotFoundException, IOException {
+        StringBuilder sb = new StringBuilder();
+        try (BufferedReader br = new BufferedReader(new FileReader(f));) {
+            String line = br.readLine();
+
+            while (line != null) {
+                sb.append(line);
+                line = br.readLine();
+            }
+            br.close();
+        }
+        return sb.toString();
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/TimeSpan.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/TimeSpan.java
new file mode 100644
index 0000000..551955d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/TimeSpan.java
@@ -0,0 +1,650 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/*
+ *  SoSy-Lab Common is a library of useful utilities.
+ *  This file is part of SoSy-Lab Common.
+ *
+ *  Copyright (C) 2007-2015  Dirk Beyer
+ *  All rights reserved.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static java.util.concurrent.TimeUnit.DAYS;
+import static java.util.concurrent.TimeUnit.HOURS;
+import static java.util.concurrent.TimeUnit.MICROSECONDS;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static java.util.concurrent.TimeUnit.MINUTES;
+import static java.util.concurrent.TimeUnit.NANOSECONDS;
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Ascii;
+import com.google.common.collect.EnumHashBiMap;
+import com.google.common.collect.ImmutableSortedSet;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Ordering;
+import com.google.common.math.LongMath;
+import com.google.common.primitives.Longs;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.EnumSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.annotation.CheckReturnValue;
+import javax.annotation.Nullable;
+
+/**
+ * This is an immutable representation of some time span, using a {@link TimeUnit} and a value.
+ *
+ * <p>The value may be positive or negative. All operations check for overflows and underflows, the
+ * behavior on overflow and underflow differs and is documented for each method.
+ *
+ * <p>Two instances are considered equal if they represent the exact same time span regardless of
+ * their unit, for example, 60s and 1min are considered equal.
+ */
+
+public final class TimeSpan implements Comparable<TimeSpan>, Serializable {
+
+  private static final long serialVersionUID = -4013592312989551009L;
+
+  private static final ImmutableSortedSet<TimeUnit> ALL_UNITS =
+      ImmutableSortedSet.copyOf(EnumSet.allOf(TimeUnit.class));
+
+  static {
+    assert ALL_UNITS.higher(SECONDS).equals(MINUTES); // assert expected order of set
+  }
+
+  private static final EnumHashBiMap<TimeUnit, String> TIME_UNITS =
+      EnumHashBiMap.create(TimeUnit.class);
+
+  static {
+    TIME_UNITS.put(NANOSECONDS, "ns");
+    TIME_UNITS.put(MICROSECONDS, "µs");
+    TIME_UNITS.put(MILLISECONDS, "ms");
+    TIME_UNITS.put(SECONDS, "s");
+    TIME_UNITS.put(MINUTES, "min");
+    TIME_UNITS.put(HOURS, "h");
+    TIME_UNITS.put(DAYS, "d");
+  }
+
+  private static final Pattern ONLY_DIGITS = Pattern.compile(" *([0-9]+) *");
+
+  private enum CharType {
+    BEGIN,
+    END,
+    LETTER,
+    DIGIT,
+    WHITESPACE
+  }
+
+  private final long span;
+  private final TimeUnit unit;
+
+  private TimeSpan(long pSpan, TimeUnit pUnit) {
+    span = pSpan;
+    unit = checkNotNull(pUnit);
+  }
+
+  public static TimeSpan of(long pSpan, TimeUnit pUnit) {
+    return new TimeSpan(pSpan, pUnit);
+  }
+
+  public static TimeSpan ofSeconds(long pSeconds) {
+    return new TimeSpan(pSeconds, SECONDS);
+  }
+
+  public static TimeSpan ofMillis(long pMillis) {
+    return new TimeSpan(pMillis, MILLISECONDS);
+  }
+
+  public static TimeSpan ofNanos(long pNanos) {
+    return new TimeSpan(pNanos, NANOSECONDS);
+  }
+
+  public static TimeSpan empty() {
+    return new TimeSpan(0, DAYS);
+  }
+
+  /**
+   * Converts the given {@link String} into a {@link TimeSpan} object. Supported units are day,
+   * hour, minute and second.
+   *
+   * @param input the {@link String} to convert
+   * @return a {@link TimeSpan} represented by the given {@link String}
+   * @throws IllegalArgumentException if the input is not a valid string representation of a {@link
+   *     TimeSpan}.
+   */
+  public static TimeSpan valueOf(String input) {
+
+    // only seconds: use simple regex
+    Matcher secondMatcher = ONLY_DIGITS.matcher(input);
+    if (secondMatcher.matches()) {
+      return ofSeconds(Long.parseLong(secondMatcher.group(1)));
+    }
+
+    // values with units: more elaborate parsing necessary
+    List<String> tokens = splitIntoTokens(input);
+
+    long days = 0;
+    long hours = 0;
+    long minutes = 0;
+    long seconds = 0;
+
+    Iterator<String> it = tokens.iterator();
+
+    while (it.hasNext()) {
+      // first: value
+      String nextString = it.next();
+      long value = Long.parseLong(nextString);
+
+      // second: unit
+      if (!it.hasNext()) {
+        throw new IllegalArgumentException("Value " + nextString + " has no unit.");
+      }
+
+      String unit = it.next();
+      switch (unit) {
+        case "day":
+        case "days":
+        case "d":
+          if (days != 0) {
+            throw new IllegalArgumentException("Days set twice: " + unit);
+          }
+          days = value;
+          break;
+
+        case "h":
+        case "hour":
+        case "hours":
+          if (hours != 0) {
+            throw new IllegalArgumentException("Hours set twice: " + unit);
+          }
+          hours = value;
+          break;
+
+        case "min":
+        case "m":
+          if (minutes != 0) {
+            throw new IllegalArgumentException("Minutes set twice: " + unit);
+          }
+          minutes = value;
+          break;
+
+        case "s":
+          if (seconds != 0) {
+            throw new IllegalArgumentException("Seconds set twice: " + unit);
+          }
+          seconds = value;
+          break;
+
+        default:
+          throw new IllegalArgumentException("Unknown unit: " + unit);
+      }
+    }
+
+    return sum(of(seconds, SECONDS), of(minutes, MINUTES), of(hours, HOURS), of(days, DAYS));
+  }
+
+  private static List<String> splitIntoTokens(String input) {
+    List<String> tokens = Lists.newArrayList();
+    CharType previous = CharType.BEGIN;
+    int pos = 0;
+
+    for (int i = 0; i <= input.length(); ++i) {
+
+      CharType current;
+      if (i == input.length()) {
+        current = CharType.END;
+      } else {
+        char currentChar = input.charAt(i);
+        if (Character.isLetter(currentChar)) {
+          current = CharType.LETTER;
+        } else if (Character.isDigit(currentChar)) {
+          current = CharType.DIGIT;
+        } else if (Character.isWhitespace(currentChar)) {
+          current = CharType.WHITESPACE;
+        } else {
+          throw new IllegalArgumentException(
+              "Unreconized character '" + currentChar + "' when parsing " + input);
+        }
+      }
+
+      if (current != previous) {
+        // we want to use the previous token
+        if (previous == CharType.LETTER || previous == CharType.DIGIT) {
+          tokens.add(input.substring(pos, i));
+        }
+
+        if (current == CharType.LETTER || current == CharType.DIGIT) {
+          pos = i;
+        }
+
+        previous = current;
+      }
+    }
+
+    return tokens;
+  }
+
+  /**
+   * Get the value of this TimeSpan represented in the given unit. If the given unit is larger than
+   * the current unit, precision may be lost.
+   *
+   * @throws ArithmeticException If the value cannot be represented in the given unit due to
+   *     overflow.
+   */
+  public long getChecked(TimeUnit dest) {
+    if (dest.compareTo(unit) < 0) {
+      // Example case: we have seconds, but we want milliseconds (can overflow)
+      long factor = dest.convert(1, unit);
+      assert factor > 1;
+      return LongMath.checkedMultiply(span, factor);
+    }
+
+    // Example case: we have nanoseconds, but we want seconds (cannot overflow)
+    return dest.convert(span, unit);
+  }
+
+  /**
+   * Get the value of this TimeSpan represented in the given unit. If the given unit is larger than
+   * the current unit, precision may be lost. If the value cannot be represented in the given unit
+   * due to overflow, Long.MAX_VALUE/Long.MIN_VALUE is returned.
+   */
+  public long getSaturated(TimeUnit dest) {
+    return dest.convert(span, unit);
+  }
+
+  /**
+   * Return a TimeSpan that represents (approximately) the same time span, but whose unit is the
+   * given unit. If the given unit is larger than the current unit, precision may be lost.
+   *
+   * @throws ArithmeticException If the value cannot be represented in the given unit
+   */
+  public TimeSpan toChecked(TimeUnit dest) {
+    if (dest.equals(unit)) {
+      return this;
+    }
+    return new TimeSpan(getChecked(dest), dest);
+  }
+
+  /**
+   * Return a TimeSpan that represents (approximately) the same time span, but whose unit is the
+   * given unit. If the given unit is larger than the current unit, precision may be lost. If the
+   * value cannot be represented in the given unit due to overflow, Long.MAX_VALUE/Long.MIN_VALUE is
+   * returned.
+   */
+  public TimeSpan toSaturated(TimeUnit dest) {
+    if (dest.equals(unit)) {
+      return this;
+    }
+    return new TimeSpan(getSaturated(dest), dest);
+  }
+
+  /**
+   * Return a TimeSpan that represents (approximately) the same time span, but whose unit is the
+   * given unit, if possible. If the given unit is larger than the current unit, precision may be
+   * lost. If the value cannot be represented in the given unit due to overflow, the resulting
+   * TimeSpan does not use the given unit, but the closest unit one that still allows to hold the
+   * exact value.
+   */
+  @VisibleForTesting
+  TimeSpan toIfPossible(TimeUnit dest) {
+    if (dest.equals(unit)) {
+      return this;
+    }
+    if (dest.compareTo(unit) < 0) {
+      // Example case: we have seconds, but we want milliseconds (can overflow).
+      // Overflow is expected to be very rare.
+      // Loop will terminate because at one time "dest" becomes equal to "this.unit"
+      // and then toChecked succeeds for sure.
+      while (true) {
+        try {
+          return toChecked(dest);
+        } catch (ArithmeticException e) {
+          dest = checkNotNull(ALL_UNITS.higher(dest));
+        }
+      }
+
+    } else {
+      // Example case: we have nanoseconds, but we want seconds (cannot overflow).
+      return new TimeSpan(getSaturated(dest), dest);
+    }
+  }
+
+  /**
+   * Get the value of this TimeSpan as seconds. If the current unit is smaller than seconds,
+   * precision may be lost.
+   *
+   * @throws ArithmeticException If the value cannot be represented as seconds due to overflow.
+   */
+  public long asSeconds() {
+    return getChecked(SECONDS);
+  }
+
+  /**
+   * Get the value of this TimeSpan as milliseconds. If the current unit is smaller than
+   * milliseconds, precision may be lost.
+   *
+   * @throws ArithmeticException If the value cannot be represented as milliseconds due to overflow.
+   */
+  public long asMillis() {
+    return getChecked(MILLISECONDS);
+  }
+
+  /**
+   * Get the value of this TimeSpan as nanoseconds.
+   *
+   * @throws ArithmeticException If the value cannot be represented as milliseconds due to overflow.
+   */
+  public long asNanos() {
+    return getChecked(NANOSECONDS);
+  }
+
+  public TimeUnit getUnit() {
+    return unit;
+  }
+
+  /**
+   * Return a strings that represents (approximately) this time span, in the given unit if possible.
+   * If the given unit is larger than the current unit, precision may be lost. If the value cannot
+   * be represented in the given unit due to overflow, the result does not use the given unit, but
+   * the closest unit one that still allows to hold the exact value.
+   */
+  public String formatAs(TimeUnit dest) {
+    if (dest.compareTo(unit) <= 0) {
+      // Example case: we have seconds, but we want milliseconds
+      return toIfPossible(dest).toString();
+    }
+
+    // Example case: we have nanoseconds, but we want seconds
+    long scaleFactor = unit.convert(1L, dest);
+    assert scaleFactor > 0;
+    return String.format(Locale.US, "%9.3f%s", (double) span / scaleFactor, TIME_UNITS.get(dest));
+  }
+
+  /** Check whether this time span is empty, i.e., represents 0ns (or 0ms or 0s or ...). */
+  public boolean isEmpty() {
+    return span == 0;
+  }
+
+  @Override
+  public boolean equals(@Nullable Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof TimeSpan)) {
+      return false;
+    }
+    TimeSpan other = (TimeSpan) obj;
+    if (this.unit == other.unit) {
+      return this.span == other.span;
+    }
+    TimeUnit leastCommonUnit = leastCommonUnit(this, other);
+    try {
+      return this.getChecked(leastCommonUnit) == other.getChecked(leastCommonUnit);
+    } catch (ArithmeticException e) {
+      // In case of overflow, both values cannot be the same.
+      return false;
+    }
+  }
+
+  @Override
+  public int hashCode() {
+    // Need to use a fixed unit here to be consistent with equals:
+    // 60s and 1min need to have the same hashCode.
+    // Saturation is ok, all really large values just have the same hash code.
+    return Longs.hashCode(getSaturated(NANOSECONDS));
+  }
+
+  @Override
+  public int compareTo(TimeSpan other) {
+    if (this.unit == other.unit) {
+      return Long.compare(this.span, other.span);
+    }
+    TimeUnit leastCommonUnit = leastCommonUnit(this, other);
+    try {
+      return Long.compare(this.getChecked(leastCommonUnit), other.getChecked(leastCommonUnit));
+    } catch (ArithmeticException e) {
+      // Only one of the two calls can overflow,
+      // and it has to be the one with the larger unit.
+      // Thus in case of overflow the TimeSpan with the larger unit also has the larger value.
+      return this.unit.compareTo(other.unit);
+    }
+  }
+
+  private static TimeUnit leastCommonUnit(TimeSpan a, TimeSpan b) {
+    return Ordering.natural().min(a.unit, b.unit);
+  }
+
+  @Override
+  public String toString() {
+    return DEFAULT_FORMAT.apply(this);
+  }
+
+  /**
+   * Create a new time span that is the sum of two time spans. The unit of the returned time span is
+   * the more precise one if possible, otherwise the closest unit that still allows to hold both
+   * input values and the result. Note that this can loose precision when adding a very large and a
+   * very small value.
+   *
+   * @throws ArithmeticException If no unit is large enough to represent the result value.
+   */
+  public static TimeSpan sum(TimeSpan a, TimeSpan b) {
+    TimeUnit leastCommonUnit = leastCommonUnit(a, b);
+    while (true) {
+      try {
+        return new TimeSpan(
+            LongMath.checkedAdd(a.getChecked(leastCommonUnit), b.getChecked(leastCommonUnit)),
+            leastCommonUnit);
+      } catch (ArithmeticException e) {
+        // Overflow is expected to be very rare, thus handle exception case instead of checking.
+        // Try again with next unit.
+        leastCommonUnit = ALL_UNITS.higher(leastCommonUnit);
+        if (leastCommonUnit == null) {
+          // overflow from addition
+          throw e;
+        }
+      }
+    }
+  }
+
+  /**
+   * Create a new time span that is the sum of several time spans. The unit of the returned time
+   * span is the most precise one if possible, otherwise the closest unit that still allows to hold
+   * input values and the result. Note that this can loose precision when adding very large and very
+   * small values.
+   *
+   * @throws ArithmeticException If no unit is large enough to represent the result value.
+   */
+  public static TimeSpan sum(Iterable<TimeSpan> timeSpans) {
+    Iterator<TimeSpan> it = timeSpans.iterator();
+    checkArgument(it.hasNext());
+
+    TimeSpan result = it.next();
+    // TODO Summing in loop looses more precision than necessary.
+    while (it.hasNext()) {
+      result = sum(result, it.next());
+    }
+    return result;
+  }
+
+  /**
+   * Create a new time span that is the sum of several time spans. The unit of the returned time
+   * span is the most precise one.
+   */
+  public static TimeSpan sum(TimeSpan... t) {
+    return sum(Arrays.asList(t));
+  }
+
+  /**
+   * Create a new time span that is the difference of two time spans. The unit of the returned time
+   * span is the more precise one if possible, otherwise the closest unit that still allows to hold
+   * both input values and the result. Note that this can loose precision when subtracting a very
+   * large and a very small value.
+   */
+  public static TimeSpan difference(TimeSpan a, TimeSpan b) {
+    TimeUnit leastCommonUnit = leastCommonUnit(a, b);
+    while (true) {
+      try {
+        return new TimeSpan(
+            LongMath.checkedSubtract(a.getChecked(leastCommonUnit), b.getChecked(leastCommonUnit)),
+            leastCommonUnit);
+      } catch (ArithmeticException e) {
+        // Overflow is expected to be very rare, thus handle exception case instead of checking.
+        // Try again with next unit.
+        leastCommonUnit = ALL_UNITS.higher(leastCommonUnit);
+        if (leastCommonUnit == null) {
+          // overflow from subtraction
+          throw e;
+        }
+      }
+    }
+  }
+
+  /**
+   * Create a new time span that is the current one multiplied by a non-negative integral factor.
+   * The unit of the returned time span is the same as the current one if possible, otherwise the
+   * closest unit that still allows to the result. Note that this can loose precision.
+   */
+  @CheckReturnValue
+  public TimeSpan multiply(int factor) {
+    checkArgument(factor >= 0, "Cannot multiply TimeSpan with negative value %s", factor);
+    TimeUnit dest = unit;
+    while (true) {
+      try {
+        return new TimeSpan(LongMath.checkedMultiply(getChecked(dest), factor), dest);
+      } catch (ArithmeticException e) {
+        // Overflow is expected to be very rare, thus handle exception case instead of checking.
+        // Try again with next unit.
+        dest = ALL_UNITS.higher(dest);
+        if (dest == null) {
+          // overflow from multiplication
+          throw e;
+        }
+      }
+    }
+  }
+
+  /**
+   * Create a new time span that is the current one divided by a non-negative integral value. The
+   * result of the division is rounded down (integer division). The unit of the returned time span
+   * is the same as the current one.
+   */
+  @CheckReturnValue
+  public TimeSpan divide(int divisor) {
+    checkArgument(divisor >= 0, "Cannot divide TimeSpan by negative value %s", divisor);
+    return new TimeSpan(span / divisor, unit);
+  }
+
+  // Code for formatting as string
+
+  private static final Function<TimeSpan, String> FORMAT_SIMPLE =
+      pInput -> pInput.span + TIME_UNITS.get(pInput.unit);
+
+  @VisibleForTesting
+  static final Function<TimeSpan, String> FORMAT_HUMAN_READABLE_LARGE =
+      pInput -> {
+        TimeUnit unit = pInput.getUnit();
+        StringBuilder result = new StringBuilder();
+        boolean started = false;
+
+        long years = pInput.getChecked(DAYS) / 365;
+        if (years > 0) {
+          started = true;
+          result.append(years).append("a ");
+        }
+
+        long days = pInput.getChecked(DAYS) - years * 365;
+        if (started || days > 0) {
+          started = true;
+          result.append(days).append("d ");
+        }
+        if (unit.equals(DAYS)) {
+          return result.toString().trim();
+        }
+
+        long hours = pInput.getChecked(HOURS) - years * 365 * 24 - days * 24;
+        if (started || hours > 0) {
+          started = true;
+          result.append(String.format("%02dh ", hours));
+        }
+        if (unit.equals(HOURS)) {
+          return result.toString().trim();
+        }
+
+        long minutes =
+            pInput.getChecked(MINUTES) - years * 365 * 24 * 60 - days * 24 * 60 - hours * 60;
+        if (started || minutes > 0) {
+          result.append(String.format("%02dmin ", minutes));
+        }
+        if (unit.equals(MINUTES)) {
+          started = true;
+          return result.toString().trim();
+        }
+
+        long seconds =
+            pInput.getChecked(SECONDS)
+                - years * 365 * 24 * 60 * 60
+                - days * 24 * 60 * 60
+                - hours * 60 * 60
+                - minutes * 60;
+        result.append(String.format("%02ds", seconds));
+
+        return result.toString();
+      };
+
+  private static final String DEFAULT_FORMAT_PROPERTY_NAME =
+      TimeSpan.class.getCanonicalName() + ".defaultFormat";
+
+  private static final Function<TimeSpan, String> DEFAULT_FORMAT;
+
+  static {
+    String format =
+        Ascii.toUpperCase(System.getProperty(DEFAULT_FORMAT_PROPERTY_NAME, "SIMPLE").trim());
+    switch (format) {
+      case "HUMAN_READABLE_LARGE":
+        DEFAULT_FORMAT = FORMAT_HUMAN_READABLE_LARGE;
+        break;
+      case "SIMPLE":
+        DEFAULT_FORMAT = FORMAT_SIMPLE;
+        break;
+      default:
+        DEFAULT_FORMAT = FORMAT_SIMPLE;
+    }
+  }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/NotificationActor.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/NotificationActor.java
new file mode 100644
index 0000000..7daf7c9
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/NotificationActor.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf;
+
+public interface NotificationActor<T> {
+
+	public void notificationActor(T item);
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/NotificationWorker.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/NotificationWorker.java
new file mode 100644
index 0000000..b6e0ca2
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/NotificationWorker.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf;
+
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+
+public class NotificationWorker<T> implements AutoCloseable {
+
+	private final BlockingQueue<T> workQueue;
+	private final ExecutorService service;
+	private final NotificationActor<T> actor;
+
+	public NotificationWorker(int numWorkers, int workQueueSize, NotificationActor<T> actorObject) {
+		workQueue = new LinkedBlockingQueue<T>(workQueueSize);
+		service = Executors.newFixedThreadPool(numWorkers);
+		actor = actorObject;
+
+		for (int i=0; i < numWorkers; i++) {
+			service.submit(new Worker<T>(workQueue, actor));
+		}
+	}
+
+	public void put(T item) {
+		try {
+			workQueue.put(item);
+		} catch (InterruptedException ex) {
+			Thread.currentThread().interrupt();
+		}
+	}
+
+	@Override
+	public void close() throws Exception {
+		// TODO Auto-generated method stub
+	}
+
+	private static class Worker<T> implements Runnable {
+        private final BlockingQueue<T> workQueue;
+		private final NotificationActor<T> actor;
+
+
+        public Worker(BlockingQueue<T> workQueue, NotificationActor<T> actor) {
+            this.workQueue = workQueue;
+            this.actor = actor;
+        }
+
+		@Override
+		public void run() {
+			while (!Thread.currentThread().isInterrupted()) {
+				try {
+					T item = workQueue.take();
+					actor.notificationActor(item);
+					// Process item
+				} catch (InterruptedException ex) {
+					Thread.currentThread().interrupt();
+					break;
+				}
+			}
+		}
+	}
+
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCOreNetworkElementCoreData.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCOreNetworkElementCoreData.java
new file mode 100644
index 0000000..265a3db
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCOreNetworkElementCoreData.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElement;
+
+public interface ONFCOreNetworkElementCoreData {
+
+	public String getMountpoint();
+	public DataBroker getDataBroker();
+	public NetworkElement getOptionalNetworkElement();
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreEmpty.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreEmpty.java
new file mode 100644
index 0000000..00393d9
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreEmpty.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InventoryInformation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.AllPm;
+import org.opendaylight.controller.md.sal.binding.api.MountPoint;
+
+/**
+ * @author herbert
+ *
+ */
+public class ONFCoreEmpty implements ONFCoreNetworkElementRepresentation {
+
+    private String mountPointNodeName = "";
+
+
+    ONFCoreEmpty(String mountPointNodeName) {
+        this.mountPointNodeName = mountPointNodeName;
+    }
+
+    @Override
+    public void initialReadFromNetworkElement() {
+    }
+
+    @Override
+    public String getMountPointNodeName() {
+        return mountPointNodeName;
+    }
+
+    @Override
+    public void resetPMIterator() {
+    }
+
+    @Override
+    public boolean hasNext() {
+        return false;
+    }
+
+    @Override
+    public void next() {
+    }
+
+    @Override
+    public AllPm getHistoricalPM() {
+        return AllPm.getEmpty();
+    }
+
+    @Override
+    public String pmStatusToString() {
+        return "ONFCoreEmpty";
+    }
+
+    @Override
+    public int removeAllCurrentProblemsOfNode() {
+        return 0;
+    }
+
+    @Override
+    public void doRegisterMicrowaveEventListener(MountPoint mointPoint) {
+        //Do nothing
+    }
+
+    @Override
+    public void prepareCheck() {
+        //Do nothing here
+    }
+
+    @Override
+    public boolean checkIfConnectionToMediatorIsOk() {
+        return false;
+    }
+
+    @Override
+    public boolean checkIfConnectionToNeIsOk() {
+        return false;
+    }
+
+    @Override
+    public void initSynchronizationExtension() {
+    }
+
+    @Override
+    public InventoryInformation getInventoryInformation() {
+        return InventoryInformation.getDefault();
+    }
+
+    @Override
+    public InventoryInformation getInventoryInformation(String layerProtocolFilter) {
+        return InventoryInformation.getDefault();
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreInterfacePac.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreInterfacePac.java
new file mode 100644
index 0000000..1c9c8e0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreInterfacePac.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf;
+
+/**
+ * @author herbert
+ *
+ */
+public class ONFCoreInterfacePac<T> {
+
+
+    Class<T> myClass;
+
+    ONFCoreInterfacePac( Class<T> myClass ) {
+        this.myClass = myClass;
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12.java
new file mode 100644
index 0000000..de43e57
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12.java
@@ -0,0 +1,741 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalDateAndTime;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalSeverity;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.AllPm;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.Capabilities;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ONFLayerProtocolName;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.GenericTransactionUtils;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc.OnfMicrowaveModel;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc.WrapperMicrowaveModelRev170324;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc.WrapperMicrowaveModelRev180907;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc.WrapperMicrowaveModelRev181010;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.toggleAlarmFilter.NotificationDelayService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.ProviderClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.service.HtDatabaseEventsService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.listener.MicrowaveEventListener12;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.AttributeValueChangedNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.WebSocketServiceClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.MaintenanceService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types.EsHistoricalPerformance15Minutes;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types.EsHistoricalPerformance24Hours;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.MountPoint;
+import org.opendaylight.controller.md.sal.binding.api.NotificationService;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElement;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.extension.g.Extension;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.Lp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.network.element.Ltp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.GranularityPeriodType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.OtnHistoryDataG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.NetworkElementPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.network.element.pac.NetworkElementCurrentProblems;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.NotificationListener;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.google.common.base.Optional;
+
+/**
+ * Get information over NETCONF device according to ONF Coremodel. Read networkelement and
+ * conditional packages.
+ *
+ * Get conditional packages from Networkelement Possible interfaces are: MWPS, LTP(MWPS-TTP),
+ * MWAirInterfacePac, MicrowaveModel-ObjectClasses-AirInterface ETH-CTP,LTP(Client),
+ * MW_EthernetContainer_Pac MWS, LTP(MWS-CTP-xD), MWAirInterfaceDiversityPac,
+ * MicrowaveModel-ObjectClasses-AirInterfaceDiversity MWS, LTP(MWS-TTP),
+ * ,MicrowaveModel-ObjectClasses-HybridMwStructure MWS, LTP(MWS-TTP),
+ * ,MicrowaveModel-ObjectClasses-PureEthernetStructure
+ *
+ * @author herbert
+ *
+ */
+public class ONFCoreNetworkElement12 extends ONFCoreNetworkElement12Base
+        implements ONFCoreNetworkElementCallback, NotificationActor<AttributeValueChangedNotificationXml> {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElement12.class);
+
+    /*-----------------------------------------------------------------------------
+     * Class members
+     */
+    private final @Nonnull MicrowaveEventListener12 microwaveEventListener;
+    private final @Nonnull OnfMicrowaveModel microwaveModel;
+    private final NotificationWorker<AttributeValueChangedNotificationXml> notificationQueue;
+
+    private ListenerRegistration<NotificationListener> listenerRegistrationresult = null;
+
+    /*-----------------------------------------------------------------------------
+     * Construction
+     */
+
+    /**
+     * Constructor
+     *
+     * @param mountPointNodeName as String
+     * @param capabilities of the specific network element
+     * @param netconfNodeDataBroker for the network element specific data
+     * @param webSocketService to forward event notifications
+     * @param databaseService to access the database
+     * @param dcaeProvider to forward problem / change notifications
+     */
+    private ONFCoreNetworkElement12(String mountPointNodeName, Capabilities capabilities,
+            DataBroker netconfNodeDataBroker, WebSocketServiceClient webSocketService,
+            HtDatabaseEventsService databaseService, ProviderClient dcaeProvider, @Nullable ProviderClient aotsmClient,
+            MaintenanceService maintenanceService,
+            NotificationDelayService<ProblemNotificationXml> notificationDelayService,
+            OnfMicrowaveModel onfMicrowaveModel) {
+
+        super(mountPointNodeName, netconfNodeDataBroker, capabilities);
+
+        this.microwaveModel = onfMicrowaveModel;
+        this.microwaveModel.setCoreData(this);
+
+        // Create MicrowaveService here
+        this.microwaveEventListener = new MicrowaveEventListener12(mountPointNodeName, webSocketService,
+                databaseService, dcaeProvider, aotsmClient, maintenanceService, notificationDelayService, this);
+        this.microwaveModel.setOnfMicrowaveModelListener(microwaveEventListener);
+
+        this.notificationQueue = new NotificationWorker<>(1, 100, this);
+
+        // ->Below shifted to super class
+        // this.isNetworkElementCurrentProblemsSupporting12 =
+        // capabilities.isSupportingNamespaceAndRevision(NetworkElementPac.QNAME);
+        // LOG.debug("support necurrent-problem-list=" + this.isNetworkElementCurrentProblemsSupporting12);
+        // LOG.info("Create NE instance {}", InstanceList.QNAME.getLocalName());
+
+    }
+
+    /**
+     * Check capabilities are matching the this specific implementation and create network element
+     * representation if so.
+     *
+     * @param mountPointNodeName as String
+     * @param capabilities of the specific network element
+     * @param netconfNodeDataBroker for the network element specific data
+     * @param webSocketService to forward event notifications
+     * @param databaseService to access the database
+     * @param dcaeProvider to forward problem / change notifications
+     * @return created Object if conditions are OK or null if not.
+     */
+    public static @Nullable ONFCoreNetworkElement12 build(String mountPointNodeName, Capabilities capabilities,
+            DataBroker netconfNodeDataBroker, WebSocketServiceClient webSocketService,
+            HtDatabaseEventsService databaseService, ProviderClient dcaeProvider, @Nullable ProviderClient aotsmClient,
+            MaintenanceService maintenanceService,
+            NotificationDelayService<ProblemNotificationXml> notificationDelayService) {
+
+        if (capabilities.isSupportingNamespaceAndRevision(NetworkElement.QNAME)) {
+            OnfMicrowaveModel onfMicrowaveModel = null;
+
+            if (capabilities.isSupportingNamespaceAndRevision(WrapperMicrowaveModelRev170324.QNAME)) {
+                onfMicrowaveModel = new WrapperMicrowaveModelRev170324();
+            } else if (capabilities.isSupportingNamespaceAndRevision(WrapperMicrowaveModelRev180907.QNAME)) {
+                onfMicrowaveModel = new WrapperMicrowaveModelRev180907();
+            } else if (capabilities.isSupportingNamespaceAndRevision(WrapperMicrowaveModelRev181010.QNAME)) {
+                onfMicrowaveModel = new WrapperMicrowaveModelRev181010();
+            }
+
+            if (onfMicrowaveModel != null) {
+                return new ONFCoreNetworkElement12(mountPointNodeName, capabilities, netconfNodeDataBroker,
+                        webSocketService, databaseService, dcaeProvider, aotsmClient, maintenanceService,
+                        notificationDelayService, onfMicrowaveModel);
+            }
+        }
+        return null;
+
+    }
+
+    /*-----------------------------------------------------------------------------
+     * Functions
+     */
+
+    /**
+     * DeviceMonitor Prepare check by updating NE state and reading all interfaces.
+     */
+    @Override
+    public void prepareCheck() {
+        synchronized (dmLock) {
+            boolean change = readNetworkElementAndInterfaces();
+            if (change) {
+                int problems = microwaveEventListener.removeAllCurrentProblemsOfNode();
+                List<ProblemNotificationXml> resultList = readAllCurrentProblemsOfNode();
+                microwaveEventListener.initCurrentProblemStatus(resultList);
+                LOG.info("Resync mountpoint {} for device {}. Removed {}. Current problems: {}", getMountPointNodeName(),
+                        getUuId(), problems, resultList.size());
+            }
+        }
+    }
+
+    // public boolean checkIfConnectionToMediatorIsOk() -> Shifted to super class
+    // public boolean checkIfConnectionToNeIsOk() -> Shifted to super class
+
+    /*-----------------------------------------------------------------------------
+     * Synchronization
+     */
+
+    // public void initSynchronizationExtension() -> Shifted to super class
+    // private InstanceList readPTPClockInstances() -> Shifted to super class
+
+    /*-----------------------------------------------------------------------------
+     * Services for NE/Device synchronization
+     */
+
+    /**
+     * Handling of specific Notifications from NE, indicating changes and need for synchronization.
+     *
+     * <attribute-value-changed-notification xmlns="urn:onf:params:xml:ns:yang:microwave-model">
+     * <attribute-name>/equipment-pac/equipment-current-problems</attribute-name>
+     * <object-id-ref>CARD-1.1.1.0</object-id-ref> <new-value></new-value>
+     * </attribute-value-changed-notification>
+     * <attribute-value-changed-notification xmlns="urn:onf:params:xml:ns:yang:microwave-model">
+     * <attribute-name>/network-element/extension[value-name="top-level-equipment"]/value</attribute-name>
+     * <object-id-ref>Hybrid-Z</object-id-ref>
+     * <new-value>SHELF-1.1.0.0,IDU-1.55.0.0,ODU-1.56.0.0,IDU-1.65.0.0</new-value>
+     * </attribute-value-changed-notification>
+     */
+
+
+    @Override
+    public void notificationFromNeListener(AttributeValueChangedNotificationXml notificationXml) {
+        notificationQueue.put(notificationXml);
+    }
+
+    @Override
+    public void notificationActor(AttributeValueChangedNotificationXml notificationXml) {
+
+        LOG.debug("Enter change notification listener");
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("Notification: {}", notificationXml);
+        }
+        if (notificationXml.getAttributeName().equals("/equipment-pac/equipment-current-problems")) {
+            syncEquipmentPac(notificationXml.getObjectId());
+        } else if (notificationXml.getAttributeName()
+                .equals("/network-element/extension[value-name=\"top-level-equipment\"]/value")) {
+            initialReadFromNetworkElement();
+        }
+        LOG.debug("Leave change notification listener");
+    }
+
+    /**
+     * Synchronize problems for a specific equipment-pac
+     *
+     * @param uuidString of the equipment-pac
+     */
+    private synchronized void syncEquipmentPac(String uuidString) {
+
+        int problems = microwaveEventListener.removeObjectsCurrentProblemsOfNode(uuidString);
+        LOG.debug("Removed {} problems for uuid {}", problems, uuidString);
+
+        List<ProblemNotificationXml> resultList = equipment.addProblemsofNodeObject(uuidString);
+        microwaveEventListener.initCurrentProblemStatus(resultList);
+        LOG.debug("Added {} problems for uuid {}", resultList.size(), uuidString);
+
+    }
+
+
+    /*-----------------------------------------------------------------------------
+     * Problem/Fault related functions
+     */
+
+    /**
+     * Read during startup all relevant structure and status parameters from device
+     */
+    @Override
+    public synchronized void initialReadFromNetworkElement() {
+        // optionalNe.getLtp().get(0).getLp();
+        LOG.debug("Get info about {}", getMountPointNodeName());
+
+        int problems = microwaveEventListener.removeAllCurrentProblemsOfNode();
+        LOG.debug("Removed all {} problems from database at registration", problems);
+
+        // Step 2.1: access data broker within this mount point
+        LOG.debug("DBRead start");
+
+        // Step 2.2: read ne from data store
+        readNetworkElementAndInterfaces();
+        equipment.readNetworkElementEquipment();
+
+        // Step 2.3: read the existing faults and add to DB
+        List<ProblemNotificationXml> resultList = readAllCurrentProblemsOfNode();
+        equipment.addProblemsofNode(resultList);
+
+        microwaveEventListener.initCurrentProblemStatus(resultList);
+
+        microwaveEventListener.writeEquipment(equipment);
+
+        LOG.info("Found info at {} for device {} number of problems: {}", getMountPointNodeName(), getUuId(),
+                resultList.size());
+    }
+
+    /**
+     * LOG the newly added problems of the interface pac
+     *
+     * @param idxStart
+     * @param uuid
+     * @param resultList
+     */
+    private void debugResultList(String uuid, List<ProblemNotificationXml> resultList, int idxStart) {
+        if (LOG.isDebugEnabled()) {
+            StringBuffer sb = new StringBuffer();
+            int idx = 0;
+            for (int t = idxStart; t < resultList.size(); t++) {
+                sb.append(idx++);
+                sb.append(":{");
+                sb.append(resultList.get(t));
+                sb.append('}');
+            }
+            LOG.debug("Found problems {} {}", uuid, sb.toString());
+        }
+    }
+
+    /**
+     * Read from NetworkElement and verify LTPs have changed. If the NE has changed, update to the new
+     * structure. From initial state it changes also.
+     */
+    private synchronized boolean readNetworkElementAndInterfaces() {
+
+        LOG.debug("Update mountpoint if changed {}", getMountPointNodeName());
+
+        optionalNe = GenericTransactionUtils.readData(getNetconfNodeDataBroker(), LogicalDatastoreType.OPERATIONAL,
+                NETWORKELEMENT_IID);;
+        synchronized (pmLock) {
+            boolean change = false;
+
+            if (optionalNe == null) {
+                LOG.debug("Unable to read NE data for mountpoint {}", getMountPointNodeName());
+                if (!interfaceList.isEmpty()) {
+                    interfaceList.clear();
+                    interfaceListIterator = null;
+                    change = true;
+                }
+
+            } else {
+                LOG.debug("Mountpoint '{}' NE-Name '{}'", getMountPointNodeName(), optionalNe.getName().toString());
+                List<Lp> actualInterfaceList = getLtpList(optionalNe);
+                if (!interfaceList.equals(actualInterfaceList)) {
+                    LOG.debug("Mountpoint '{}' Update LTP List. Elements {}", getMountPointNodeName(),
+                            actualInterfaceList.size());
+                    interfaceList.clear();
+                    interfaceList.addAll(actualInterfaceList);
+                    interfaceListIterator = null;
+                    change = true;
+                }
+            }
+            return change;
+        }
+    }
+
+    /**
+     * Read current problems of AirInterfaces and EthernetContainer according to NE status into DB
+     *
+     * @return List with all problems
+     */
+    private List<ProblemNotificationXml> readAllCurrentProblemsOfNode() {
+
+        // Step 2.3: read the existing faults and add to DB
+        List<ProblemNotificationXml> resultList = new ArrayList<>();
+        int idxStart; // Start index for debug messages
+        UniversalId uuid;
+
+        synchronized (pmLock) {
+            for (Lp ltp : interfaceList) {
+
+                idxStart = resultList.size();
+                uuid = ltp.getUuid();
+                Class<?> lpClass = getLpExtension(ltp);
+
+                ONFLayerProtocolName lpName = ONFLayerProtocolName.valueOf(ltp.getLayerProtocolName());
+
+                microwaveModel.readTheFaultsOfMicrowaveModel(lpName, lpClass, uuid, resultList);
+
+                debugResultList(uuid.getValue(), resultList, idxStart);
+
+            }
+        }
+
+        // Step 2.4: Read other problems from mountpoint
+        if (isNetworkElementCurrentProblemsSupporting12) {
+            idxStart = resultList.size();
+            readNetworkElementCurrentProblems12(resultList);
+            debugResultList("CurrentProblems12", resultList, idxStart);
+        }
+
+        return resultList;
+
+    }
+
+    /**
+     * Get uuid of Optional NE.
+     *
+     * @return Uuid or EMPTY String if optionNE is not available
+     */
+    private String getUuId() {
+        String uuid = EMPTY;
+
+        try {
+            uuid = optionalNe != null ? optionalNe.getUuid() != null ? optionalNe.getUuid().getValue() : EMPTY : EMPTY;
+        } catch (NullPointerException e) {
+            // Unfortunately throws null pointer if not definied
+        }
+        return uuid;
+    }
+
+    /**
+     * Read the NetworkElement part from database.
+     *
+     * @return Optional with NetworkElement or empty
+     */
+    @Nullable
+    private NetworkElement readNetworkElement() {
+        // Step 2.2: construct data and the relative iid
+        // The schema path to identify an instance is
+        // <i>CoreModel-CoreNetworkModule-ObjectClasses/NetworkElement</i>
+        // Read to the config data store
+        return GenericTransactionUtils.readData(getNetconfNodeDataBroker(), LogicalDatastoreType.OPERATIONAL,
+                NETWORKELEMENT_IID);
+    }
+
+    /**
+     * Get from LayProtocolExtensions the related generated ONF Interface PAC class which represents it.
+     *
+     * @param ltp logical termination point
+     * @return Class of InterfacePac
+     */
+    @Nullable
+    private Class<?> getLpExtension(@Nullable Lp ltp) {
+
+        String capability = EMPTY;
+        String revision = EMPTY;
+        String conditionalPackage = EMPTY;
+        Class<?> res = null;
+
+        if (ltp != null) {
+            for (Extension e : getExtensionList(ltp)) {
+                if (e.getValueName().contentEquals("capability")) {
+                    capability = e.getValue();
+                    int idx = capability.indexOf("?");
+                    if (idx != -1) {
+                        capability = capability.substring(0, idx);
+                    }
+                }
+                if (e.getValueName().contentEquals("revision")) {
+                    revision = e.getValue();
+                }
+                if (e.getValueName().contentEquals("conditional-package")) {
+                    conditionalPackage = e.getValue();
+                }
+            }
+        }
+        // QName qName =
+        // org.opendaylight.yangtools.yang.common.QName.create("urn:onf:params:xml:ns:yang:microwave-model",
+        // "2017-03-24", "mw-air-interface-pac").intern();
+        LOG.info("LpExtension capability={} revision={} conditionalPackage={}", capability, revision,
+                conditionalPackage);
+        if (!capability.isEmpty() && !revision.isEmpty() && !conditionalPackage.isEmpty()) {
+            try {
+                QName qName = QName.create(capability, revision, conditionalPackage);
+                res = this.microwaveModel.getClassForLtpExtension(qName);
+            } catch (IllegalArgumentException e) {
+                LOG.debug("Can not create QName from ({}{}{}): {}", capability, revision, conditionalPackage,
+                        e.getMessage());
+            }
+        }
+        return res;
+    }
+
+    /**
+     * Read element from class that could be not available
+     *
+     * @param ltp layer termination point
+     * @return List with extension parameters or empty list
+     */
+    @Nonnull
+    private static List<Extension> getExtensionList(@Nullable Lp ltp) {
+        if (ltp != null && ltp.getExtension() != null) {
+            return ltp.getExtension();
+        } else {
+            return EMPTYLTPEXTENSIONLIST;
+        }
+    }
+
+    /**
+     * Get List of UUIDs for conditional packages from Networkelement<br>
+     * Possible interfaces are:<br>
+     * MWPS, LTP(MWPS-TTP), MWAirInterfacePac, MicrowaveModel-ObjectClasses-AirInterface<br>
+     * ETH-CTP,LTP(Client), MW_EthernetContainer_Pac<br>
+     * MWS, LTP(MWS-CTP-xD), MWAirInterfaceDiversityPac,
+     * MicrowaveModel-ObjectClasses-AirInterfaceDiversity<br>
+     * MWS, LTP(MWS-TTP), ,MicrowaveModel-ObjectClasses-HybridMwStructure<br>
+     * MWS, LTP(MWS-TTP), ,MicrowaveModel-ObjectClasses-PureEthernetStructure<br>
+     *
+     * @param ne Networkelement
+     * @return Id List, never null.
+     */
+    private static List<Lp> getLtpList(@Nullable NetworkElement ne) {
+
+        List<Lp> res = Collections.synchronizedList(new ArrayList<Lp>());
+
+        if (ne != null) {
+            List<Ltp> ltpRefList = ne.getLtp();
+            if (ltpRefList == null) {
+                LOG.debug("DBRead NE-Interfaces: null");
+            } else {
+                for (Ltp ltRefListE : ltpRefList) {
+                    List<Lp> lpList = ltRefListE.getLp();
+                    if (lpList == null) {
+                        LOG.debug("DBRead NE-Interfaces Reference List: null");
+                    } else {
+                        for (Lp ltp : lpList) {
+                            //// LayerProtocolName layerProtocolName = lpListE.getLayerProtocolName();
+                            // UniversalId uuId = lpListE.getUuid();
+                            res.add(ltp);
+                        }
+                    }
+                }
+            }
+        } else {
+            LOG.debug("DBRead NE: null");
+        }
+
+        // ---- Debug
+        if (LOG.isDebugEnabled()) {
+            StringBuffer strBuf = new StringBuffer();
+            for (Lp ltp : res) {
+                if (strBuf.length() > 0) {
+                    strBuf.append(", ");
+                }
+                strBuf.append(ltp.getLayerProtocolName().getValue());
+                strBuf.append(':');
+                strBuf.append(ltp.getUuid().getValue());
+            }
+            LOG.debug("DBRead NE-Interfaces: {}", strBuf.toString());
+        }
+        // ---- Debug end
+
+        return res;
+    }
+
+
+    @Nonnull
+    private List<? extends OtnHistoryDataG> readTheHistoricalPerformanceData(Lp lp) {
+        ONFLayerProtocolName lpName = ONFLayerProtocolName.valueOf(lp.getLayerProtocolName());
+
+        return this.microwaveModel.readTheHistoricalPerformanceData(lpName, lp);
+        /*
+         * switch (lpName) { case MWAirInterface: return
+         * readTheHistoricalPerformanceDataOfMwAirInterfacePac(lp);
+         *
+         * case EthernetContainer12: return readTheHistoricalPerformanceDataOfEthernetContainer(lp);
+         *
+         * case EthernetContainer10: case EthernetPhysical: case Ethernet: case TDMContainer: case
+         * Structure: case Unknown: LOG.debug("Do not read HistoricalPM data for {} {}", lpName,
+         * lp.getUuid().getValue()); break; } return new ArrayList<>();
+         */
+    }
+
+    @Override
+    public AllPm getHistoricalPM() {
+
+        synchronized (pmLock) {
+            if (pmLp != null) {
+                LOG.debug("Enter query PM");
+                AllPm allPm = new AllPm();
+                Lp lp = pmLp;
+
+                List<? extends OtnHistoryDataG> resultList = readTheHistoricalPerformanceData(lp);
+                LOG.debug("Got records: {}", resultList.size());
+                // org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.GranularityPeriodType
+                GranularityPeriodType granularityPeriod;
+                for (OtnHistoryDataG perf : resultList) {
+
+                    granularityPeriod = perf.getGranularityPeriod();
+                    if (granularityPeriod == null) {
+                        granularityPeriod = GranularityPeriodType.Unknown;
+                    }
+
+                    switch (granularityPeriod) {
+                        case Period15Min: {
+                            EsHistoricalPerformance15Minutes pm =
+                                    new EsHistoricalPerformance15Minutes(getMountPointNodeName(), lp)
+                                            .setHistoricalRecord15Minutes(perf);
+                            allPm.add(pm);
+                        }
+                            break;
+
+                        case Period24Hours: {
+                            EsHistoricalPerformance24Hours pm =
+                                    new EsHistoricalPerformance24Hours(getMountPointNodeName(), lp)
+                                            .setHistoricalRecord24Hours(perf);
+                            LOG.debug("Write 24h write to DB");
+                            allPm.add(pm);
+                        }
+                            break;
+
+                        default:
+                            LOG.warn("Unknown granularity {}", perf.getGranularityPeriod());
+                            break;
+
+                    }
+                }
+                LOG.debug("Deliver normalized records: {}", allPm.size());
+                return allPm;
+            } else {
+                LOG.debug("Deliver empty, no LTP");
+                return AllPm.getEmpty();
+            }
+        }
+    }
+
+    @Override
+    public void resetPMIterator() {
+        synchronized (pmLock) {
+            interfaceListIterator = interfaceList.iterator();
+        }
+        LOG.debug("PM reset iterator");
+    }
+
+    @Override
+    public boolean hasNext() {
+        boolean res;
+        synchronized (pmLock) {
+            res = interfaceListIterator != null ? interfaceListIterator.hasNext() : false;
+        }
+        LOG.debug("PM hasNext LTP {}", res);
+        return res;
+    }
+
+    @Override
+    public void next() {
+        synchronized (pmLock) {
+            if (interfaceListIterator == null) {
+                pmLp = null;
+                LOG.debug("PM next LTP null");
+            } else {
+                pmLp = interfaceListIterator.next();
+                LOG.debug("PM next LTP {}", pmLp.getLayerProtocolName().getValue());
+            }
+        }
+    }
+
+    @Override
+    public String pmStatusToString() {
+        StringBuffer res = new StringBuffer();
+        synchronized (pmLock) {
+            res.append(pmLp == null ? "no interface" : pmLp.getLayerProtocolName().getValue());
+            for (Lp lp : interfaceList) {
+                res.append("IF:");
+                res.append(lp.getLayerProtocolName().getValue());
+                res.append(" ");
+            }
+        }
+        return res.toString();
+    }
+
+    /**
+     * Remove all entries from list
+     */
+    @Override
+    public int removeAllCurrentProblemsOfNode() {
+        return microwaveEventListener.removeAllCurrentProblemsOfNode();
+    }
+
+    /**
+     * Register the listener
+     */
+    @Override
+    public void doRegisterMicrowaveEventListener(MountPoint mountPoint) {
+        LOG.info("End registration listener for Mountpoint {}", mountPoint.getIdentifier().toString());
+        final Optional<NotificationService> optionalNotificationService =
+                mountPoint.getService(NotificationService.class);
+        final NotificationService notificationService = optionalNotificationService.get();
+        // notificationService.registerNotificationListener(microwaveEventListener);
+        listenerRegistrationresult =
+                notificationService.registerNotificationListener(microwaveModel.getNotificationListener());
+        LOG.info("End registration listener for Mountpoint {} Listener: {} Result: {}",
+                mountPoint.getIdentifier().toString(), optionalNotificationService, listenerRegistrationresult);
+    }
+
+
+    /*------------------------------------------------------------
+     * private function to access database
+     */
+
+    /*-----------------------------------------------------------------------------
+     * Reading problems for the networkElement V1.2
+     */
+
+    private List<ProblemNotificationXml> readNetworkElementCurrentProblems12(List<ProblemNotificationXml> resultList) {
+
+        LOG.info("DBRead Get {} NetworkElementCurrentProblems12", getMountPointNodeName());
+
+        InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.NetworkElementPac> networkElementCurrentProblemsIID =
+                InstanceIdentifier.builder(
+                        org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.NetworkElementPac.class)
+                        .build();
+
+        // Step 2.3: read to the config data store
+        NetworkElementPac problemPac;
+        NetworkElementCurrentProblems problems;
+        try {
+            problemPac = GenericTransactionUtils.readData(getNetconfNodeDataBroker(), LogicalDatastoreType.OPERATIONAL,
+                    networkElementCurrentProblemsIID);
+            problems = problemPac.getNetworkElementCurrentProblems();
+            if (problems == null) {
+                LOG.debug("DBRead no NetworkElementCurrentProblems12");
+            } else if (problems.getCurrentProblemList() == null) {
+                LOG.debug("DBRead empty CurrentProblemList12");
+            } else {
+                for (org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.network.element.current.problems.g.CurrentProblemList problem : problems
+                        .getCurrentProblemList()) {
+                    resultList.add(new ProblemNotificationXml(getMountPointNodeName(), problem.getObjectReference(),
+                            problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                            problem.getSequenceNumber().toString(),
+                            InternalDateAndTime.valueOf(problem.getTimeStamp())));
+                }
+            }
+        } catch (Exception e) {
+            LOG.warn("DBRead {} NetworkElementCurrentProblems12 not supported. Message '{}' ", getMountPointNodeName(),
+                    e.getMessage());
+        }
+        return resultList;
+
+    }
+
+    @Override
+    public void close() throws Exception {
+        super.close();
+        if (listenerRegistrationresult != null) {
+            listenerRegistrationresult.close();
+        }
+    }
+
+
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12Base.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12Base.java
new file mode 100644
index 0000000..8fc4c33
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12Base.java
@@ -0,0 +1,232 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InventoryInformation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.Capabilities;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.GenericTransactionUtils;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ptp.dataset.rev170208.InstanceList;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ptp.dataset.rev170208.InstanceListKey;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ptp.dataset.rev170208.PortDsEntry;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ptp.dataset.rev170208.instance.list.PortDsList;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ptp.dataset.rev170208.port.ds.entry.PortIdentity;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElement;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.extension.g.Extension;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.Lp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.NetworkElementPac;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * This class contains the ONF Core model Version 1.2 related functions.
+ * It should import
+ */
+public abstract class ONFCoreNetworkElement12Base extends ONFCoreNetworkElementBase implements ONFCOreNetworkElementCoreData {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElement12Base.class);
+
+    protected static final List<Extension> EMPTYLTPEXTENSIONLIST = new ArrayList<>();
+    // private static final List<Ltp> EMPTYLTPLIST = new ArrayList<>();
+
+    protected static final InstanceIdentifier<NetworkElement> NETWORKELEMENT_IID = InstanceIdentifier
+            .builder(NetworkElement.class).build();
+
+    protected static final InstanceIdentifier<InstanceList> PTPINSTANCES_IID = InstanceIdentifier
+            .builder(InstanceList.class, new InstanceListKey(1)).build();
+
+    /*-----------------------------------------------------------------------------
+     * Class members
+     */
+
+    // Non specific part. Used by all functions.
+    /** interfaceList is used by PM task and should be synchronized */
+    protected final @Nonnull List<Lp> interfaceList = Collections.synchronizedList(new CopyOnWriteArrayList<>());
+    protected @Nullable NetworkElement optionalNe = null;
+
+    // Performance monitoring specific part
+    /** Lock for the PM access specific elements that could be null */
+    protected final @Nonnull Object pmLock = new Object();
+    protected @Nullable Iterator<Lp> interfaceListIterator = null;
+    /** Actual pmLp used during iteration over interfaces */
+    protected @Nullable Lp pmLp = null;
+
+    // Device monitoring specific part
+    /** Lock for the DM access specific elements that could be null */
+    protected final @Nonnull Object dmLock = new Object();
+
+    protected final boolean isNetworkElementCurrentProblemsSupporting12;
+
+    protected final ONFCoreNetworkElement12Equipment equipment;
+
+    /*
+     * Constructor
+     */
+
+    protected ONFCoreNetworkElement12Base(String mountPointNodeName, DataBroker netconfNodeDataBroker,
+            Capabilities capabilities) {
+        super(mountPointNodeName, netconfNodeDataBroker, capabilities);
+        // TODO Auto-generated constructor stub
+        this.isNetworkElementCurrentProblemsSupporting12 = capabilities.isSupportingNamespaceAndRevision(NetworkElementPac.QNAME);
+        this.equipment = new ONFCoreNetworkElement12Equipment(this, capabilities);
+        LOG.debug("support necurrent-problem-list=" + this.isNetworkElementCurrentProblemsSupporting12);
+        LOG.info("Create NE instance {}", InstanceList.QNAME.getLocalName());
+    }
+
+    /*---------------------------------------------------------------
+     * Getter/ Setter
+     */
+
+    @Override
+    public NetworkElement getOptionalNetworkElement() {
+        return optionalNe;
+    }
+
+
+    /*---------------------------------------------------------------
+     * Device Monitor
+     */
+
+    @Override
+    public boolean checkIfConnectionToMediatorIsOk() {
+        synchronized (dmLock) {
+            return optionalNe != null;
+        }
+    }
+
+    /*
+     * New implementation to interpret status with empty LTP List as notConnected => return false
+     * 30.10.2018 Since this behavior is very specific and implicit for specific NE Types
+     *     it needs to be activated by extension or configuration. Change to be disabled at the moment
+     */
+    @Override
+    public boolean checkIfConnectionToNeIsOk() {
+        return true;
+    }
+
+    /*---------------------------------------------------------------
+     * Synchronization
+     */
+
+    /**
+     * Query synchronization information out of NE
+     */
+
+    @Override
+    public void initSynchronizationExtension() {
+        // ClockIdentityType vv;
+        try {
+            if (!getCapabilities().isSupportingNamespaceAndRevision(InstanceList.QNAME)) {
+                LOG.debug("Mountpoint {} does not support PTP", getMountPointNodeName());
+            } else {
+                StringBuffer sb = new StringBuffer();
+                sb.append("NE " + getMountPointNodeName() + " does support synchronisation.\n");
+                InstanceList ptpInstance = readPTPClockInstances();
+                if (ptpInstance != null) {
+                    List<PortDsList> dsList = ptpInstance.getPortDsList();
+                    if (dsList != null) {
+                        int t = 0;
+                        for (PortDsEntry portDs : ptpInstance.getPortDsList()) {
+                            PortIdentity portId = portDs.getPortIdentity();
+                            if (portId != null) {
+                                sb.append("Port[");
+                                sb.append(portId.getPortNumber());
+                                sb.append("]{ ClockId: ");
+                                sb.append(portId.getClockIdentity());
+                                sb.append(", Portstate: ");
+                                sb.append(portDs.getPortState());
+                                sb.append("}, ");
+                            } else {
+                                sb.append("Incomplete port #" + t + ", ");
+                            }
+                            t++;
+                        }
+                    } else {
+                        sb.append("dsList contains null");
+                    }
+                } else {
+                    sb.append("ptpInstance equals null");
+                }
+                LOG.trace(sb.toString());
+            }
+        } catch (Exception e) {
+            LOG.info("Inconsistent synchronisation structure: " + e.getMessage());
+        }
+
+    }
+
+    @Nullable
+    private InstanceList readPTPClockInstances() {
+        return GenericTransactionUtils.readData(getNetconfNodeDataBroker(), LogicalDatastoreType.OPERATIONAL,
+                PTPINSTANCES_IID);
+    }
+
+    /*---------------------------------------------------------------
+     * Equipment related functions
+     */
+
+
+    @Override
+    public InventoryInformation getInventoryInformation() {
+        return this.getInventoryInformation(null);
+    }
+
+
+    @Override
+    public @Nonnull InventoryInformation getInventoryInformation(String layerProtocolFilter) {
+        LOG.debug("request inventory information. filter:" + layerProtocolFilter);
+        return this.equipment.getInventoryInformation(getFilteredInterfaceUuidsAsStringList(layerProtocolFilter));
+    }
+
+    /*---------------------------------------------------------------
+     * Other
+     */
+
+    @Override
+    protected List<String> getFilteredInterfaceUuidsAsStringList(String layerProtocolFilter) {
+        List<String> uuids = new ArrayList<>();
+
+        LOG.debug("request inventory information. filter:" + layerProtocolFilter);
+        if (optionalNe != null) {
+            // uuids
+            for (Lp lp : this.interfaceList) {
+                if (layerProtocolFilter == null || layerProtocolFilter.isEmpty()) {
+                    uuids.add(lp.getUuid().getValue());
+                } else if (lp.getLayerProtocolName() != null && lp.getLayerProtocolName().getValue() != null
+                        && lp.getLayerProtocolName().getValue().equals(layerProtocolFilter)) {
+                    uuids.add(lp.getUuid().getValue());
+                }
+            }
+        }
+        LOG.debug("uuids found: {}", uuids);
+        return uuids;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12Equipment.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12Equipment.java
new file mode 100644
index 0000000..205afc0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12Equipment.java
@@ -0,0 +1,293 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InventoryInformation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.Capabilities;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ValueNameList;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.GenericTransactionUtils;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc.OnfInterfacePac;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc.WrapperEquipmentPacRev170402;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.equipment.ExtendedEquipment;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.Equipment;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.EquipmentKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElement;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.equipment.g.ContainedHolder;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.manufactured.thing.g.EquipmentType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.manufactured.thing.g.ManufacturerProperties;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Contains equipment related information of ONFCore Network Element
+ */
+public class ONFCoreNetworkElement12Equipment {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElement12Equipment.class);
+
+    private static final UniversalId EQUIPMENTROOT = new UniversalId("network-element");
+    private static final int EQUIPMENTROOTLEVEL = 0;
+
+    private final ONFCOreNetworkElementCoreData coreData;
+    private final OnfInterfacePac equipmentPac;
+
+    private final ValueNameList extensionList;
+    private final List<UniversalId> topLevelEqUuidList;
+    private final List<ProblemNotificationXml> globalProblemList;
+    private final List<ExtendedEquipment> globalEquipmentList;
+
+    public ONFCoreNetworkElement12Equipment(ONFCOreNetworkElementCoreData coreData, Capabilities capabilities) {
+        LOG.debug("Initialize " + ONFCoreNetworkElement12Equipment.class.getName());
+        this.coreData = coreData;
+        if (capabilities.isSupportingNamespaceAndRevision(WrapperEquipmentPacRev170402.QNAME)) {
+            this.equipmentPac = new WrapperEquipmentPacRev170402(coreData);
+            LOG.debug("Equipement pac supported {}", WrapperEquipmentPacRev170402.QNAME);
+        } else {
+            this.equipmentPac = null;
+            LOG.debug("Equipement pac not supported {}", WrapperEquipmentPacRev170402.QNAME);
+        }
+
+        extensionList = new ValueNameList();
+        topLevelEqUuidList = new ArrayList<>();
+        globalProblemList = new ArrayList<>();
+        globalEquipmentList = new ArrayList<>();
+
+        initClassVars();
+    }
+
+    public void addProblemsofNode(List<ProblemNotificationXml> resultList) {
+        resultList.addAll(globalProblemList);
+    }
+
+    public List<ProblemNotificationXml> addProblemsofNodeObject(String uuidString) {
+        List<ProblemNotificationXml> res = new ArrayList<>();
+
+        if (this.equipmentPac != null) {
+            this.equipmentPac.readTheFaults(new UniversalId(uuidString), res);
+        }
+        return res;
+    }
+
+    public @Nonnull InventoryInformation getInventoryInformation(List<String> uuids) {
+        return getInventoryInformation(this.extensionList, uuids);
+    }
+
+    protected void readNetworkElementEquipment() {
+        doSyncNetworkElementEquipmentToClassVars();
+    }
+
+    public String getMountpoint() {
+        return coreData.getMountpoint();
+    }
+
+    public OnfInterfacePac getEquipmentPac() {
+        return equipmentPac;
+    }
+
+    public List<UniversalId> getTopLevelEqUuidList() {
+        return topLevelEqUuidList;
+    }
+
+    public List<ExtendedEquipment> getEquipmentList() {
+        return globalEquipmentList;
+    }
+
+    public List<Equipment> getEquipmentAll() {
+        List<Equipment> equipmentListAll = new ArrayList<>();
+
+        Equipment equipment = readEquipmentAll();
+        equipmentListAll.add(equipment);
+
+        return equipmentListAll;
+    }
+
+
+    /*
+     * --------------------------------------------------------------------------------- private
+     * functions
+     */
+
+    private void initClassVars() {
+        this.globalProblemList.clear();
+        this.globalEquipmentList.clear();
+        this.extensionList.clear();
+        this.topLevelEqUuidList.clear();
+    }
+
+    private void doSyncNetworkElementEquipmentToClassVars() {
+
+        NetworkElement optionalNe = coreData.getOptionalNetworkElement();
+        initClassVars();
+
+        if (optionalNe != null) {
+            // extract Inventory
+            extensionList.put(optionalNe.getExtension());
+
+            if (!extensionList.isEmpty()) {
+
+                /*
+                 * Loop through network element extension to get "top-level-equipment" <extension>
+                 * <value-name>top-level-equipment</value-name> <value>1.0.BKP,1.0.WCS</value> </extension> "ipv4"
+                 * address
+                 */
+                extensionList.getAsUniversalIdList("top-level-equipment", topLevelEqUuidList);
+
+                // If top-level-equipment exists get further information
+                if (topLevelEqUuidList.isEmpty()) {
+                    LOG.debug("no top level equipment found");
+                } else {
+                    // Read equipment and problems
+                    for (UniversalId uuid : topLevelEqUuidList) {
+                        recurseReadEquipmentProblems(uuid, EQUIPMENTROOT, EQUIPMENTROOTLEVEL, globalProblemList,
+                                globalEquipmentList);
+                    }
+                }
+            } else {
+                LOG.debug("extension list is null");
+            }
+        }
+    }
+
+    private void recurseReadEquipmentProblems(UniversalId uuid, UniversalId parentUuid, int treeLevel,
+            List<ProblemNotificationXml> problemList, List<ExtendedEquipment> equipmentList) {
+
+        if (uuid != null) {
+
+            Equipment equipment = this.readEquipment(uuid);
+
+            if (equipment != null) {
+                equipmentList.add(new ExtendedEquipment(parentUuid.getValue(), equipment, treeLevel));
+
+                if (this.equipmentPac != null) {
+                    this.equipmentPac.readTheFaults(uuid, problemList);
+
+                    List<ContainedHolder> containedHolderListe = equipment.getContainedHolder();
+                    if (containedHolderListe != null) {
+                        for (ContainedHolder containedHolder : containedHolderListe) {
+                            recurseReadEquipmentProblems(containedHolder.getOccupyingFru(), uuid, treeLevel + 1,
+                                    problemList, equipmentList);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private @Nonnull InventoryInformation getInventoryInformation(ValueNameList extensions, List<String> uuids) {
+
+        InventoryInformation inventoryInformation = new InventoryInformation();
+
+        // uuids
+        inventoryInformation.setInterfaceUuidList(uuids);
+
+        if (!extensions.isEmpty()) {
+
+            inventoryInformation.setDeviceIpv4(extensions.getOrNull("neIpAddress"));
+
+            // If top-level-equipment exists get further information
+            if (topLevelEqUuidList.isEmpty()) {
+                LOG.debug("no top level equipment found");
+            } else {
+                //
+                if (!globalEquipmentList.isEmpty()) {
+                    Equipment e = globalEquipmentList.get(0).getEquipment();
+                    if (e.getManufacturedThing() != null) {
+                        EquipmentType et;
+                        if ((et = e.getManufacturedThing().getEquipmentType()) != null) {
+                            inventoryInformation.setType(et.getTypeName());
+                            inventoryInformation.setModel(et.getModelIdentifier());
+                        }
+                        ManufacturerProperties em;
+                        if ((em = e.getManufacturedThing().getManufacturerProperties()) != null) {
+                            inventoryInformation.setVendor(em.getManufacturerIdentifier());
+                        }
+                    }
+                }
+            }
+        } else {
+            LOG.debug("extension list is null");
+        }
+
+        LOG.debug("Inventory: {}", inventoryInformation);
+        return inventoryInformation;
+
+    }
+
+
+    /**
+     * Read equipment information
+     *
+     * @param interfacePacUuid uuid as key for Equipment.
+     * @return Equipment or null
+     */
+    private @Nullable Equipment readEquipment(UniversalId interfacePacUuid) {
+
+        final Class<?> clazzPac = Equipment.class;
+
+        LOG.info("DBRead Get equipment for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        InstanceIdentifier<Equipment> equipmentIID =
+                InstanceIdentifier.builder(Equipment.class, new EquipmentKey(interfacePacUuid)).build();
+
+        Equipment res = GenericTransactionUtils.readData(coreData.getDataBroker(), LogicalDatastoreType.OPERATIONAL,
+                equipmentIID);
+
+        return res;
+    }
+
+    /**
+     * Read equipment information
+     *
+     * @param interfacePacUuid uuid as key for Equipment.
+     * @return Equipment or null
+     */
+    private @Nullable Equipment readEquipmentAll() {
+
+        final Class<?> clazzPac = Equipment.class;
+
+        LOG.info("DBRead Get all equipment for class {} from mountpoint {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint());
+
+        InstanceIdentifier<Equipment> equipmentIID = InstanceIdentifier.builder(Equipment.class).build();
+
+        Equipment res = GenericTransactionUtils.readData(coreData.getDataBroker(), LogicalDatastoreType.OPERATIONAL,
+                equipmentIID);
+
+        return res;
+    }
+
+    /**
+     * specific toString()
+     */
+    @Override
+    public String toString() {
+        return "ONFCoreNetworkElement12Equipment [coreData=" + coreData + ", equipmentPac=" + equipmentPac
+                + ", extensions=" + extensionList + ", topLevelEqUuidList=" + topLevelEqUuidList + ", problemList="
+                + globalProblemList + ", equipmentList=" + globalEquipmentList + "]";
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementBase.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementBase.java
new file mode 100644
index 0000000..e49ff65
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementBase.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf;
+
+import java.util.List;
+import javax.annotation.Nonnull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InventoryInformation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.Capabilities;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author herbert
+ *
+ */
+public abstract class ONFCoreNetworkElementBase implements AutoCloseable, ONFCoreNetworkElementRepresentation {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElementBase.class);
+
+    protected static final String EMPTY = "";
+
+    private final String mountPointNodeName;
+    private final DataBroker netconfNodeDataBroker;
+    private final Capabilities capabilities;
+    private final boolean isNetworkElementCurrentProblemsSupporting10;
+
+    private @Nonnull InventoryInformation inventoryInformation = new InventoryInformation();
+
+
+    protected ONFCoreNetworkElementBase(String mountPointNodeName, DataBroker netconfNodeDataBroker,
+            Capabilities capabilities) {
+        LOG.info("Create ONFCoreNetworkElementBase");
+        this.mountPointNodeName = mountPointNodeName;
+        this.netconfNodeDataBroker = netconfNodeDataBroker;
+        this.capabilities = capabilities;
+
+        this.isNetworkElementCurrentProblemsSupporting10 = false;
+
+    }
+
+    @Override
+    public String getMountPointNodeName() {
+        return mountPointNodeName;
+    }
+
+    /**
+     * @return the netconfNodeDataBroker
+     */
+    public DataBroker getNetconfNodeDataBroker() {
+        return netconfNodeDataBroker;
+    }
+
+    /**
+     * @return the capabilities
+     */
+    public Capabilities getCapabilities() {
+        return capabilities;
+    }
+
+    /**
+     * @return the isNetworkElementCurrentProblemsSupporting10
+     */
+    public boolean isNetworkElementCurrentProblemsSupporting10() {
+        return isNetworkElementCurrentProblemsSupporting10;
+    }
+
+    public void setInventoryInformation(InventoryInformation newInventoryInformation) {
+        this.inventoryInformation = newInventoryInformation;
+    }
+
+    @Override
+    public InventoryInformation getInventoryInformation() {
+        return getInventoryInformation(null);
+    }
+
+    @Override
+    public InventoryInformation getInventoryInformation(String layerProtocolFilter) {
+        InventoryInformation res = new InventoryInformation(inventoryInformation);
+        res.setInterfaceUuidList(getFilteredInterfaceUuidsAsStringList(layerProtocolFilter));
+
+        return res;
+    }
+
+    @Override
+    public void close() throws Exception {}
+
+    /*---------------------------------------------------------------
+     * Getter/ Setter
+     */
+
+    public String getMountpoint() {
+        return mountPointNodeName;
+    }
+
+    public DataBroker getDataBroker() {
+        return netconfNodeDataBroker;
+    }
+
+    /*-----------------------------------------------------------------------------
+     * Sychronization
+     */
+
+    @Override
+    public void initSynchronizationExtension() {}
+
+    protected @Nonnull abstract List<String> getFilteredInterfaceUuidsAsStringList(String layerProtocolFilter);
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementCallback.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementCallback.java
new file mode 100644
index 0000000..e681ee0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementCallback.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.AttributeValueChangedNotificationXml;
+
+public interface ONFCoreNetworkElementCallback {
+
+	public void notificationFromNeListener(AttributeValueChangedNotificationXml notificationXml);
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementFactory.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementFactory.java
new file mode 100644
index 0000000..3fc8b13
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementFactory.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf;
+
+import com.google.common.base.Optional;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.Capabilities;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.toggleAlarmFilter.NotificationDelayService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.ProviderClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.service.HtDatabaseEventsService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.WebSocketServiceClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.MaintenanceService;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Create a Network Element representation according to the capability
+ * information. The capabilities are more than an ODL-QName. After the ? other
+ * terms than "revision" are provided.
+ *
+ */
+public class ONFCoreNetworkElementFactory {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElementFactory.class);
+
+    @SuppressWarnings("deprecation")
+    public static @Nonnull ONFCoreNetworkElementRepresentation create(String mountPointNodeName, DataBroker dataBroker,
+            WebSocketServiceClient webSocketService, HtDatabaseEventsService databaseService,
+            InstanceIdentifier<Node> instanceIdentifier, DataBroker mountpointDataBroker, ProviderClient dcaeProvider,
+            @Nullable ProviderClient aotsmClient, MaintenanceService maintenanceService,
+            NotificationDelayService<ProblemNotificationXml> notificationDelayService) {
+
+        ONFCoreNetworkElementRepresentation res = null;
+        try (ReadOnlyTransaction tx = dataBroker.newReadOnlyTransaction();){
+            Optional<Node> nodeOption = tx.read(LogicalDatastoreType.OPERATIONAL, instanceIdentifier).checkedGet();
+            if (nodeOption.isPresent()) {
+                Node node = nodeOption.get();
+                NetconfNode nnode = node.augmentation(NetconfNode.class);
+                if (nnode != null) {
+                    ConnectionStatus csts = nnode.getConnectionStatus();
+                    if (csts == ConnectionStatus.Connected) {
+                        Capabilities capabilities = new Capabilities(nnode);
+                        LOG.info("Mountpoint {} capabilities {}", mountPointNodeName, capabilities);
+                        res = ONFCoreNetworkElement12.build(mountPointNodeName, capabilities, mountpointDataBroker,
+                                webSocketService, databaseService, dcaeProvider, aotsmClient, maintenanceService,
+                                notificationDelayService);
+                        LOG.info("ONFCoreNetworkElementRepresentation12 value is not null? " + (res != null));
+                    }
+                }
+            }
+            tx.close();
+        } catch (ReadFailedException | IllegalArgumentException e) {
+            LOG.warn("Can not generate specific NE Version representation. ", e);
+        }
+        if (res == null) {
+            res = new ONFCoreEmpty(mountPointNodeName);
+        }
+        LOG.info("Mointpoint {} started as {}", mountPointNodeName, res.getClass().getSimpleName());
+        return res;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementRepresentation.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementRepresentation.java
new file mode 100644
index 0000000..c4fc9d0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementRepresentation.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InventoryInformation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.AllPm;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.devicemonitor.impl.DeviceMonitoredNe;
+import org.opendaylight.controller.md.sal.binding.api.MountPoint;
+
+public interface ONFCoreNetworkElementRepresentation extends DeviceMonitoredNe {
+
+       /**
+        * Read during startup all relevant structure and status parameters from device.
+        * Remove all currentAlarms, read structure from networkElement with all interfacePacs, read current alarm status
+        */
+       public void initialReadFromNetworkElement();
+
+       public String getMountPointNodeName();
+
+       public void resetPMIterator();
+
+       public boolean hasNext();
+
+       public void next();
+
+       public AllPm getHistoricalPM();
+
+       public String pmStatusToString();
+
+       public int removeAllCurrentProblemsOfNode();
+
+       public void doRegisterMicrowaveEventListener(MountPoint mountPoint);
+
+       public void initSynchronizationExtension();
+
+       public InventoryInformation getInventoryInformation();
+
+       public InventoryInformation getInventoryInformation(String layerProtocolFilter);
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/AllPm.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/AllPm.java
new file mode 100644
index 0000000..196493c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/AllPm.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types.EsHistoricalPerformance15Minutes;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types.EsHistoricalPerformance24Hours;
+
+public class AllPm {
+
+    private final static AllPm EMPTY = new AllPm();
+
+    private final List<EsHistoricalPerformance15Minutes> pm15 = new ArrayList<>();
+    private final List<EsHistoricalPerformance24Hours> pm24 = new ArrayList<>();
+
+    public void add(EsHistoricalPerformance15Minutes pm) {
+        pm15.add(pm);
+    }
+
+    public void add(EsHistoricalPerformance24Hours pm) {
+        pm24.add(pm);
+    }
+
+    public List<EsHistoricalPerformance15Minutes> getPm15() {
+        return pm15;
+    }
+
+    public List<EsHistoricalPerformance24Hours> getPm24() {
+        return pm24;
+    }
+
+    public Object size() {
+        return pm15.size()+pm24.size();
+    }
+
+    public static AllPm getEmpty() {
+        return EMPTY;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/Capabilities.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/Capabilities.java
new file mode 100644
index 0000000..008a8fa
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/Capabilities.java
@@ -0,0 +1,173 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ * Convert capabilities of netconfnode into internal format. Boron and Carbon are providing
+ * different versions
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Optional;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Capabilities {
+
+    private static final Logger LOG = LoggerFactory.getLogger(Capabilities.class);
+    private static final String INTERFACE_AVAILABLECAPABILITY =
+            "org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapability";
+
+    private final List<String> capabilities = new ArrayList<>();
+    private final DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+
+    public Capabilities() {
+
+    }
+
+    public Capabilities(NetconfNode nnode) {
+        LOG.info("Create Capabilities constructor");
+
+        if (nnode != null) {
+            constructor(nnode.getAvailableCapabilities().getAvailableCapability());
+        }
+    }
+
+    /**
+     * Does all construction steps
+     *
+     * @param pcapabilities with a list of capabilities. <br>
+     *        Type could be <br>
+     *        - Boron: List<code><String></code> <br>
+     *        - Carbon: List<AvailableCapability>
+     */
+    private void constructor(List<?> pcapabilities) {
+        for (Object capability : pcapabilities) {
+            if (LOG.isTraceEnabled()) {
+                LOG.trace("capability class: {} Interfaces: {}", capability.getClass().getName(),
+                        Arrays.toString(capability.getClass().getInterfaces()));
+            }
+            if (capability instanceof String) { // ODL Boron specific
+                this.capabilities.add((String) capability);
+            } else if (hasInterface(capability, INTERFACE_AVAILABLECAPABILITY)) { // Carbon specific part .. handled via
+                                                                                  // generic
+                try {
+                    Method method = capability.getClass().getDeclaredMethod("getCapability");
+                    this.capabilities.add(method.invoke(capability).toString());
+                } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException
+                        | InvocationTargetException e) {
+                    LOG.warn("Unknown capability class leads to a problem", e);
+                }
+            } else {
+                LOG.warn("Unknown capability class: {}", capability.getClass(),
+                        Arrays.toString(capability.getClass().getInterfaces()));
+            }
+        }
+    }
+
+    /**
+     * check if namespace is supported by given capabilites
+     *
+     * @param theCapability Capability to search
+     * @return true if available
+     */
+    @Deprecated
+    public boolean isSupportingNamespace(QName theCapability) {
+        String theNameSpace = theCapability.getNamespace().toString();
+        for (String capability : capabilities) {
+            if (capability.contains(theNameSpace)) {
+                LOG.trace("Check {} against {}", capability, theNameSpace);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * check if the namespace and its revision are supported by the given capabilities
+     *
+     * @param qCapability capability from the model
+     * @return true if supporting the model
+     */
+    public boolean isSupportingNamespaceAndRevision(QName qCapability) {
+        String namespace = qCapability.getNamespace().toString();
+        String revision;
+        Object revisionObject = qCapability.getRevision();
+        if (revisionObject instanceof Optional) {
+            if (((Optional<?>) revisionObject).isPresent()) {
+                revisionObject = ((Optional<?>) revisionObject).get();
+                LOG.info("Unwrapp Optional: {}", revisionObject.getClass());
+            }
+        }
+        if (revisionObject instanceof String) {
+            revision = (String) revisionObject;
+        } else if (revisionObject instanceof Date) {
+            revision = formatter.format((Date) revisionObject);
+        } else {
+            revision = revisionObject.toString();
+            LOG.warn("Revision number type not supported. Class:{} String:{}", revisionObject.getClass().getName(),
+                    revisionObject);
+        }
+        for (String capability : capabilities) {
+            if (capability.contains(namespace) && capability.contains(revision)) {
+                LOG.trace("Model namespace {}?[revision {}]", namespace, revision);
+                return true;
+            }
+        }
+        return false;
+    }
+
+
+    public void add(String qname) {
+        capabilities.add(qname);
+    }
+
+    @Override
+    public String toString() {
+        return "Capabilities [capabilities=" + capabilities + "]";
+    }
+
+    /**
+     * Check if object is proxy and has specific interface
+     *
+     * @param object Name of the object to verify
+     * @param interfaceName is the name of the interface
+     * @return boolean accordingly
+     */
+    static boolean hasInterface(Object object, String interfaceName) {
+        if (object instanceof Proxy) {
+            Class<?>[] interfaces = object.getClass().getInterfaces();
+            for (Class<?> i : interfaces) {
+                if (i.getName().equals(interfaceName)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/ExtendedAirInterfaceHistoricalPerformanceType12.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/ExtendedAirInterfaceHistoricalPerformanceType12.java
new file mode 100644
index 0000000..470ddab
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/ExtendedAirInterfaceHistoricalPerformanceType12.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.LinkIdentifyingObject;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.GranularityPeriodType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.ObjectIdentifier;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.OtnHistoryDataG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.AirInterfaceConfigurationG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.AirInterfaceHistoricalPerformanceTypeG;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
+
+public class ExtendedAirInterfaceHistoricalPerformanceType12 implements OtnHistoryDataG, LinkIdentifyingObject {
+
+    private final AirInterfaceHistoricalPerformanceTypeG airInterfaceHistoricalPerformanceType;
+    private final AirInterfaceConfigurationG airInterfaceConfiguration;
+
+    public ExtendedAirInterfaceHistoricalPerformanceType12(AirInterfaceHistoricalPerformanceTypeG data, AirInterfaceConfigurationG conf) {
+        this.airInterfaceHistoricalPerformanceType = data;
+        this.airInterfaceConfiguration = conf;
+    }
+
+
+    public AirInterfaceHistoricalPerformanceTypeG getAirInterfaceHistoricalPerformanceType() {
+        return airInterfaceHistoricalPerformanceType;
+    }
+
+
+    public AirInterfaceConfigurationG getAirInterfaceConfiguration() {
+        return airInterfaceConfiguration;
+    }
+
+
+    @Override
+    public Class<? extends DataContainer> getImplementedInterface() {
+        return airInterfaceHistoricalPerformanceType.getImplementedInterface();
+    }
+
+    @Override
+    public String getHistoryDataId() {
+        return airInterfaceHistoricalPerformanceType.getHistoryDataId();
+    }
+
+    @Override
+    public DateAndTime getPeriodEndTime() {
+        return airInterfaceHistoricalPerformanceType.getPeriodEndTime();
+    }
+
+
+    @Override
+    public GranularityPeriodType getGranularityPeriod() {
+        return airInterfaceHistoricalPerformanceType.getGranularityPeriod();
+    }
+
+
+     @Override
+    public ObjectIdentifier getObjectClass() {
+        return airInterfaceHistoricalPerformanceType.getObjectClass();
+    }
+
+
+    @Override
+    public ObjectIdentifier getNameBinding() {
+        return airInterfaceHistoricalPerformanceType.getNameBinding();
+    }
+
+    @Override
+    public Boolean isSuspectIntervalFlag() {
+        return airInterfaceHistoricalPerformanceType.isSuspectIntervalFlag();
+    }
+
+    @Override
+    public String getSignalId() {
+        return airInterfaceConfiguration.getRadioSignalId();
+    }
+
+
+    @Override
+    public String toString() {
+        return "ExtendedAirInterfaceHistoricalPerformanceType [airInterfaceHistoricalPerformanceType="
+                + airInterfaceHistoricalPerformanceType + ", airInterfaceConfiguration=" + airInterfaceConfiguration
+                + "]";
+    }
+
+
+
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/ExtendedAirInterfaceHistoricalPerformanceType1211.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/ExtendedAirInterfaceHistoricalPerformanceType1211.java
new file mode 100644
index 0000000..115e20e
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/ExtendedAirInterfaceHistoricalPerformanceType1211.java
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.LinkIdentifyingObject;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.GranularityPeriodType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.ObjectIdentifier;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.OtnHistoryDataG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.AirInterfaceConfigurationG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.AirInterfaceHistoricalPerformanceTypeG;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
+
+public class ExtendedAirInterfaceHistoricalPerformanceType1211 implements OtnHistoryDataG, LinkIdentifyingObject {
+
+    private final AirInterfaceHistoricalPerformanceTypeG airInterfaceHistoricalPerformanceType;
+    private final AirInterfaceConfigurationG airInterfaceConfiguration;
+
+    public ExtendedAirInterfaceHistoricalPerformanceType1211(AirInterfaceHistoricalPerformanceTypeG data, AirInterfaceConfigurationG conf) {
+        this.airInterfaceHistoricalPerformanceType = data;
+        this.airInterfaceConfiguration = conf;
+    }
+
+
+    public AirInterfaceHistoricalPerformanceTypeG getAirInterfaceHistoricalPerformanceType() {
+        return airInterfaceHistoricalPerformanceType;
+    }
+
+
+    public AirInterfaceConfigurationG getAirInterfaceConfiguration() {
+        return airInterfaceConfiguration;
+    }
+
+
+    @Override
+    public Class<? extends DataContainer> getImplementedInterface() {
+        return airInterfaceHistoricalPerformanceType.getImplementedInterface();
+    }
+
+    @Override
+    public String getHistoryDataId() {
+        return airInterfaceHistoricalPerformanceType.getHistoryDataId();
+    }
+
+    @Override
+    public DateAndTime getPeriodEndTime() {
+        return airInterfaceHistoricalPerformanceType.getPeriodEndTime();
+    }
+
+
+    @Override
+    public GranularityPeriodType getGranularityPeriod() {
+        return airInterfaceHistoricalPerformanceType.getGranularityPeriod();
+    }
+
+
+     @Override
+    public ObjectIdentifier getObjectClass() {
+        return airInterfaceHistoricalPerformanceType.getObjectClass();
+    }
+
+
+    @Override
+    public ObjectIdentifier getNameBinding() {
+        return airInterfaceHistoricalPerformanceType.getNameBinding();
+    }
+
+    @Override
+    public Boolean isSuspectIntervalFlag() {
+        return airInterfaceHistoricalPerformanceType.isSuspectIntervalFlag();
+    }
+
+    @SuppressWarnings("deprecation")
+    @Override
+    public String getSignalId() {
+        return airInterfaceConfiguration.getRadioSignalId();
+    }
+
+
+    @Override
+    public String toString() {
+        return "ExtendedAirInterfaceHistoricalPerformanceType [airInterfaceHistoricalPerformanceType="
+                + airInterfaceHistoricalPerformanceType + ", airInterfaceConfiguration=" + airInterfaceConfiguration
+                + "]";
+    }
+
+
+
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/ExtendedAirInterfaceHistoricalPerformanceType1211p.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/ExtendedAirInterfaceHistoricalPerformanceType1211p.java
new file mode 100644
index 0000000..abac75f
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/ExtendedAirInterfaceHistoricalPerformanceType1211p.java
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.LinkIdentifyingObject;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.GranularityPeriodType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.ObjectIdentifier;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.OtnHistoryDataG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.AirInterfaceConfigurationG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.AirInterfaceHistoricalPerformanceTypeG;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
+
+public class ExtendedAirInterfaceHistoricalPerformanceType1211p implements OtnHistoryDataG, LinkIdentifyingObject {
+
+    private final AirInterfaceHistoricalPerformanceTypeG airInterfaceHistoricalPerformanceType;
+    private final AirInterfaceConfigurationG airInterfaceConfiguration;
+
+    public ExtendedAirInterfaceHistoricalPerformanceType1211p(AirInterfaceHistoricalPerformanceTypeG data, AirInterfaceConfigurationG conf) {
+        this.airInterfaceHistoricalPerformanceType = data;
+        this.airInterfaceConfiguration = conf;
+    }
+
+
+    public AirInterfaceHistoricalPerformanceTypeG getAirInterfaceHistoricalPerformanceType() {
+        return airInterfaceHistoricalPerformanceType;
+    }
+
+
+    public AirInterfaceConfigurationG getAirInterfaceConfiguration() {
+        return airInterfaceConfiguration;
+    }
+
+
+    @Override
+    public Class<? extends DataContainer> getImplementedInterface() {
+        return airInterfaceHistoricalPerformanceType.getImplementedInterface();
+    }
+
+    @Override
+    public String getHistoryDataId() {
+        return airInterfaceHistoricalPerformanceType.getHistoryDataId();
+    }
+
+    @Override
+    public DateAndTime getPeriodEndTime() {
+        return airInterfaceHistoricalPerformanceType.getPeriodEndTime();
+    }
+
+
+    @Override
+    public GranularityPeriodType getGranularityPeriod() {
+        return airInterfaceHistoricalPerformanceType.getGranularityPeriod();
+    }
+
+
+     @Override
+    public ObjectIdentifier getObjectClass() {
+        return airInterfaceHistoricalPerformanceType.getObjectClass();
+    }
+
+
+    @Override
+    public ObjectIdentifier getNameBinding() {
+        return airInterfaceHistoricalPerformanceType.getNameBinding();
+    }
+
+    @Override
+    public Boolean isSuspectIntervalFlag() {
+        return airInterfaceHistoricalPerformanceType.isSuspectIntervalFlag();
+    }
+
+    @SuppressWarnings("deprecation")
+    @Override
+    public String getSignalId() {
+        return airInterfaceConfiguration.getRadioSignalId();
+    }
+
+
+    @Override
+    public String toString() {
+        return "ExtendedAirInterfaceHistoricalPerformanceType [airInterfaceHistoricalPerformanceType="
+                + airInterfaceHistoricalPerformanceType + ", airInterfaceConfiguration=" + airInterfaceConfiguration
+                + "]";
+    }
+
+
+
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/ONFLayerProtocolName.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/ONFLayerProtocolName.java
new file mode 100644
index 0000000..ece7e7a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/ONFLayerProtocolName.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public enum ONFLayerProtocolName {
+
+    MWAirInterface("MWPS"),                    //V1.0 + V1.2
+    EthernetContainer10("ETH-CTP"),            //V1.0
+    EthernetContainer12("ETC"),                //V1.2 + V1.2.1.1
+    EthernetPhysical("ETY"),                //V1.2
+    TDMContainer("TDM"),                    //V1.2
+    Structure("MWS"),                        //V1.0 + V1.2
+    Ethernet("ETH"),                        //V1.2
+    Unknown("");
+
+    private static final Logger LOG = LoggerFactory.getLogger(ONFLayerProtocolName.class);
+
+    private final String myLayerProtocolName;
+
+    ONFLayerProtocolName( String myLayerProtocolName ) {
+        this.myLayerProtocolName = myLayerProtocolName;
+    }
+
+    public boolean is( org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.LayerProtocolName onfName ) {
+        return myLayerProtocolName.equals(onfName.getValue());
+    }
+
+    public static ONFLayerProtocolName valueOf( org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.LayerProtocolName onfName ) {
+        for (ONFLayerProtocolName protocol : ONFLayerProtocolName.values()) {
+            if (protocol.is(onfName)) {
+                return protocol;
+            }
+        }
+        LOG.info("Can not map {}. Use Unknown",onfName.getValue() );
+        return Unknown;
+    }
+
+}
+
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/ValueNameList.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/ValueNameList.java
new file mode 100644
index 0000000..1e0156c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/ValueNameList.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container;
+
+import java.util.HashMap;
+import java.util.List;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.extension.g.Extension;
+
+/**
+ * ValueNameList is an access Wrapper to NETCONF Extension lists
+ * Class is a specialized HashMap.
+ */
+public class ValueNameList extends HashMap<String, String> {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Create ValueNameList for NETCONF extensions
+	 * @param extensionList Parameters as received from device. Could be null.
+	 */
+	public void put(@Nullable List<Extension> extensionList) {
+
+		if (extensionList != null) {
+			String name;
+			String value;
+
+			for (Extension e : extensionList) {
+				name = e.getValueName();
+				value = e.getValue();
+				if (name != null && value != null) {
+					put(name, value);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Return value or null
+	 * @param name key for element
+	 * @return value if key exists; if not nul
+	 */
+	public String getOrNull(String name) {
+		return containsKey(name) ? get(name) : null;
+	}
+
+	/**
+	 * Get element as id list
+	 * @param name key of element
+	 * @param topLevelEqUuidList as input to add elements
+	 * @return List<UniversalId>
+	 */
+	public  @Nonnull List<UniversalId> getAsUniversalIdList(String name, List<UniversalId> topLevelEqUuidList) {
+		if (containsKey(name)) {
+			String[] result = get(name).split(",\\s*");
+			if (result.length > 0) {
+				for (String e : result) {
+					topLevelEqUuidList.add(new UniversalId(e));
+				}
+			}
+		}
+		return topLevelEqUuidList;
+	}
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/util/GenericTransactionUtils.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/util/GenericTransactionUtils.java
new file mode 100644
index 0000000..83063a0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/util/GenericTransactionUtils.java
@@ -0,0 +1,164 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util;
+
+import java.util.NoSuchElementException;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
+import javax.annotation.Nullable;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.util.concurrent.CheckedFuture;
+
+@SuppressWarnings("deprecation")
+public final class GenericTransactionUtils {
+    static final Logger LOG = LoggerFactory.getLogger(GenericTransactionUtils.class);
+
+    public static <T extends DataObject> boolean writeData(DataBroker dataBroker,
+            LogicalDatastoreType logicalDatastoreType, InstanceIdentifier<T> iid, T dataObject, boolean isAdd) {
+        Preconditions.checkNotNull(dataBroker);
+        WriteTransaction modification = dataBroker.newWriteOnlyTransaction();
+        if (isAdd) {
+            if (dataObject == null) {
+                LOG.warn("Invalid attempt to add a non-existent object to path {}", iid);
+                return false;
+            }
+            modification.merge(logicalDatastoreType, iid, dataObject, true /* createMissingParents */);
+        } else {
+            modification.delete(LogicalDatastoreType.CONFIGURATION, iid);
+        }
+        CheckedFuture<Void, TransactionCommitFailedException> commitFuture = modification.submit();
+        try {
+            commitFuture.checkedGet();
+            LOG.debug("Transaction success for {} of object {}", isAdd ? "add" : "delete", dataObject);
+            return true;
+        } catch (Exception e) {
+            LOG.warn("Transaction failed with error {} for {} of object {}", e.getMessage(), isAdd ? "add" : "delete",
+                    dataObject);
+            modification.cancel();
+            return false;
+        }
+    }
+
+    /**
+     * Deliver the data back or null. Warning
+     *
+     * @param <T> SubType of the DataObject to be handled
+     * @param dataBroker for accessing data
+     * @param dataStoreType to address datastore
+     * @param iid id to access data
+     * @return null or object
+     */
+    @Nullable
+    public static <T extends DataObject> T readData(DataBroker dataBroker, LogicalDatastoreType dataStoreType,
+            InstanceIdentifier<T> iid) {
+
+        AtomicBoolean noErrorIndication = new AtomicBoolean();
+        AtomicReference<String> statusText = new AtomicReference<>();
+
+        T obj = readDataOptionalWithStatus(dataBroker, dataStoreType, iid, noErrorIndication, statusText);
+
+        if (!noErrorIndication.get()) {
+            LOG.warn("Read transaction for identifier " + iid + " failed with status " + statusText.get());
+        }
+
+        return obj;
+    }
+
+    /**
+     * Deliver the data back or null
+     *
+     * @param <T> SubType of the DataObject to be handled
+     * @param dataBroker for accessing data
+     * @param dataStoreType to address datastore
+     * @param iid id to access data
+     * @param noErrorIndication (Output) true if data could be read and are available and is not null
+     * @param statusIndicator (Output) String with status indications during the read.
+     * @return null or object
+     */
+    @Nullable
+    public static <T extends DataObject> T readDataOptionalWithStatus(DataBroker dataBroker,
+            LogicalDatastoreType dataStoreType, InstanceIdentifier<T> iid, AtomicBoolean noErrorIndication,
+            AtomicReference<String> statusIndicator) {
+
+        T data = null;
+        noErrorIndication.set(false);
+
+        statusIndicator.set("Preconditions");
+        Preconditions.checkNotNull(dataBroker);
+
+        int retry = 0;
+        int retryDelayMilliseconds = 2000;
+        int maxRetries = 5; // 0 no Retry
+
+        do {
+            if (retry > 0) {
+                try {
+                    LOG.debug("Sleep {}ms", retryDelayMilliseconds);
+                    Thread.sleep(retryDelayMilliseconds);
+                } catch (InterruptedException e) {
+                    LOG.debug("Sleep interrupted", e);
+                    Thread.currentThread().interrupt();
+                }
+            }
+
+            LOG.debug("Sending message with retry {} ", retry);
+            statusIndicator.set("Create Read Transaction");
+
+            try (ReadOnlyTransaction readTransaction = dataBroker.newReadOnlyTransaction();) {
+                CheckedFuture<Optional<T>, ReadFailedException> od = readTransaction.read(dataStoreType, iid);
+                statusIndicator.set("Read done");
+                if (od != null) {
+                    statusIndicator.set("Unwrap checkFuture done");
+                    Optional<T> optionalData = od.get();
+                    if (optionalData != null) {
+                        statusIndicator.set("Unwrap optional done");
+                        data = optionalData.orNull();
+                        statusIndicator.set("Read transaction done");
+                        noErrorIndication.set(true);
+                    }
+                }
+
+                readTransaction.close();
+            } catch (CancellationException | ExecutionException | InterruptedException | NoSuchElementException e) {
+                statusIndicator.set(ExceptionUtils.getStackTrace(e));
+                if (e instanceof InterruptedException) {
+                    Thread.currentThread().interrupt();
+                }
+            }
+
+        } while (noErrorIndication.get() == false && retry++ < maxRetries);
+
+        return data;
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/util/LinkIdentifyingObject.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/util/LinkIdentifyingObject.java
new file mode 100644
index 0000000..7c4f7e1
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/util/LinkIdentifyingObject.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util;
+
+public interface LinkIdentifyingObject {
+
+    public String getSignalId();
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/util/NetconfTimeStamp.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/util/NetconfTimeStamp.java
new file mode 100644
index 0000000..a9e451a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/util/NetconfTimeStamp.java
@@ -0,0 +1,255 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Function is handling the NETCONF and the format used by database and restconf communication.
+ *
+ * Input supported for the formats used in NETCONF messages:
+ *
+ * Format1 ISO 8601 2017-01-18T11:44:49.482-05:00
+ *
+ * Format2 NETCONF - pattern from ietf-yang-types "2013-07-15" Pattern:
+ * "\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[\+\-](\d{2}):(\d{2}))"
+ *
+ * Format3 NETCONF DateAndTime CoreModel-CoreFoundationModule-TypeDefinitions vom
+ * 2016-07-01 Example1: 20170118114449.1Z Example2: 20170118114449.1-0500 Pattern:
+ * "\d{4}\d{2}\d{2}\d{2}\d{2}\d{2}.\d+?(Z|[\+\-](\d{2})(\d{2}))" typedef DateAndTime { description
+ * "This primitive type defines the date and time according to the following structure:
+ * 'yyyyMMddhhmmss.s[Z|{+|-}HHMm]' where: yyyy '0000'..'9999' year MM '01'..'12' month dd '01'..'31'
+ * day hh '00'..'23' hour mm '00'..'59' minute ss '00'..'59' second s '.0'..'.9' tenth of second
+ * (set to '.0' if EMS or NE cannot support this granularity) Z 'Z' indicates UTC (rather than local
+ * time) {+|-} '+' or '-' delta from UTC HH '00'..'23' time zone difference in hours Mm '00'..'59'
+ * time zone difference in minutes."; type string; } Format4 E/// specific Example1:
+ * 2017-01-23T13:32:38-05:00 Example2: 2017-01-23T13:32-05:00
+ *
+ * Input formats netconfTime as String according the formats given above
+ *
+ * Return format is String in ISO8601 Format for database and presentation.
+ *
+ * Example formats:
+ *    1) ISO8601. Example 2017-01-18T11:44:49.482-05:00
+ *    2) Microwave ONF. Examples 20170118114449.1Z, 20170118114449.1-0500
+ *    3.1) Ericson. Example: 2017-01-23T13:32:38-05:00
+ *    3.2) Ericson. Example: 2017-01-23T13:32-05:00
+ *          Always 10 Groups,
+ *          1:Year 2:Month 3:day 4:Hour 5:minute 6:optional sec 7:optional ms 8:optional Z or 9:offset
+ *           signedhour 10:min
+ *
+ * Template:
+ *     private static final NetconfTimeStamp NETCONFTIME_CONVERTER = NetconfTimeStamp.getConverter();
+ */
+
+public class NetconfTimeStamp {
+    private static final Logger LOG = LoggerFactory.getLogger(NetconfTimeStamp.class);
+
+    private static final NetconfTimeStamp CONVERTER = new NetconfTimeStamp();
+
+    private final SimpleDateFormat dateFormatResult = init("yyyy-MM-dd'T'HH:mm:ss.S'Z'", TimeZone.getTimeZone("GMT"));
+    private final SimpleDateFormat dateFormatConvert = init("yyyy-MM-dd HH:mm:ss.S", TimeZone.getTimeZone("GMT"));
+    private static int MILLISECONDSDIGITS = 3; // Digits of milliseconds in dateFormatResult
+    private static String MILLISECONDZEROS = "000"; // String with zeros for milliseconds in dateFormatResult
+    private static final Pattern dateNetconfPatter = Pattern.compile(
+        "(\\d{4})-?(\\d{2})-?(\\d{2})T?(\\d{2}):?(\\d{2})(?:(?::?)(\\d{2}))?(?:.(\\d+))?(?:(Z)|([+-]\\d{2}):?(\\d{2}))");
+
+    /*
+     * ------------------------------------ Public function
+     */
+
+    /**
+     * Use static access
+     */
+    private NetconfTimeStamp() {
+    }
+
+    /**
+     * Use this function to get the converter
+     * @return global converter
+     */
+    public static NetconfTimeStamp getConverter() {
+        return CONVERTER;
+    }
+
+    /**
+     * Get actual timestamp as NETCONF specific type NETCONF/YANG 1.0 Format
+     *
+     * @return String with Date in NETCONF/YANG Format Version 1.0.
+     */
+    public String getTimeStampAsNetconfString() {
+        return getRightFormattedDate(new Date().getTime());
+    }
+
+    /**
+     * Get actual timestamp as NETCONF specific type NETCONF/YANG 1.0 Format in GMT
+     *
+     * @return DateAndTime Type 1.0. Date in NETCONF/YANG Format Version 1.0.
+     */
+    public DateAndTime getTimeStamp() {
+        return DateAndTime.getDefaultInstance(getTimeStampAsNetconfString());
+    }
+
+
+    /**
+     * Return the String with a NETCONF time converted to long
+     *
+     * @param netconfTime as String according the formats given above
+     * @return Epoch milliseconds
+     * @throws IllegalArgumentException In case of no compliant time format definition for the string
+     * @throws ParseException Time parsing failed
+     */
+    public long getTimeStampFromNetconfAsMilliseconds(String netconfTime)
+            throws IllegalArgumentException, ParseException {
+        Matcher m = dateNetconfPatter.matcher(netconfTime);
+        // According to spezified matches there have to be 10 parameter
+        if (m.matches() && m.groupCount() == 10) {
+            // Convert now
+            long utcMillis = dateFormatConvert.parse(getTimeAsNormalizedString(m, m.group(6), m.group(7))).getTime()
+                    - getTimezoneOffsetMilliseconds(m.group(9), m.group(10));
+            return utcMillis;
+        } else {
+            throw new IllegalArgumentException("No pattern for NETCONF data string: " + netconfTime);
+        }
+    }
+
+    /**
+     * Deliver String result.
+     *
+     * @param netconfTime as String according the formats given above
+     * @return If successful: String in ISO8601 Format for database and presentation. If "wrong formed
+     *         input" the Input string with the prefix "Mailformed date" is delivered back.
+     */
+    public String getTimeStampFromNetconf(String netconfTime) {
+        Matcher m = dateNetconfPatter.matcher(netconfTime);
+        // According to spezified matches there have to be 10 parameter
+        if (m.matches() && m.groupCount() == 10) {
+            // Convert now
+            try {
+                long utcMillis = dateFormatConvert.parse(getTimeAsNormalizedString(m, m.group(6), m.group(7))).getTime()
+                        - getTimezoneOffsetMilliseconds(m.group(9), m.group(10));
+                return getRightFormattedDate(utcMillis);
+            } catch (ParseException e) {
+                LOG.info(e.getMessage());
+            } catch (IllegalArgumentException e) {
+                LOG.info(e.getMessage());
+            }
+        }
+        LOG.debug("No pattern for NETCONF data string: {}", netconfTime);
+        return "Malformed date: " + netconfTime; // Error handling
+    }
+
+    /*-------------------------------------------
+     * Private and static functions
+     */
+    /**
+     * Convert timeZone parameter in format [+-]/d/d:/d/d into milliseconds
+     *
+     * @param m Index 9 with "+/-" and hour string or null for UTZ, Index 10 with minutes
+     * @return long milliseconds of TimeZoneOffset
+     * @throws IllegalArgumentException If parameters are wrong
+     */
+    private static long getTimezoneOffsetMilliseconds(String timeZoneHour, String timeZoneMinute)
+            throws IllegalArgumentException {
+        // -- Calculate timezone specific offset
+        long timeZoneOffsetMilliseconds = 0;
+        if (timeZoneHour != null) {
+            // Time zone offset in hours and minutes
+            int tzHour = 0;
+            int tzMinutes = 0;
+            tzHour = Integer.valueOf(timeZoneHour);
+            if (timeZoneMinute != null) {
+                tzMinutes = Integer.valueOf(timeZoneMinute);
+            } else {
+                throw new IllegalArgumentException("Problem in Netconf Time format timeZone minutes parameter.");
+            }
+            timeZoneOffsetMilliseconds = (tzHour * 60 + (tzHour > 0 ? tzMinutes : -tzMinutes)) * 60000L;
+        }
+        return timeZoneOffsetMilliseconds;
+    }
+
+    /**
+     * Convert parameters to String with year .. minutes and optional Seconds and .. milliseconds
+     *
+     * @param m Matcher with parsed date
+     * @param secString Seconds as String or null
+     * @param msString Milliseconds as String or null
+     * @return Normalized time string
+     */
+    private static String getTimeAsNormalizedString(Matcher m, String secString, String msString) {
+        // -- Create time as normalized string
+        StringBuffer sb = new StringBuffer();
+        sb.append(m.group(1)); // year
+        sb.append('-');
+        sb.append(m.group(2)); // Month
+        sb.append('-');
+        sb.append(m.group(3)); // Day
+        sb.append(' ');
+        sb.append(m.group(4)); // Hour 0-23
+        sb.append(':');
+        sb.append(m.group(5)); // Minute
+        sb.append(':');
+        sb.append(secString != null ? secString : "00"); // Seconds (optional)
+        sb.append('.');
+        if (msString == null) { // Milliseconds optional
+            sb.append(MILLISECONDZEROS);
+        } else if (msString.length() <= MILLISECONDSDIGITS) {
+            sb.append(msString); // Millisecond
+            sb.append(MILLISECONDZEROS.substring(0, MILLISECONDSDIGITS - msString.length()));
+        } else {
+            sb.append(msString.substring(0, MILLISECONDSDIGITS)); // Only first Three
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Deliver format in a way that milliseconds are correct.
+     *
+     * @param dateMillis Date as milliseconds in Java definition
+     * @return String
+     */
+    private String getRightFormattedDate(long dateMillis) {
+        long tenthOfSeconds = dateMillis % 1000 / 100L; // Extract 100 milliseconds
+        long base = dateMillis / 1000L * 1000L; // Cut milliseconds to 000
+        Date newDate = new Date(base + tenthOfSeconds);
+        return dateFormatResult.format(newDate);
+    }
+
+    /**
+     * Static initialization
+     */
+    private static SimpleDateFormat init(String format, TimeZone zone) {
+        if (zone == null) {
+            throw new ExceptionInInitializerError();
+        } else {
+            SimpleDateFormat dateFormat;
+            dateFormat = new SimpleDateFormat(format);
+            dateFormat.setTimeZone(zone);
+            return dateFormat;
+        }
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/OnfInterfacePac.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/OnfInterfacePac.java
new file mode 100644
index 0000000..e26d997
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/OnfInterfacePac.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc;
+
+import java.util.List;
+
+import javax.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+
+public interface OnfInterfacePac {
+
+    /**
+     * Read problems of specific interfaces. TODO Goal for future implementation
+     * without usage of explicit new. Key is generated by newInstance() function
+     * here to verify this approach.
+     *
+     * @param interfacePacUuid Universal index of Interfacepac
+     * @param resultList List to add fault. If null new list is created.
+     * @return list of alarms
+     */
+    public List<ProblemNotificationXml> readTheFaults(UniversalId interfacePacUuid,  @Nullable List<ProblemNotificationXml> resultList);
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/OnfMicrowaveModel.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/OnfMicrowaveModel.java
new file mode 100644
index 0000000..637caa4
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/OnfMicrowaveModel.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc;
+
+import java.util.List;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCOreNetworkElementCoreData;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ONFLayerProtocolName;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.Lp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.OtnHistoryDataG;
+import org.opendaylight.yangtools.yang.binding.NotificationListener;
+import org.opendaylight.yangtools.yang.common.QName;
+
+public interface OnfMicrowaveModel {
+
+    public void setCoreData(ONFCOreNetworkElementCoreData coreData);
+
+	public void readTheFaultsOfMicrowaveModel(ONFLayerProtocolName lpName, Class<?> lpClass, UniversalId uuid,
+			List<ProblemNotificationXml> resultList);
+
+	public List<? extends OtnHistoryDataG> readTheHistoricalPerformanceData(ONFLayerProtocolName lpName, Lp lp);
+
+	public Class<?> getClassForLtpExtension(QName qName);
+
+	public <T extends NotificationListener> T getNotificationListener();
+
+	public void setOnfMicrowaveModelListener(OnfMicrowaveModelNotification microwaveModelListener);
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/OnfMicrowaveModelNotification.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/OnfMicrowaveModelNotification.java
new file mode 100644
index 0000000..2c7aead
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/OnfMicrowaveModelNotification.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.AttributeValueChangedNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectCreationNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectDeletionNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+
+/**
+ * Abstraction of YANG specified notifications
+ * Each method converts from internal specific class to model unspecific class
+ * @author herbert
+ *
+ */
+public interface OnfMicrowaveModelNotification {
+
+	void onObjectCreationNotification(ObjectCreationNotificationXml notificationXml);
+    void onObjectDeletionNotification(ObjectDeletionNotificationXml notificationXml);
+    void onProblemNotification(ProblemNotificationXml notificationXml);
+    void onAttributeValueChangedNotification(AttributeValueChangedNotificationXml notificationXml);
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperEquipmentPacRev170402.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperEquipmentPacRev170402.java
new file mode 100644
index 0000000..03e830e
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperEquipmentPacRev170402.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.List;
+import javax.annotation.Nullable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalDateAndTime;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalSeverity;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCOreNetworkElementCoreData;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.GenericTransactionUtils;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.CurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.EquipmentPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.EquipmentPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.equipment.pac.EquipmentCurrentProblems;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.QName;
+
+public class WrapperEquipmentPacRev170402 implements OnfInterfacePac {
+
+    private static final Logger LOG = LoggerFactory.getLogger(WrapperEquipmentPacRev170402.class);
+    public static final QName QNAME = EquipmentPac.QNAME;
+
+    ONFCOreNetworkElementCoreData coreData;
+
+    public WrapperEquipmentPacRev170402(ONFCOreNetworkElementCoreData coreData) {
+        this.coreData = coreData;
+    }
+
+    /**
+     * Read problems of specific interfaces. TODO Goal for future implementation without usage of
+     * explicit new. Key is generated by newInstance() function here to verify this approach.
+     *
+     * @param interfacePacUuid Universal index of onf interface-pac
+     * @param resultList list to add, or null for new list.
+     * @return list of alarms
+     */
+    @Override
+    public List<ProblemNotificationXml> readTheFaults(UniversalId interfacePacUuid,
+            List<ProblemNotificationXml> resultList) {
+
+        final Class<EquipmentPac> clazzPac = EquipmentPac.class;
+        final Class<EquipmentPacKey> clazzPacKey = EquipmentPacKey.class;
+        final Class<EquipmentCurrentProblems> clazzProblems = EquipmentCurrentProblems.class;
+        // final Class<ContainerCurrentProblemTypeG> clazzProblem =
+        // ContainerCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        try {
+            if (resultList == null) {
+                resultList = new ArrayList<>();
+            }
+            // -- Specific part 1
+            Constructor<EquipmentPacKey> cons = clazzPacKey.getConstructor(UniversalId.class); // Avoid new()
+            InstanceIdentifier<EquipmentCurrentProblems> interfaceIID = InstanceIdentifier
+                    .builder(clazzPac, cons.newInstance(interfacePacUuid)).child(clazzProblems).build();
+
+            // -- Specific part 2
+            EquipmentCurrentProblems problems = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                    LogicalDatastoreType.OPERATIONAL, interfaceIID);
+            if (problems == null) {
+                LOG.debug("DBRead Id {} no {}", interfacePacUuid, clazzProblems, clazzProblems.getName());
+            } else if (problems.getCurrentProblemList() == null) {
+                LOG.debug("DBRead Id {} no list {}", interfacePacUuid, clazzProblems.getName());
+            } else {
+                // -- Specific part 3
+                for (CurrentProblemTypeG problem : problems.getCurrentProblemList()) {
+                    resultList.add(new ProblemNotificationXml(coreData.getMountpoint(), interfacePacUuid.getValue(),
+                            problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                            problem.getSequenceNumber().toString(),
+                            InternalDateAndTime.valueOf(problem.getTimeStamp())));
+                }
+            }
+        } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException
+                | IllegalArgumentException | InvocationTargetException e) {
+            LOG.warn("Could not reade instance of MwTdmContainerPacKey: ", e);
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param interfacePacUuid Universal index of Equipmentpac
+     * @return EquipmentPac or null
+     */
+    public @Nullable EquipmentPac readEquipmentPac(UniversalId interfacePacUuid) {
+
+        final Class<?> clazzPac = EquipmentPac.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        InstanceIdentifier<EquipmentPac> equipmentIID =
+                InstanceIdentifier.builder(EquipmentPac.class, new EquipmentPacKey(interfacePacUuid)).build();
+
+        EquipmentPac res = GenericTransactionUtils.readData(coreData.getDataBroker(), LogicalDatastoreType.OPERATIONAL,
+                equipmentIID);
+
+        return res;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev170324.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev170324.java
new file mode 100644
index 0000000..b629401
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev170324.java
@@ -0,0 +1,593 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc;
+
+
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.List;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalDateAndTime;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalSeverity;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCOreNetworkElementCoreData;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCoreNetworkElement12;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ExtendedAirInterfaceHistoricalPerformanceType12;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ONFLayerProtocolName;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.GenericTransactionUtils;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.AttributeValueChangedNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectCreationNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectDeletionNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.Lp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.OtnHistoryDataG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.AirInterfaceCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.AirInterfaceDiversityCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.AirInterfaceHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.AttributeValueChangedNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ContainerCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ContainerHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MicrowaveModelListener;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwAirInterfaceDiversityPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwAirInterfaceDiversityPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwAirInterfacePac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwAirInterfacePacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwEthernetContainerPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwEthernetContainerPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwHybridMwStructurePac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwHybridMwStructurePacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwPureEthernetStructurePac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwPureEthernetStructurePacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwTdmContainerPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwTdmContainerPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ObjectCreationNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ObjectDeletionNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ProblemNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.StructureCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.air._interface.diversity.pac.AirInterfaceDiversityCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.air._interface.pac.AirInterfaceConfiguration;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.air._interface.pac.AirInterfaceCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.air._interface.pac.AirInterfaceHistoricalPerformances;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.ethernet.container.pac.EthernetContainerCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.ethernet.container.pac.EthernetContainerHistoricalPerformances;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.hybrid.mw.structure.pac.HybridMwStructureCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.pure.ethernet.structure.pac.PureEthernetStructureCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.tdm.container.pac.TdmContainerCurrentProblems;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.NotificationListener;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class WrapperMicrowaveModelRev170324 implements OnfMicrowaveModel, MicrowaveModelListener {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElement12.class);
+
+    public static final QName QNAME = MwAirInterfacePac.QNAME;
+
+
+    private ONFCOreNetworkElementCoreData coreData;
+    private OnfMicrowaveModelNotification microwaveModelListener;
+
+    /*-----------------------------------------------------------------------------
+     * Setter/Getter
+     */
+
+    public void setCoreData(ONFCOreNetworkElementCoreData coreData) {
+		this.coreData = coreData;
+	}
+
+	public ONFCOreNetworkElementCoreData getCoreData() {
+		return coreData;
+	}
+
+	@Override
+	public void setOnfMicrowaveModelListener(OnfMicrowaveModelNotification microwaveModelListener) {
+		this.microwaveModelListener = microwaveModelListener;
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public <T extends NotificationListener> T getNotificationListener() {
+		return (T)this;
+	}
+
+    /*-----------------------------------------------------------------------------
+     * Interfacefunctions
+     */
+
+    public void readTheFaultsOfMicrowaveModel(ONFLayerProtocolName lpName, Class<?> lpClass, UniversalId uuid,
+    		List<ProblemNotificationXml> resultList) {
+
+    	switch (lpName) {
+    	case MWAirInterface:
+    		readTheFaultsOfMwAirInterfacePac(uuid, resultList);
+    		break;
+
+    	case EthernetContainer12:
+    		readTheFaultsOfMwEthernetContainerPac(uuid, resultList);
+    		break;
+
+    	case TDMContainer:
+    		readTheFaultsOfMwTdmContainerPac(uuid, resultList);
+    		break;
+
+    	case Structure:
+    		if (lpClass == MwHybridMwStructurePac.class) {
+    			readTheFaultsOfMwHybridMwStructurePac(uuid, resultList);
+
+    		} else if (lpClass == MwAirInterfaceDiversityPac.class) {
+    			readTheFaultsOfMwAirInterfaceDiversityPac(uuid, resultList);
+
+    		} else if (lpClass == MwPureEthernetStructurePac.class) {
+    			readTheFaultsOfMwPureEthernetStructurePac(uuid, resultList);
+
+    		} else {
+    			LOG.warn("Unassigned lp model {} class {}", lpName, lpClass);
+    		}
+    		break;
+        case Ethernet:
+            // No alarms supported
+            break;
+        case EthernetContainer10:
+        default:
+            LOG.warn("Unassigned or not expected lp in model {}", lpName);
+    	}
+    }
+
+	public List<? extends OtnHistoryDataG> readTheHistoricalPerformanceData(ONFLayerProtocolName lpName, Lp lp) {
+    	switch (lpName) {
+    	case MWAirInterface:
+    		return readTheHistoricalPerformanceDataOfMwAirInterfacePac(lp);
+
+    	case EthernetContainer12:
+    		return readTheHistoricalPerformanceDataOfEthernetContainer(lp);
+
+    	case EthernetContainer10:
+    	case EthernetPhysical:
+    	case Ethernet:
+    	case TDMContainer:
+    	case Structure:
+    	case Unknown:
+    		LOG.debug("Do not read HistoricalPM data for {} {}", lpName, lp.getUuid().getValue());
+    		break;
+    	}
+    	return new ArrayList<>();
+    }
+
+	public Class<?> getClassForLtpExtension(QName qName) {
+        Class<?> res = null;
+        if (qName.equals(MwAirInterfacePac.QNAME)) {
+            res = MwAirInterfacePac.class;
+        } else if (qName.equals(MwAirInterfaceDiversityPac.QNAME)) {
+            res = MwAirInterfaceDiversityPac.class;
+        } else if (qName.equals(MwPureEthernetStructurePac.QNAME)) {
+            res = MwPureEthernetStructurePac.class;
+        } else if (qName.equals(MwHybridMwStructurePac.QNAME)) {
+            res = MwHybridMwStructurePac.class;
+        } else if (qName.equals(MwEthernetContainerPac.QNAME)) {
+            res = MwEthernetContainerPac.class;
+        } else if (qName.equals(MwTdmContainerPac.QNAME)) {
+            res = MwTdmContainerPac.class;
+        }
+        LOG.info("Found QName {} mapped to {}", String.valueOf(qName), String.valueOf(res));
+		return res;
+	}
+
+    /*-----------------------------------------------------------------------------
+     * Reading problems for specific interface pacs
+     */
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal Id String of the interface
+     * @return number of alarms
+     */
+    private List<ProblemNotificationXml> readTheFaultsOfMwAirInterfacePac(UniversalId interfacePacUuid,
+            List<ProblemNotificationXml> resultList) {
+
+        final Class<MwAirInterfacePac> clazzPac = MwAirInterfacePac.class;
+        // final Class<MwAirInterfacePacKey> clazzPacKey = MwAirInterfacePacKey.class;
+        // final Class<AirInterfaceCurrentProblems> clazzProblems =
+        // AirInterfaceCurrentProblems.class;
+        // final Class<AirInterfaceCurrentProblemTypeG> clazzProblem =
+        // AirInterfaceCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+        		coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        // Step 2.2: construct data and the relative iid
+        InstanceIdentifier<AirInterfaceCurrentProblems> mwAirInterfaceIID = InstanceIdentifier
+                .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(interfacePacUuid))
+                .child(AirInterfaceCurrentProblems.class).build();
+
+        // Step 2.3: read to the config data store
+        AirInterfaceCurrentProblems problems = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwAirInterfaceIID);
+
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no AirInterfaceCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemList", interfacePacUuid);
+        } else {
+            for (AirInterfaceCurrentProblemTypeG problem : problems.getCurrentProblemList()) {
+                resultList.add(new ProblemNotificationXml(coreData.getMountpoint(), interfacePacUuid.getValue(),
+                        problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                        problem.getSequenceNumber().toString(), InternalDateAndTime.valueOf(problem.getTimeStamp())));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private List<ProblemNotificationXml> readTheFaultsOfMwEthernetContainerPac(UniversalId interfacePacUuid,
+            List<ProblemNotificationXml> resultList) {
+
+        final Class<MwEthernetContainerPac> clazzPac = MwEthernetContainerPac.class;
+        // final Class<MwEthernetContainerPacKey> clazzPacKey =
+        // MwEthernetContainerPacKey.class;
+        // final Class<EthernetContainerCurrentProblems> clazzProblems =
+        // EthernetContainerCurrentProblems.class;
+        // final Class<ContainerCurrentProblemTypeG> clazzProblem =
+        // ContainerCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        InstanceIdentifier<EthernetContainerCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(MwEthernetContainerPac.class, new MwEthernetContainerPacKey(interfacePacUuid))
+                .child(EthernetContainerCurrentProblems.class).build();
+
+        EthernetContainerCurrentProblems problems = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no EthernetContainerCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemsList", interfacePacUuid);
+        } else {
+            for (ContainerCurrentProblemTypeG problem : problems.getCurrentProblemList()) {
+                resultList.add(new ProblemNotificationXml(coreData.getMountpoint(), interfacePacUuid.getValue(),
+                        problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                        problem.getSequenceNumber().toString(), InternalDateAndTime.valueOf(problem.getTimeStamp())));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private List<ProblemNotificationXml> readTheFaultsOfMwAirInterfaceDiversityPac(UniversalId interfacePacUuid,
+            List<ProblemNotificationXml> resultList) {
+
+        final Class<MwAirInterfaceDiversityPac> clazzPac = MwAirInterfaceDiversityPac.class;
+        // final Class<MwAirInterfaceDiversityPacKey> clazzPacKey =
+        // MwAirInterfaceDiversityPacKey.class;
+        final Class<AirInterfaceDiversityCurrentProblems> clazzProblems = AirInterfaceDiversityCurrentProblems.class;
+        // final Class<AirInterfaceDiversityCurrentProblemTypeG> clazzProblem =
+        // AirInterfaceDiversityCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        InstanceIdentifier<AirInterfaceDiversityCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(clazzPac, new MwAirInterfaceDiversityPacKey(interfacePacUuid)).child(clazzProblems).build();
+
+        AirInterfaceDiversityCurrentProblems problems = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no AirInterfaceDiversityCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemList", interfacePacUuid);
+        } else {
+            for (AirInterfaceDiversityCurrentProblemTypeG problem : problems.getCurrentProblemList()) {
+                resultList.add(new ProblemNotificationXml(coreData.getMountpoint(), interfacePacUuid.getValue(),
+                        problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                        problem.getSequenceNumber().toString(), InternalDateAndTime.valueOf(problem.getTimeStamp())));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private List<ProblemNotificationXml> readTheFaultsOfMwPureEthernetStructurePac(UniversalId interfacePacUuid,
+            List<ProblemNotificationXml> resultList) {
+
+        final Class<MwPureEthernetStructurePac> clazzPac = MwPureEthernetStructurePac.class;
+        // final Class<MwPureEthernetStructurePacKey> clazzPacKey =
+        // MwPureEthernetStructurePacKey.class;
+        final Class<PureEthernetStructureCurrentProblems> clazzProblems = PureEthernetStructureCurrentProblems.class;
+        // final Class<StructureCurrentProblemTypeG> clazzProblem =
+        // StructureCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        InstanceIdentifier<PureEthernetStructureCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(clazzPac, new MwPureEthernetStructurePacKey(interfacePacUuid)).child(clazzProblems).build();
+
+        PureEthernetStructureCurrentProblems problems = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no PureEthernetStructureCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemsList", interfacePacUuid);
+        } else {
+            for (StructureCurrentProblemTypeG problem : problems.getCurrentProblemList()) {
+                resultList.add(new ProblemNotificationXml(coreData.getMountpoint(), interfacePacUuid.getValue(),
+                        problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                        problem.getSequenceNumber().toString(), InternalDateAndTime.valueOf(problem.getTimeStamp())));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private List<ProblemNotificationXml> readTheFaultsOfMwHybridMwStructurePac(UniversalId interfacePacUuid,
+            List<ProblemNotificationXml> resultList) {
+
+        final Class<MwHybridMwStructurePac> clazzPac = MwHybridMwStructurePac.class;
+        // final Class<MwHybridMwStructurePacKey> clazzPacKey =
+        // MwHybridMwStructurePacKey.class;
+        final Class<HybridMwStructureCurrentProblems> clazzProblems = HybridMwStructureCurrentProblems.class;
+        // final Class<HybridMwStructureCurrentProblemsG> clazzProblem =
+        // HybridMwStructureCurrentProblemsG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        InstanceIdentifier<HybridMwStructureCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(clazzPac, new MwHybridMwStructurePacKey(interfacePacUuid)).child(clazzProblems).build();
+
+        HybridMwStructureCurrentProblems problems = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no HybridMwStructureCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemsList", interfacePacUuid);
+        } else {
+            for (StructureCurrentProblemTypeG problem : problems.getCurrentProblemList()) {
+                resultList.add(new ProblemNotificationXml(coreData.getMountpoint(), interfacePacUuid.getValue(),
+                        problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                        problem.getSequenceNumber().toString(), InternalDateAndTime.valueOf(problem.getTimeStamp())));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces. TODO Goal for future implementation
+     * without usage of explicit new. Key is generated by newInstance() function
+     * here to verify this approach.
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     * @throws SecurityException
+     * @throws NoSuchMethodException
+     * @throws InvocationTargetException
+     * @throws IllegalArgumentException
+     * @throws IllegalAccessException
+     * @throws InstantiationException
+     */
+    private List<ProblemNotificationXml> readTheFaultsOfMwTdmContainerPac(UniversalId interfacePacUuid,
+            List<ProblemNotificationXml> resultList) {
+
+        final Class<MwTdmContainerPac> clazzPac = MwTdmContainerPac.class;
+        final Class<MwTdmContainerPacKey> clazzPacKey = MwTdmContainerPacKey.class;
+        final Class<TdmContainerCurrentProblems> clazzProblems = TdmContainerCurrentProblems.class;
+        // final Class<ContainerCurrentProblemTypeG> clazzProblem =
+        // ContainerCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        try {
+            // -- Specific part 1
+            Constructor<MwTdmContainerPacKey> cons = clazzPacKey.getConstructor(UniversalId.class); // Avoid new()
+            InstanceIdentifier<TdmContainerCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                    .builder(clazzPac, cons.newInstance(interfacePacUuid)).child(clazzProblems).build();
+
+            // -- Specific part 2
+            TdmContainerCurrentProblems problems = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                    LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+            if (problems == null) {
+                LOG.debug("DBRead Id {} no TdmContainerCurrentProblems", interfacePacUuid);
+            } else if (problems.getCurrentProblemList() == null) {
+                LOG.debug("DBRead Id {} empty CurrentProblemsList", interfacePacUuid);
+            } else {
+                // -- Specific part 3
+                for (ContainerCurrentProblemTypeG problem : problems.getCurrentProblemList()) {
+                    resultList.add(new ProblemNotificationXml(coreData.getMountpoint(), interfacePacUuid.getValue(),
+                            problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                            problem.getSequenceNumber().toString(),
+                            InternalDateAndTime.valueOf(problem.getTimeStamp())));
+                }
+            }
+        } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException
+                | IllegalArgumentException | InvocationTargetException e) {
+            LOG.warn("Could not reade instance of MwTdmContainerPacKey: ", e);
+        }
+        return resultList;
+    }
+
+    /*-----------------------------------------------------------------------------
+     * Performance related data
+     */
+
+    /**
+     * PM MwAirInterfacePac
+     *
+     * @param lp
+     * @return
+     */
+    private List<ExtendedAirInterfaceHistoricalPerformanceType12> readTheHistoricalPerformanceDataOfMwAirInterfacePac(
+            Lp lp) {
+
+        String uuId = lp.getUuid().getValue();
+
+        List<ExtendedAirInterfaceHistoricalPerformanceType12> resultList = new ArrayList<>();
+        LOG.debug("DBRead Get {} MWAirInterfacePac: {}", coreData.getMountpoint(), uuId);
+        // ----
+        UniversalId mwAirInterfacePacuuId = new UniversalId(uuId);
+        // Step 2.1: construct data and the relative iid
+        InstanceIdentifier<AirInterfaceConfiguration> mwAirInterfaceConfigurationIID = InstanceIdentifier
+                .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(mwAirInterfacePacuuId))
+                .child(AirInterfaceConfiguration.class).build();
+        AirInterfaceConfiguration airConfiguration = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwAirInterfaceConfigurationIID);
+
+        if (airConfiguration == null) {
+            LOG.debug("DBRead MWAirInterfacePac Id {} no AirInterfaceConfiguration", mwAirInterfacePacuuId);
+
+        } else {
+            // Step 2.2: construct data and the relative iid
+            InstanceIdentifier<AirInterfaceHistoricalPerformances> mwAirInterfaceHistoricalPerformanceIID = InstanceIdentifier
+                    .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(mwAirInterfacePacuuId))
+                    .child(AirInterfaceHistoricalPerformances.class).build();
+
+            // Step 2.3: read to the config data store
+            AirInterfaceHistoricalPerformances airHistoricalPerformanceData = GenericTransactionUtils.readData(
+            		coreData.getDataBroker(), LogicalDatastoreType.OPERATIONAL, mwAirInterfaceHistoricalPerformanceIID);
+
+            if (airHistoricalPerformanceData == null) {
+                LOG.debug("DBRead MWAirInterfacePac Id {} no AirInterfaceHistoricalPerformances",
+                        mwAirInterfacePacuuId);
+            } else {
+                // org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170320.air._interface.historical.performances.g.HistoricalPerformanceDataList
+                List<org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.air._interface.historical.performances.g.HistoricalPerformanceDataList> airHistPMList = airHistoricalPerformanceData
+                        .getHistoricalPerformanceDataList();
+                LOG.debug("DBRead MWAirInterfacePac Id {} Records intermediate: {}", mwAirInterfacePacuuId,
+                        airHistPMList.size());
+                if (airHistPMList != null) {
+                    for (AirInterfaceHistoricalPerformanceTypeG pmRecord : airHistoricalPerformanceData
+                            .getHistoricalPerformanceDataList()) {
+                        resultList.add(new ExtendedAirInterfaceHistoricalPerformanceType12(pmRecord, airConfiguration));
+                    }
+                }
+            }
+        }
+        LOG.debug("DBRead MWAirInterfacePac Id {} Records result: {}", mwAirInterfacePacuuId, resultList.size());
+        return resultList;
+    }
+
+    private List<ContainerHistoricalPerformanceTypeG> readTheHistoricalPerformanceDataOfEthernetContainer(Lp lp) {
+
+        final String myName = "MWEthernetContainerPac";
+        String uuId = lp.getUuid().getValue();
+
+        List<ContainerHistoricalPerformanceTypeG> resultList = new ArrayList<>();
+        LOG.debug("DBRead Get {} : {}", coreData.getMountpoint(), myName, uuId);
+        // ----
+        UniversalId ethContainerPacuuId = new UniversalId(uuId);
+        // Step 2.2: construct data and the relative iid
+        InstanceIdentifier<EthernetContainerHistoricalPerformances> ethContainerIID = InstanceIdentifier
+                .builder(MwEthernetContainerPac.class, new MwEthernetContainerPacKey(ethContainerPacuuId))
+                .child(EthernetContainerHistoricalPerformances.class).build();
+
+        // Step 2.3: read to the config data store
+        EthernetContainerHistoricalPerformances ethContainerHistoricalPerformanceData = GenericTransactionUtils
+                .readData(coreData.getDataBroker(), LogicalDatastoreType.OPERATIONAL, ethContainerIID);
+
+        if (ethContainerHistoricalPerformanceData == null) {
+            LOG.debug("DBRead {} Id {} no HistoricalPerformances", myName, ethContainerPacuuId);
+        } else {
+            // import
+            // org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170320.ethernet.container.historical.performances.g.HistoricalPerformanceDataList
+        	// org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ethernet.container.historical.performances.g.HistoricalPerformanceDataList
+            List<org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ethernet.container.historical.performances.g.HistoricalPerformanceDataList> airHistPMList = ethContainerHistoricalPerformanceData
+                    .getHistoricalPerformanceDataList();
+            LOG.debug("DBRead {} Id {} Records intermediate: {}", myName, ethContainerPacuuId, airHistPMList.size());
+            if (airHistPMList != null) {
+                for (ContainerHistoricalPerformanceTypeG pmRecord : airHistPMList) {
+                    resultList.add(pmRecord);
+                }
+            }
+        }
+        LOG.debug("DBRead {} Id {} Records result: {}", myName, ethContainerPacuuId, resultList.size());
+        return resultList;
+    }
+
+    @Override
+    public void onObjectCreationNotification(ObjectCreationNotification notification) {
+        LOG.debug("Got event of type :: {}", ObjectCreationNotification.class.getSimpleName());
+
+        ObjectCreationNotificationXml notificationXml = new ObjectCreationNotificationXml(coreData.getMountpoint(),
+                notification.getCounter().toString(),
+                InternalDateAndTime.valueOf(notification.getTimeStamp()),
+                notification.getObjectIdRef().getValue());
+        microwaveModelListener.onObjectCreationNotification(notificationXml);
+	}
+
+    @Override
+    public void onObjectDeletionNotification(ObjectDeletionNotification notification) {
+        LOG.debug("Got event of type :: {}", ObjectDeletionNotification.class.getSimpleName());
+
+        ObjectDeletionNotificationXml notificationXml = new ObjectDeletionNotificationXml(coreData.getMountpoint(),
+                notification.getCounter().toString(),
+                InternalDateAndTime.valueOf(notification.getTimeStamp()),
+                notification.getObjectIdRef().getValue()
+                );
+        microwaveModelListener.onObjectDeletionNotification(notificationXml);
+	}
+
+    public void onProblemNotification(ProblemNotification notification) {
+
+        LOG.debug("Got event of type :: {}", ProblemNotification.class.getSimpleName());
+
+        ProblemNotificationXml notificationXml = new ProblemNotificationXml(coreData.getMountpoint(), notification.getObjectIdRef().getValue(),
+                notification.getProblem(), InternalSeverity.valueOf(notification.getSeverity()),
+                notification.getCounter().toString(), InternalDateAndTime.valueOf(notification.getTimeStamp()));
+
+        microwaveModelListener.onProblemNotification(notificationXml);
+	}
+
+    @Override
+    public void onAttributeValueChangedNotification(AttributeValueChangedNotification notification) {
+        LOG.debug("Got event of type :: {}", AttributeValueChangedNotification.class.getSimpleName());
+
+        AttributeValueChangedNotificationXml notificationXml = new AttributeValueChangedNotificationXml(coreData.getMountpoint(),
+                String.valueOf(notification.getCounter()), InternalDateAndTime.valueOf(notification.getTimeStamp()),
+                notification.getObjectIdRef().getValue(), notification.getAttributeName(), notification.getNewValue());
+
+        microwaveModelListener.onAttributeValueChangedNotification(notificationXml);
+	}
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev180907.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev180907.java
new file mode 100644
index 0000000..d35115f
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev180907.java
@@ -0,0 +1,596 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc;
+
+
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.NotificationListener;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalDateAndTime;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalSeverity;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCOreNetworkElementCoreData;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCoreNetworkElement12;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ExtendedAirInterfaceHistoricalPerformanceType1211;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ONFLayerProtocolName;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.GenericTransactionUtils;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.AttributeValueChangedNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectCreationNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectDeletionNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.Lp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.OtnHistoryDataG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.AirInterfaceCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.AirInterfaceDiversityCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.AirInterfaceHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ContainerCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ContainerHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MicrowaveModelListener;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwAirInterfaceDiversityPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwAirInterfaceDiversityPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwAirInterfacePac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwAirInterfacePacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwEthernetContainerPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwEthernetContainerPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwHybridMwStructurePac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwHybridMwStructurePacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwPureEthernetStructurePac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwPureEthernetStructurePacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwTdmContainerPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwTdmContainerPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.StructureCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.air._interface.diversity.pac.AirInterfaceDiversityCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.air._interface.pac.AirInterfaceConfiguration;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.air._interface.pac.AirInterfaceCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.air._interface.pac.AirInterfaceHistoricalPerformances;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.ethernet.container.pac.EthernetContainerCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.ethernet.container.pac.EthernetContainerHistoricalPerformances;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.hybrid.mw.structure.pac.HybridMwStructureCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.pure.ethernet.structure.pac.PureEthernetStructureCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.tdm.container.pac.TdmContainerCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.AttributeValueChangedNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ObjectCreationNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ObjectDeletionNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ProblemNotification;
+
+
+public class WrapperMicrowaveModelRev180907 implements OnfMicrowaveModel, MicrowaveModelListener {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElement12.class);
+
+    public static final QName QNAME = MwAirInterfacePac.QNAME;
+
+
+    private ONFCOreNetworkElementCoreData coreData;
+
+	private OnfMicrowaveModelNotification microwaveModelListener;
+
+
+    /*-----------------------------------------------------------------------------
+     * Setter/Getter
+     */
+
+    public void setCoreData(ONFCOreNetworkElementCoreData coreData) {
+		this.coreData = coreData;
+	}
+
+	public ONFCOreNetworkElementCoreData getCoreData() {
+		return coreData;
+	}
+
+	@Override
+	public void setOnfMicrowaveModelListener(OnfMicrowaveModelNotification microwaveModelListener) {
+		this.microwaveModelListener = microwaveModelListener;
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public <T extends NotificationListener> T getNotificationListener() {
+		return (T) this;
+	}
+
+    /*-----------------------------------------------------------------------------
+     * Interfacefunctions
+     */
+
+    public void readTheFaultsOfMicrowaveModel(ONFLayerProtocolName lpName, Class<?> lpClass, UniversalId uuid,
+    		List<ProblemNotificationXml> resultList) {
+
+    	switch (lpName) {
+    	case MWAirInterface:
+    		readTheFaultsOfMwAirInterfacePac(uuid, resultList);
+    		break;
+
+    	case EthernetContainer12:
+    		readTheFaultsOfMwEthernetContainerPac(uuid, resultList);
+    		break;
+
+    	case TDMContainer:
+    		readTheFaultsOfMwTdmContainerPac(uuid, resultList);
+    		break;
+
+    	case Structure:
+    		if (lpClass == MwHybridMwStructurePac.class) {
+    			readTheFaultsOfMwHybridMwStructurePac(uuid, resultList);
+
+    		} else if (lpClass == MwAirInterfaceDiversityPac.class) {
+    			readTheFaultsOfMwAirInterfaceDiversityPac(uuid, resultList);
+
+    		} else if (lpClass == MwPureEthernetStructurePac.class) {
+    			readTheFaultsOfMwPureEthernetStructurePac(uuid, resultList);
+
+    		} else {
+    			LOG.warn("Unassigned lp model {} class {}", lpName, lpClass);
+    		}
+    		break;
+        case Ethernet:
+            // No alarms supported
+            break;
+        case EthernetContainer10:
+        default:
+            LOG.warn("Unassigned or not expected lp in model {}", lpName);
+    	}
+    }
+
+	public List<? extends OtnHistoryDataG> readTheHistoricalPerformanceData(ONFLayerProtocolName lpName, Lp lp) {
+    	switch (lpName) {
+    	case MWAirInterface:
+    		return readTheHistoricalPerformanceDataOfMwAirInterfacePac(lp);
+
+    	case EthernetContainer12:
+    		return readTheHistoricalPerformanceDataOfEthernetContainer(lp);
+
+    	case EthernetContainer10:
+    	case EthernetPhysical:
+    	case Ethernet:
+    	case TDMContainer:
+    	case Structure:
+    	case Unknown:
+    		LOG.debug("Do not read HistoricalPM data for {} {}", lpName, lp.getUuid().getValue());
+    		break;
+    	}
+    	return new ArrayList<>();
+    }
+
+	public Class<?> getClassForLtpExtension(QName qName) {
+        Class<?> res = null;
+        if (qName.equals(MwAirInterfacePac.QNAME)) {
+            res = MwAirInterfacePac.class;
+        } else if (qName.equals(MwAirInterfaceDiversityPac.QNAME)) {
+            res = MwAirInterfaceDiversityPac.class;
+        } else if (qName.equals(MwPureEthernetStructurePac.QNAME)) {
+            res = MwPureEthernetStructurePac.class;
+        } else if (qName.equals(MwHybridMwStructurePac.QNAME)) {
+            res = MwHybridMwStructurePac.class;
+        } else if (qName.equals(MwEthernetContainerPac.QNAME)) {
+            res = MwEthernetContainerPac.class;
+        } else if (qName.equals(MwTdmContainerPac.QNAME)) {
+            res = MwTdmContainerPac.class;
+        }
+        LOG.info("Found QName {} mapped to {}", String.valueOf(qName), String.valueOf(res));
+		return res;
+	}
+
+    /*-----------------------------------------------------------------------------
+     * Reading problems for specific interface pacs
+     */
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal Id String of the interface
+     * @return number of alarms
+     */
+    private List<ProblemNotificationXml> readTheFaultsOfMwAirInterfacePac(UniversalId interfacePacUuid,
+            List<ProblemNotificationXml> resultList) {
+
+        final Class<MwAirInterfacePac> clazzPac = MwAirInterfacePac.class;
+        // final Class<MwAirInterfacePacKey> clazzPacKey = MwAirInterfacePacKey.class;
+        // final Class<AirInterfaceCurrentProblems> clazzProblems =
+        // AirInterfaceCurrentProblems.class;
+        // final Class<AirInterfaceCurrentProblemTypeG> clazzProblem =
+        // AirInterfaceCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+        		coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        // Step 2.2: construct data and the relative iid
+        InstanceIdentifier<AirInterfaceCurrentProblems> mwAirInterfaceIID = InstanceIdentifier
+                .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(interfacePacUuid))
+                .child(AirInterfaceCurrentProblems.class).build();
+
+        // Step 2.3: read to the config data store
+        AirInterfaceCurrentProblems problems = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwAirInterfaceIID);
+
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no AirInterfaceCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemList", interfacePacUuid);
+        } else {
+            for (AirInterfaceCurrentProblemTypeG problem : problems.getCurrentProblemList()) {
+                resultList.add(new ProblemNotificationXml(coreData.getMountpoint(), interfacePacUuid.getValue(),
+                        problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                        problem.getSequenceNumber().toString(), InternalDateAndTime.valueOf(problem.getTimeStamp())));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private List<ProblemNotificationXml> readTheFaultsOfMwEthernetContainerPac(UniversalId interfacePacUuid,
+            List<ProblemNotificationXml> resultList) {
+
+        final Class<MwEthernetContainerPac> clazzPac = MwEthernetContainerPac.class;
+        // final Class<MwEthernetContainerPacKey> clazzPacKey =
+        // MwEthernetContainerPacKey.class;
+        // final Class<EthernetContainerCurrentProblems> clazzProblems =
+        // EthernetContainerCurrentProblems.class;
+        // final Class<ContainerCurrentProblemTypeG> clazzProblem =
+        // ContainerCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        InstanceIdentifier<EthernetContainerCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(MwEthernetContainerPac.class, new MwEthernetContainerPacKey(interfacePacUuid))
+                .child(EthernetContainerCurrentProblems.class).build();
+
+        EthernetContainerCurrentProblems problems = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no EthernetContainerCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemsList", interfacePacUuid);
+        } else {
+            for (ContainerCurrentProblemTypeG problem : problems.getCurrentProblemList()) {
+                resultList.add(new ProblemNotificationXml(coreData.getMountpoint(), interfacePacUuid.getValue(),
+                        problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                        problem.getSequenceNumber().toString(), InternalDateAndTime.valueOf(problem.getTimeStamp())));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private List<ProblemNotificationXml> readTheFaultsOfMwAirInterfaceDiversityPac(UniversalId interfacePacUuid,
+            List<ProblemNotificationXml> resultList) {
+
+        final Class<MwAirInterfaceDiversityPac> clazzPac = MwAirInterfaceDiversityPac.class;
+        // final Class<MwAirInterfaceDiversityPacKey> clazzPacKey =
+        // MwAirInterfaceDiversityPacKey.class;
+        final Class<AirInterfaceDiversityCurrentProblems> clazzProblems = AirInterfaceDiversityCurrentProblems.class;
+        // final Class<AirInterfaceDiversityCurrentProblemTypeG> clazzProblem =
+        // AirInterfaceDiversityCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        InstanceIdentifier<AirInterfaceDiversityCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(clazzPac, new MwAirInterfaceDiversityPacKey(interfacePacUuid)).child(clazzProblems).build();
+
+        AirInterfaceDiversityCurrentProblems problems = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no AirInterfaceDiversityCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemList", interfacePacUuid);
+        } else {
+            for (AirInterfaceDiversityCurrentProblemTypeG problem : problems.getCurrentProblemList()) {
+                resultList.add(new ProblemNotificationXml(coreData.getMountpoint(), interfacePacUuid.getValue(),
+                        problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                        problem.getSequenceNumber().toString(), InternalDateAndTime.valueOf(problem.getTimeStamp())));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private List<ProblemNotificationXml> readTheFaultsOfMwPureEthernetStructurePac(UniversalId interfacePacUuid,
+            List<ProblemNotificationXml> resultList) {
+
+        final Class<MwPureEthernetStructurePac> clazzPac = MwPureEthernetStructurePac.class;
+        // final Class<MwPureEthernetStructurePacKey> clazzPacKey =
+        // MwPureEthernetStructurePacKey.class;
+        final Class<PureEthernetStructureCurrentProblems> clazzProblems = PureEthernetStructureCurrentProblems.class;
+        // final Class<StructureCurrentProblemTypeG> clazzProblem =
+        // StructureCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        InstanceIdentifier<PureEthernetStructureCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(clazzPac, new MwPureEthernetStructurePacKey(interfacePacUuid)).child(clazzProblems).build();
+
+        PureEthernetStructureCurrentProblems problems = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no PureEthernetStructureCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemsList", interfacePacUuid);
+        } else {
+            for (StructureCurrentProblemTypeG problem : problems.getCurrentProblemList()) {
+                resultList.add(new ProblemNotificationXml(coreData.getMountpoint(), interfacePacUuid.getValue(),
+                        problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                        problem.getSequenceNumber().toString(), InternalDateAndTime.valueOf(problem.getTimeStamp())));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private List<ProblemNotificationXml> readTheFaultsOfMwHybridMwStructurePac(UniversalId interfacePacUuid,
+            List<ProblemNotificationXml> resultList) {
+
+        final Class<MwHybridMwStructurePac> clazzPac = MwHybridMwStructurePac.class;
+        // final Class<MwHybridMwStructurePacKey> clazzPacKey =
+        // MwHybridMwStructurePacKey.class;
+        final Class<HybridMwStructureCurrentProblems> clazzProblems = HybridMwStructureCurrentProblems.class;
+        // final Class<HybridMwStructureCurrentProblemsG> clazzProblem =
+        // HybridMwStructureCurrentProblemsG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        InstanceIdentifier<HybridMwStructureCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(clazzPac, new MwHybridMwStructurePacKey(interfacePacUuid)).child(clazzProblems).build();
+
+        HybridMwStructureCurrentProblems problems = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no HybridMwStructureCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemsList", interfacePacUuid);
+        } else {
+            for (StructureCurrentProblemTypeG problem : problems.getCurrentProblemList()) {
+                resultList.add(new ProblemNotificationXml(coreData.getMountpoint(), interfacePacUuid.getValue(),
+                        problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                        problem.getSequenceNumber().toString(), InternalDateAndTime.valueOf(problem.getTimeStamp())));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces. TODO Goal for future implementation
+     * without usage of explicit new. Key is generated by newInstance() function
+     * here to verify this approach.
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     * @throws SecurityException
+     * @throws NoSuchMethodException
+     * @throws InvocationTargetException
+     * @throws IllegalArgumentException
+     * @throws IllegalAccessException
+     * @throws InstantiationException
+     */
+    private List<ProblemNotificationXml> readTheFaultsOfMwTdmContainerPac(UniversalId interfacePacUuid,
+            List<ProblemNotificationXml> resultList) {
+
+        final Class<MwTdmContainerPac> clazzPac = MwTdmContainerPac.class;
+        final Class<MwTdmContainerPacKey> clazzPacKey = MwTdmContainerPacKey.class;
+        final Class<TdmContainerCurrentProblems> clazzProblems = TdmContainerCurrentProblems.class;
+        // final Class<ContainerCurrentProblemTypeG> clazzProblem =
+        // ContainerCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        try {
+            // -- Specific part 1
+            Constructor<MwTdmContainerPacKey> cons = clazzPacKey.getConstructor(UniversalId.class); // Avoid new()
+            InstanceIdentifier<TdmContainerCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                    .builder(clazzPac, cons.newInstance(interfacePacUuid)).child(clazzProblems).build();
+
+            // -- Specific part 2
+            TdmContainerCurrentProblems problems = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                    LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+            if (problems == null) {
+                LOG.debug("DBRead Id {} no TdmContainerCurrentProblems", interfacePacUuid);
+            } else if (problems.getCurrentProblemList() == null) {
+                LOG.debug("DBRead Id {} empty CurrentProblemsList", interfacePacUuid);
+            } else {
+                // -- Specific part 3
+                for (ContainerCurrentProblemTypeG problem : problems.getCurrentProblemList()) {
+                    resultList.add(new ProblemNotificationXml(coreData.getMountpoint(), interfacePacUuid.getValue(),
+                            problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                            problem.getSequenceNumber().toString(),
+                            InternalDateAndTime.valueOf(problem.getTimeStamp())));
+                }
+            }
+        } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException
+                | IllegalArgumentException | InvocationTargetException e) {
+            LOG.warn("Could not reade instance of MwTdmContainerPacKey: ", e);
+        }
+        return resultList;
+    }
+
+    /*-----------------------------------------------------------------------------
+     * Performance related data
+     */
+
+    /**
+     * PM MwAirInterfacePac
+     *
+     * @param lp
+     * @return
+     */
+    private List<ExtendedAirInterfaceHistoricalPerformanceType1211> readTheHistoricalPerformanceDataOfMwAirInterfacePac(
+            Lp lp) {
+
+        String uuId = lp.getUuid().getValue();
+
+        List<ExtendedAirInterfaceHistoricalPerformanceType1211> resultList = new ArrayList<>();
+        LOG.debug("DBRead Get {} MWAirInterfacePac: {}", coreData.getMountpoint(), uuId);
+        // ----
+        UniversalId mwAirInterfacePacuuId = new UniversalId(uuId);
+        // Step 2.1: construct data and the relative iid
+        InstanceIdentifier<AirInterfaceConfiguration> mwAirInterfaceConfigurationIID = InstanceIdentifier
+                .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(mwAirInterfacePacuuId))
+                .child(AirInterfaceConfiguration.class).build();
+        AirInterfaceConfiguration airConfiguration = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwAirInterfaceConfigurationIID);
+
+        if (airConfiguration == null) {
+            LOG.debug("DBRead MWAirInterfacePac Id {} no AirInterfaceConfiguration", mwAirInterfacePacuuId);
+
+        } else {
+            // Step 2.2: construct data and the relative iid
+            InstanceIdentifier<AirInterfaceHistoricalPerformances> mwAirInterfaceHistoricalPerformanceIID = InstanceIdentifier
+                    .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(mwAirInterfacePacuuId))
+                    .child(AirInterfaceHistoricalPerformances.class).build();
+
+            // Step 2.3: read to the config data store
+            AirInterfaceHistoricalPerformances airHistoricalPerformanceData = GenericTransactionUtils.readData(
+            		coreData.getDataBroker(), LogicalDatastoreType.OPERATIONAL, mwAirInterfaceHistoricalPerformanceIID);
+
+            if (airHistoricalPerformanceData == null) {
+                LOG.debug("DBRead MWAirInterfacePac Id {} no AirInterfaceHistoricalPerformances",
+                        mwAirInterfacePacuuId);
+            } else {
+                // org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170320.air._interface.historical.performances.g.HistoricalPerformanceDataList
+                List<org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.air._interface.historical.performances.g.HistoricalPerformanceDataList> airHistPMList = airHistoricalPerformanceData
+                        .getHistoricalPerformanceDataList();
+                LOG.debug("DBRead MWAirInterfacePac Id {} Records intermediate: {}", mwAirInterfacePacuuId,
+                        airHistPMList.size());
+                if (airHistPMList != null) {
+                    for (AirInterfaceHistoricalPerformanceTypeG pmRecord : airHistoricalPerformanceData
+                            .getHistoricalPerformanceDataList()) {
+                        resultList.add(new ExtendedAirInterfaceHistoricalPerformanceType1211(pmRecord, airConfiguration));
+                    }
+                }
+            }
+        }
+        LOG.debug("DBRead MWAirInterfacePac Id {} Records result: {}", mwAirInterfacePacuuId, resultList.size());
+        return resultList;
+    }
+
+    private List<ContainerHistoricalPerformanceTypeG> readTheHistoricalPerformanceDataOfEthernetContainer(Lp lp) {
+
+        final String myName = "MWEthernetContainerPac";
+        String uuId = lp.getUuid().getValue();
+
+        List<ContainerHistoricalPerformanceTypeG> resultList = new ArrayList<>();
+        LOG.debug("DBRead Get {} : {}", coreData.getMountpoint(), myName, uuId);
+        // ----
+        UniversalId ethContainerPacuuId = new UniversalId(uuId);
+        // Step 2.2: construct data and the relative iid
+        InstanceIdentifier<EthernetContainerHistoricalPerformances> ethContainerIID = InstanceIdentifier
+                .builder(MwEthernetContainerPac.class, new MwEthernetContainerPacKey(ethContainerPacuuId))
+                .child(EthernetContainerHistoricalPerformances.class).build();
+
+        // Step 2.3: read to the config data store
+        EthernetContainerHistoricalPerformances ethContainerHistoricalPerformanceData = GenericTransactionUtils
+                .readData(coreData.getDataBroker(), LogicalDatastoreType.OPERATIONAL, ethContainerIID);
+
+        if (ethContainerHistoricalPerformanceData == null) {
+            LOG.debug("DBRead {} Id {} no HistoricalPerformances", myName, ethContainerPacuuId);
+        } else {
+            // import
+            // org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170320.ethernet.container.historical.performances.g.HistoricalPerformanceDataList
+             List<org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ethernet.container.historical.performances.g.HistoricalPerformanceDataList> airHistPMList = ethContainerHistoricalPerformanceData
+                    .getHistoricalPerformanceDataList();
+            LOG.debug("DBRead {} Id {} Records intermediate: {}", myName, ethContainerPacuuId, airHistPMList.size());
+            if (airHistPMList != null) {
+                for (ContainerHistoricalPerformanceTypeG pmRecord : airHistPMList) {
+                    resultList.add(pmRecord);
+                }
+            }
+        }
+        LOG.debug("DBRead {} Id {} Records result: {}", myName, ethContainerPacuuId, resultList.size());
+        return resultList;
+    }
+
+    @Override
+    public void onObjectCreationNotification(ObjectCreationNotification notification) {
+        LOG.debug("Got event of type :: {}", ObjectCreationNotification.class.getSimpleName());
+
+        ObjectCreationNotificationXml notificationXml = new ObjectCreationNotificationXml(coreData.getMountpoint(),
+                notification.getCounter().toString(),
+                InternalDateAndTime.valueOf(notification.getTimeStamp()),
+                notification.getObjectIdRef().getValue());
+        microwaveModelListener.onObjectCreationNotification(notificationXml);
+	}
+
+    @Override
+    public void onObjectDeletionNotification(ObjectDeletionNotification notification) {
+        LOG.debug("Got event of type :: {}", ObjectDeletionNotification.class.getSimpleName());
+
+        ObjectDeletionNotificationXml notificationXml = new ObjectDeletionNotificationXml(coreData.getMountpoint(),
+                notification.getCounter().toString(),
+                InternalDateAndTime.valueOf(notification.getTimeStamp()),
+                notification.getObjectIdRef().getValue()
+                );
+        microwaveModelListener.onObjectDeletionNotification(notificationXml);
+	}
+
+    public void onProblemNotification(ProblemNotification notification) {
+
+        LOG.debug("Got event of type :: {}", ProblemNotification.class.getSimpleName());
+
+        ProblemNotificationXml notificationXml = new ProblemNotificationXml(coreData.getMountpoint(), notification.getObjectIdRef().getValue(),
+                notification.getProblem(), InternalSeverity.valueOf(notification.getSeverity()),
+                notification.getCounter().toString(), InternalDateAndTime.valueOf(notification.getTimeStamp()));
+
+        microwaveModelListener.onProblemNotification(notificationXml);
+	}
+
+    @Override
+    public void onAttributeValueChangedNotification(AttributeValueChangedNotification notification) {
+        LOG.debug("Got event of type :: {}", AttributeValueChangedNotification.class.getSimpleName());
+
+        AttributeValueChangedNotificationXml notificationXml = new AttributeValueChangedNotificationXml(coreData.getMountpoint(),
+                String.valueOf(notification.getCounter()), InternalDateAndTime.valueOf(notification.getTimeStamp()),
+                notification.getObjectIdRef().getValue(), notification.getAttributeName(), notification.getNewValue());
+
+        microwaveModelListener.onAttributeValueChangedNotification(notificationXml);
+	}
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev181010.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev181010.java
new file mode 100644
index 0000000..c3970a8
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev181010.java
@@ -0,0 +1,594 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc;
+
+
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.NotificationListener;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalDateAndTime;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalSeverity;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCOreNetworkElementCoreData;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCoreNetworkElement12;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ExtendedAirInterfaceHistoricalPerformanceType1211p;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ONFLayerProtocolName;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.GenericTransactionUtils;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.AttributeValueChangedNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectCreationNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectDeletionNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.Lp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.OtnHistoryDataG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.AirInterfaceCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.AirInterfaceDiversityCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.AirInterfaceHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ContainerCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ContainerHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MicrowaveModelListener;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwAirInterfaceDiversityPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwAirInterfaceDiversityPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwAirInterfacePac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwAirInterfacePacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwEthernetContainerPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwEthernetContainerPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwHybridMwStructurePac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwHybridMwStructurePacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwPureEthernetStructurePac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwPureEthernetStructurePacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwTdmContainerPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwTdmContainerPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.StructureCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.air._interface.diversity.pac.AirInterfaceDiversityCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.air._interface.pac.AirInterfaceConfiguration;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.air._interface.pac.AirInterfaceCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.air._interface.pac.AirInterfaceHistoricalPerformances;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.ethernet.container.pac.EthernetContainerCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.ethernet.container.pac.EthernetContainerHistoricalPerformances;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.hybrid.mw.structure.pac.HybridMwStructureCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.pure.ethernet.structure.pac.PureEthernetStructureCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.tdm.container.pac.TdmContainerCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.AttributeValueChangedNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ObjectCreationNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ObjectDeletionNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ProblemNotification;
+
+
+public class WrapperMicrowaveModelRev181010 implements OnfMicrowaveModel, MicrowaveModelListener {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElement12.class);
+
+    public static final QName QNAME = MwAirInterfacePac.QNAME;
+
+
+    private ONFCOreNetworkElementCoreData coreData;
+
+	private OnfMicrowaveModelNotification microwaveModelListener;
+
+    /*-----------------------------------------------------------------------------
+     * Setter/Getter
+     */
+
+    public void setCoreData(ONFCOreNetworkElementCoreData coreData) {
+		this.coreData = coreData;
+	}
+
+	public ONFCOreNetworkElementCoreData getCoreData() {
+		return coreData;
+	}
+
+	@Override
+	public void setOnfMicrowaveModelListener(OnfMicrowaveModelNotification microwaveModelListener) {
+		this.microwaveModelListener = microwaveModelListener;
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public <T extends NotificationListener> T getNotificationListener() {
+		return (T) this;
+	}
+
+    /*-----------------------------------------------------------------------------
+     * Interfacefunctions
+     */
+
+    public void readTheFaultsOfMicrowaveModel(ONFLayerProtocolName lpName, Class<?> lpClass, UniversalId uuid,
+    		List<ProblemNotificationXml> resultList) {
+
+    	switch (lpName) {
+    	case MWAirInterface:
+    		readTheFaultsOfMwAirInterfacePac(uuid, resultList);
+    		break;
+
+    	case EthernetContainer12:
+    		readTheFaultsOfMwEthernetContainerPac(uuid, resultList);
+    		break;
+
+    	case TDMContainer:
+    		readTheFaultsOfMwTdmContainerPac(uuid, resultList);
+    		break;
+
+    	case Structure:
+    		if (lpClass == MwHybridMwStructurePac.class) {
+    			readTheFaultsOfMwHybridMwStructurePac(uuid, resultList);
+
+    		} else if (lpClass == MwAirInterfaceDiversityPac.class) {
+    			readTheFaultsOfMwAirInterfaceDiversityPac(uuid, resultList);
+
+    		} else if (lpClass == MwPureEthernetStructurePac.class) {
+    			readTheFaultsOfMwPureEthernetStructurePac(uuid, resultList);
+
+    		} else {
+    			LOG.warn("Unassigned lp model {} class {}", lpName, lpClass);
+    		}
+    		break;
+        case Ethernet:
+            // No alarms supported
+            break;
+        case EthernetContainer10:
+        default:
+            LOG.warn("Unassigned or not expected lp in model {}", lpName);
+    	}
+    }
+
+	public List<? extends OtnHistoryDataG> readTheHistoricalPerformanceData(ONFLayerProtocolName lpName, Lp lp) {
+    	switch (lpName) {
+    	case MWAirInterface:
+    		return readTheHistoricalPerformanceDataOfMwAirInterfacePac(lp);
+
+    	case EthernetContainer12:
+    		return readTheHistoricalPerformanceDataOfEthernetContainer(lp);
+
+    	case EthernetContainer10:
+    	case EthernetPhysical:
+    	case Ethernet:
+    	case TDMContainer:
+    	case Structure:
+    	case Unknown:
+    		LOG.debug("Do not read HistoricalPM data for {} {}", lpName, lp.getUuid().getValue());
+    		break;
+    	}
+    	return new ArrayList<>();
+    }
+
+	public Class<?> getClassForLtpExtension(QName qName) {
+        Class<?> res = null;
+        if (qName.equals(MwAirInterfacePac.QNAME)) {
+            res = MwAirInterfacePac.class;
+        } else if (qName.equals(MwAirInterfaceDiversityPac.QNAME)) {
+            res = MwAirInterfaceDiversityPac.class;
+        } else if (qName.equals(MwPureEthernetStructurePac.QNAME)) {
+            res = MwPureEthernetStructurePac.class;
+        } else if (qName.equals(MwHybridMwStructurePac.QNAME)) {
+            res = MwHybridMwStructurePac.class;
+        } else if (qName.equals(MwEthernetContainerPac.QNAME)) {
+            res = MwEthernetContainerPac.class;
+        } else if (qName.equals(MwTdmContainerPac.QNAME)) {
+            res = MwTdmContainerPac.class;
+        }
+        LOG.info("Found QName {} mapped to {}", String.valueOf(qName), String.valueOf(res));
+		return res;
+	}
+
+    /*-----------------------------------------------------------------------------
+     * Reading problems for specific interface pacs
+     */
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal Id String of the interface
+     * @return number of alarms
+     */
+    private List<ProblemNotificationXml> readTheFaultsOfMwAirInterfacePac(UniversalId interfacePacUuid,
+            List<ProblemNotificationXml> resultList) {
+
+        final Class<MwAirInterfacePac> clazzPac = MwAirInterfacePac.class;
+        // final Class<MwAirInterfacePacKey> clazzPacKey = MwAirInterfacePacKey.class;
+        // final Class<AirInterfaceCurrentProblems> clazzProblems =
+        // AirInterfaceCurrentProblems.class;
+        // final Class<AirInterfaceCurrentProblemTypeG> clazzProblem =
+        // AirInterfaceCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+        		coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        // Step 2.2: construct data and the relative iid
+        InstanceIdentifier<AirInterfaceCurrentProblems> mwAirInterfaceIID = InstanceIdentifier
+                .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(interfacePacUuid))
+                .child(AirInterfaceCurrentProblems.class).build();
+
+        // Step 2.3: read to the config data store
+        AirInterfaceCurrentProblems problems = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwAirInterfaceIID);
+
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no AirInterfaceCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemList", interfacePacUuid);
+        } else {
+            for (AirInterfaceCurrentProblemTypeG problem : problems.getCurrentProblemList()) {
+                resultList.add(new ProblemNotificationXml(coreData.getMountpoint(), interfacePacUuid.getValue(),
+                        problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                        problem.getSequenceNumber().toString(), InternalDateAndTime.valueOf(problem.getTimeStamp())));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private List<ProblemNotificationXml> readTheFaultsOfMwEthernetContainerPac(UniversalId interfacePacUuid,
+            List<ProblemNotificationXml> resultList) {
+
+        final Class<MwEthernetContainerPac> clazzPac = MwEthernetContainerPac.class;
+        // final Class<MwEthernetContainerPacKey> clazzPacKey =
+        // MwEthernetContainerPacKey.class;
+        // final Class<EthernetContainerCurrentProblems> clazzProblems =
+        // EthernetContainerCurrentProblems.class;
+        // final Class<ContainerCurrentProblemTypeG> clazzProblem =
+        // ContainerCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        InstanceIdentifier<EthernetContainerCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(MwEthernetContainerPac.class, new MwEthernetContainerPacKey(interfacePacUuid))
+                .child(EthernetContainerCurrentProblems.class).build();
+
+        EthernetContainerCurrentProblems problems = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no EthernetContainerCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemsList", interfacePacUuid);
+        } else {
+            for (ContainerCurrentProblemTypeG problem : problems.getCurrentProblemList()) {
+                resultList.add(new ProblemNotificationXml(coreData.getMountpoint(), interfacePacUuid.getValue(),
+                        problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                        problem.getSequenceNumber().toString(), InternalDateAndTime.valueOf(problem.getTimeStamp())));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private List<ProblemNotificationXml> readTheFaultsOfMwAirInterfaceDiversityPac(UniversalId interfacePacUuid,
+            List<ProblemNotificationXml> resultList) {
+
+        final Class<MwAirInterfaceDiversityPac> clazzPac = MwAirInterfaceDiversityPac.class;
+        // final Class<MwAirInterfaceDiversityPacKey> clazzPacKey =
+        // MwAirInterfaceDiversityPacKey.class;
+        final Class<AirInterfaceDiversityCurrentProblems> clazzProblems = AirInterfaceDiversityCurrentProblems.class;
+        // final Class<AirInterfaceDiversityCurrentProblemTypeG> clazzProblem =
+        // AirInterfaceDiversityCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        InstanceIdentifier<AirInterfaceDiversityCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(clazzPac, new MwAirInterfaceDiversityPacKey(interfacePacUuid)).child(clazzProblems).build();
+
+        AirInterfaceDiversityCurrentProblems problems = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no AirInterfaceDiversityCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemList", interfacePacUuid);
+        } else {
+            for (AirInterfaceDiversityCurrentProblemTypeG problem : problems.getCurrentProblemList()) {
+                resultList.add(new ProblemNotificationXml(coreData.getMountpoint(), interfacePacUuid.getValue(),
+                        problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                        problem.getSequenceNumber().toString(), InternalDateAndTime.valueOf(problem.getTimeStamp())));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private List<ProblemNotificationXml> readTheFaultsOfMwPureEthernetStructurePac(UniversalId interfacePacUuid,
+            List<ProblemNotificationXml> resultList) {
+
+        final Class<MwPureEthernetStructurePac> clazzPac = MwPureEthernetStructurePac.class;
+        // final Class<MwPureEthernetStructurePacKey> clazzPacKey =
+        // MwPureEthernetStructurePacKey.class;
+        final Class<PureEthernetStructureCurrentProblems> clazzProblems = PureEthernetStructureCurrentProblems.class;
+        // final Class<StructureCurrentProblemTypeG> clazzProblem =
+        // StructureCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        InstanceIdentifier<PureEthernetStructureCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(clazzPac, new MwPureEthernetStructurePacKey(interfacePacUuid)).child(clazzProblems).build();
+
+        PureEthernetStructureCurrentProblems problems = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no PureEthernetStructureCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemsList", interfacePacUuid);
+        } else {
+            for (StructureCurrentProblemTypeG problem : problems.getCurrentProblemList()) {
+                resultList.add(new ProblemNotificationXml(coreData.getMountpoint(), interfacePacUuid.getValue(),
+                        problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                        problem.getSequenceNumber().toString(), InternalDateAndTime.valueOf(problem.getTimeStamp())));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private List<ProblemNotificationXml> readTheFaultsOfMwHybridMwStructurePac(UniversalId interfacePacUuid,
+            List<ProblemNotificationXml> resultList) {
+
+        final Class<MwHybridMwStructurePac> clazzPac = MwHybridMwStructurePac.class;
+        // final Class<MwHybridMwStructurePacKey> clazzPacKey =
+        // MwHybridMwStructurePacKey.class;
+        final Class<HybridMwStructureCurrentProblems> clazzProblems = HybridMwStructureCurrentProblems.class;
+        // final Class<HybridMwStructureCurrentProblemsG> clazzProblem =
+        // HybridMwStructureCurrentProblemsG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        InstanceIdentifier<HybridMwStructureCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(clazzPac, new MwHybridMwStructurePacKey(interfacePacUuid)).child(clazzProblems).build();
+
+        HybridMwStructureCurrentProblems problems = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no HybridMwStructureCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemsList", interfacePacUuid);
+        } else {
+            for (StructureCurrentProblemTypeG problem : problems.getCurrentProblemList()) {
+                resultList.add(new ProblemNotificationXml(coreData.getMountpoint(), interfacePacUuid.getValue(),
+                        problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                        problem.getSequenceNumber().toString(), InternalDateAndTime.valueOf(problem.getTimeStamp())));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces. TODO Goal for future implementation
+     * without usage of explicit new. Key is generated by newInstance() function
+     * here to verify this approach.
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     * @throws SecurityException
+     * @throws NoSuchMethodException
+     * @throws InvocationTargetException
+     * @throws IllegalArgumentException
+     * @throws IllegalAccessException
+     * @throws InstantiationException
+     */
+    private List<ProblemNotificationXml> readTheFaultsOfMwTdmContainerPac(UniversalId interfacePacUuid,
+            List<ProblemNotificationXml> resultList) {
+
+        final Class<MwTdmContainerPac> clazzPac = MwTdmContainerPac.class;
+        final Class<MwTdmContainerPacKey> clazzPacKey = MwTdmContainerPacKey.class;
+        final Class<TdmContainerCurrentProblems> clazzProblems = TdmContainerCurrentProblems.class;
+        // final Class<ContainerCurrentProblemTypeG> clazzProblem =
+        // ContainerCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        try {
+            // -- Specific part 1
+            Constructor<MwTdmContainerPacKey> cons = clazzPacKey.getConstructor(UniversalId.class); // Avoid new()
+            InstanceIdentifier<TdmContainerCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                    .builder(clazzPac, cons.newInstance(interfacePacUuid)).child(clazzProblems).build();
+
+            // -- Specific part 2
+            TdmContainerCurrentProblems problems = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                    LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+            if (problems == null) {
+                LOG.debug("DBRead Id {} no TdmContainerCurrentProblems", interfacePacUuid);
+            } else if (problems.getCurrentProblemList() == null) {
+                LOG.debug("DBRead Id {} empty CurrentProblemsList", interfacePacUuid);
+            } else {
+                // -- Specific part 3
+                for (ContainerCurrentProblemTypeG problem : problems.getCurrentProblemList()) {
+                    resultList.add(new ProblemNotificationXml(coreData.getMountpoint(), interfacePacUuid.getValue(),
+                            problem.getProblemName(), InternalSeverity.valueOf(problem.getProblemSeverity()),
+                            problem.getSequenceNumber().toString(),
+                            InternalDateAndTime.valueOf(problem.getTimeStamp())));
+                }
+            }
+        } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException
+                | IllegalArgumentException | InvocationTargetException e) {
+            LOG.warn("Could not reade instance of MwTdmContainerPacKey: ", e);
+        }
+        return resultList;
+    }
+
+    /*-----------------------------------------------------------------------------
+     * Performance related data
+     */
+
+    /**
+     * PM MwAirInterfacePac
+     *
+     * @param lp
+     * @return
+     */
+    private List<ExtendedAirInterfaceHistoricalPerformanceType1211p> readTheHistoricalPerformanceDataOfMwAirInterfacePac(
+            Lp lp) {
+
+        String uuId = lp.getUuid().getValue();
+
+        List<ExtendedAirInterfaceHistoricalPerformanceType1211p> resultList = new ArrayList<>();
+        LOG.debug("DBRead Get {} MWAirInterfacePac: {}", coreData.getMountpoint(), uuId);
+        // ----
+        UniversalId mwAirInterfacePacuuId = new UniversalId(uuId);
+        // Step 2.1: construct data and the relative iid
+        InstanceIdentifier<AirInterfaceConfiguration> mwAirInterfaceConfigurationIID = InstanceIdentifier
+                .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(mwAirInterfacePacuuId))
+                .child(AirInterfaceConfiguration.class).build();
+        AirInterfaceConfiguration airConfiguration = GenericTransactionUtils.readData(coreData.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwAirInterfaceConfigurationIID);
+
+        if (airConfiguration == null) {
+            LOG.debug("DBRead MWAirInterfacePac Id {} no AirInterfaceConfiguration", mwAirInterfacePacuuId);
+
+        } else {
+            // Step 2.2: construct data and the relative iid
+            InstanceIdentifier<AirInterfaceHistoricalPerformances> mwAirInterfaceHistoricalPerformanceIID = InstanceIdentifier
+                    .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(mwAirInterfacePacuuId))
+                    .child(AirInterfaceHistoricalPerformances.class).build();
+
+            // Step 2.3: read to the config data store
+            AirInterfaceHistoricalPerformances airHistoricalPerformanceData = GenericTransactionUtils.readData(
+            		coreData.getDataBroker(), LogicalDatastoreType.OPERATIONAL, mwAirInterfaceHistoricalPerformanceIID);
+
+            if (airHistoricalPerformanceData == null) {
+                LOG.debug("DBRead MWAirInterfacePac Id {} no AirInterfaceHistoricalPerformances",
+                        mwAirInterfacePacuuId);
+            } else {
+                // org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170320.air._interface.historical.performances.g.HistoricalPerformanceDataList
+                List<org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.air._interface.historical.performances.g.HistoricalPerformanceDataList> airHistPMList = airHistoricalPerformanceData
+                        .getHistoricalPerformanceDataList();
+                LOG.debug("DBRead MWAirInterfacePac Id {} Records intermediate: {}", mwAirInterfacePacuuId,
+                        airHistPMList.size());
+                if (airHistPMList != null) {
+                    for (AirInterfaceHistoricalPerformanceTypeG pmRecord : airHistoricalPerformanceData
+                            .getHistoricalPerformanceDataList()) {
+                        resultList.add(new ExtendedAirInterfaceHistoricalPerformanceType1211p(pmRecord, airConfiguration));
+                    }
+                }
+            }
+        }
+        LOG.debug("DBRead MWAirInterfacePac Id {} Records result: {}", mwAirInterfacePacuuId, resultList.size());
+        return resultList;
+    }
+
+    private List<ContainerHistoricalPerformanceTypeG> readTheHistoricalPerformanceDataOfEthernetContainer(Lp lp) {
+
+        final String myName = "MWEthernetContainerPac";
+        String uuId = lp.getUuid().getValue();
+
+        List<ContainerHistoricalPerformanceTypeG> resultList = new ArrayList<>();
+        LOG.debug("DBRead Get {} : {}", coreData.getMountpoint(), myName, uuId);
+        // ----
+        UniversalId ethContainerPacuuId = new UniversalId(uuId);
+        // Step 2.2: construct data and the relative iid
+        InstanceIdentifier<EthernetContainerHistoricalPerformances> ethContainerIID = InstanceIdentifier
+                .builder(MwEthernetContainerPac.class, new MwEthernetContainerPacKey(ethContainerPacuuId))
+                .child(EthernetContainerHistoricalPerformances.class).build();
+
+        // Step 2.3: read to the config data store
+        EthernetContainerHistoricalPerformances ethContainerHistoricalPerformanceData = GenericTransactionUtils
+                .readData(coreData.getDataBroker(), LogicalDatastoreType.OPERATIONAL, ethContainerIID);
+
+        if (ethContainerHistoricalPerformanceData == null) {
+            LOG.debug("DBRead {} Id {} no HistoricalPerformances", myName, ethContainerPacuuId);
+        } else {
+            // import
+            // org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170320.ethernet.container.historical.performances.g.HistoricalPerformanceDataList
+             List<org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ethernet.container.historical.performances.g.HistoricalPerformanceDataList> airHistPMList = ethContainerHistoricalPerformanceData
+                    .getHistoricalPerformanceDataList();
+            LOG.debug("DBRead {} Id {} Records intermediate: {}", myName, ethContainerPacuuId, airHistPMList.size());
+            if (airHistPMList != null) {
+                for (ContainerHistoricalPerformanceTypeG pmRecord : airHistPMList) {
+                    resultList.add(pmRecord);
+                }
+            }
+        }
+        LOG.debug("DBRead {} Id {} Records result: {}", myName, ethContainerPacuuId, resultList.size());
+        return resultList;
+    }
+
+    public void onObjectCreationNotification(ObjectCreationNotification notification) {
+        LOG.debug("Got event of type :: {}", ObjectCreationNotification.class.getSimpleName());
+
+        ObjectCreationNotificationXml notificationXml = new ObjectCreationNotificationXml(coreData.getMountpoint(),
+                notification.getCounter().toString(),
+                InternalDateAndTime.valueOf(notification.getTimeStamp()),
+                notification.getObjectIdRef().getValue());
+        microwaveModelListener.onObjectCreationNotification(notificationXml);
+	}
+
+    @Override
+    public void onObjectDeletionNotification(ObjectDeletionNotification notification) {
+        LOG.debug("Got event of type :: {}", ObjectDeletionNotification.class.getSimpleName());
+
+        ObjectDeletionNotificationXml notificationXml = new ObjectDeletionNotificationXml(coreData.getMountpoint(),
+                notification.getCounter().toString(),
+                InternalDateAndTime.valueOf(notification.getTimeStamp()),
+                notification.getObjectIdRef().getValue()
+                );
+        microwaveModelListener.onObjectDeletionNotification(notificationXml);
+	}
+
+    public void onProblemNotification(ProblemNotification notification) {
+
+        LOG.debug("Got event of type :: {}", ProblemNotification.class.getSimpleName());
+
+        ProblemNotificationXml notificationXml = new ProblemNotificationXml(coreData.getMountpoint(), notification.getObjectIdRef().getValue(),
+                notification.getProblem(), InternalSeverity.valueOf(notification.getSeverity()),
+                notification.getCounter().toString(), InternalDateAndTime.valueOf(notification.getTimeStamp()));
+
+        microwaveModelListener.onProblemNotification(notificationXml);
+	}
+
+    @Override
+    public void onAttributeValueChangedNotification(AttributeValueChangedNotification notification) {
+        LOG.debug("Got event of type :: {}", AttributeValueChangedNotification.class.getSimpleName());
+
+        AttributeValueChangedNotificationXml notificationXml = new AttributeValueChangedNotificationXml(coreData.getMountpoint(),
+                String.valueOf(notification.getCounter()), InternalDateAndTime.valueOf(notification.getTimeStamp()),
+                notification.getObjectIdRef().getValue(), notification.getAttributeName(), notification.getNewValue());
+
+        microwaveModelListener.onAttributeValueChangedNotification(notificationXml);
+	}
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/toggleAlarmFilter/NotificationDelayFilter.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/toggleAlarmFilter/NotificationDelayFilter.java
new file mode 100644
index 0000000..fecdd3b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/toggleAlarmFilter/NotificationDelayFilter.java
@@ -0,0 +1,162 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.toggleAlarmFilter;
+
+import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class NotificationDelayFilter<T> implements AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(NotificationDelayFilter.class);
+
+    private final ConcurrentHashMap <String, NotificationWithServerTimeStamp<T>> problemItems;
+//    private final HashMap<String, NotificationWithServerTimeStamp<T>> nonProblemItems;
+    private final NotificationDelayedListener<T> timeoutListener;
+
+    private static long delay;
+    private static boolean enabled;
+
+    public static void setDelay(long l) {
+        NotificationDelayFilter.delay = l;
+    }
+
+    public static long getDelay() {
+        return NotificationDelayFilter.delay;
+    }
+
+    public static boolean isEnabled() {
+        return NotificationDelayFilter.enabled;
+    }
+
+    public static void setEnabled(boolean enabled) {
+        NotificationDelayFilter.enabled = enabled;
+    }
+
+    private final ScheduledExecutorService scheduler;
+    private final Runnable timerRunner = () -> onTick();
+
+    private final String nodeName;
+
+    public NotificationDelayFilter(String nodeName, NotificationDelayedListener<T> timeoutListener) {
+        this.nodeName = nodeName;
+        this.timeoutListener = timeoutListener;
+        this.problemItems = new ConcurrentHashMap <>();
+        this.scheduler = Executors.newScheduledThreadPool(1);
+        this.startTimer();
+    }
+
+    /**
+     * Push notification with a specific severity (everything except non-alarmed)
+     * @param problemName key
+     * @param notification related notification
+     */
+    public void pushAlarmNotification(String problemName, T notification) {
+        synchronized (problemItems) {
+
+            boolean cp = this.problemItems.containsKey(problemName);
+            if (!cp) {
+                // no alarm in entries => create entry and push the alarm currently
+                NotificationWithServerTimeStamp<T> item = new NotificationWithServerTimeStamp<>(
+                        notification);
+                LOG.debug("add event into list for node " + this.nodeName + " for alarm " + problemName + ": "
+                        + item.toString());
+                this.problemItems.put(problemName, item);
+                if (this.timeoutListener != null) {
+                    this.timeoutListener.onNotificationDelay(notification);
+                }
+            } else {
+                LOG.debug("clear contra event for node " + this.nodeName + " for alarm " + problemName);
+                this.problemItems.get(problemName).clrContraEvent();
+            }
+
+        }
+    }
+
+    /**
+     * Push notification with severity non-alarmed
+     * @param problemName key
+     * @param notification related notification
+     */
+    public void clearAlarmNotification(String problemName, T notification) {
+        synchronized (problemItems) {
+
+            boolean cp = this.problemItems.containsKey(problemName);
+            if (cp) {
+                LOG.debug("set contra event for alarm " + problemName);
+                this.problemItems.get(problemName).setContraEvent(notification);
+            } else {
+                // not in list => push directly through
+                if (this.timeoutListener != null) {
+                    this.timeoutListener.onNotificationDelay(notification);
+                }
+            }
+        }
+    }
+
+    private void startTimer() {
+        scheduler.scheduleAtFixedRate(timerRunner, 0, 1, TimeUnit.SECONDS);
+    }
+
+    private void stopTimer() {
+        scheduler.shutdown();
+    }
+
+    /**
+     * check for clearing item out of the list
+     */
+    private void onTick() {
+        long now = System.currentTimeMillis();
+        try {
+
+            synchronized (problemItems) {
+
+                for (Entry<String, NotificationWithServerTimeStamp<T>> entry : problemItems
+                        .entrySet()) {
+                    NotificationWithServerTimeStamp<T> value = entry.getValue();
+                    if (value.isStable(now)) {
+                        // send contra Alarm if exists
+                        if (value.getContraAlarmNotification() != null) {
+                            if (this.timeoutListener != null) {
+                                this.timeoutListener.onNotificationDelay(value.getContraAlarmNotification());
+                            }
+                        }
+                        problemItems.remove(entry.getKey());
+                        LOG.debug("removing entry for "+this.nodeName+" for alarm " + entry.getKey());
+                    } else {
+                        LOG.trace("currently state is still unstable for alarm " + entry.getKey());
+                    }
+                }
+
+            }
+        } catch (Exception e) {
+            //Prevent stopping the task
+            LOG.warn("Exception during NotificationDelayFilter Task", e);
+        }
+    }
+
+    @Override
+    public void close() throws Exception {
+        this.stopTimer();
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/toggleAlarmFilter/NotificationDelayService.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/toggleAlarmFilter/NotificationDelayService.java
new file mode 100644
index 0000000..47482b2
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/toggleAlarmFilter/NotificationDelayService.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.toggleAlarmFilter;
+
+import java.util.HashMap;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.HtDevicemanagerConfiguration;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.IConfigChangedListener;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.ToggleAlarmConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class NotificationDelayService<T> implements AutoCloseable {
+    private static final Logger LOG = LoggerFactory.getLogger(NotificationDelayService.class);
+
+    private final HashMap<String, NotificationDelayFilter<T>> filters;
+
+    public NotificationDelayFilter<T> getInstance(String nodeName, NotificationDelayedListener<T> eventListener) {
+        NotificationDelayFilter<T> filter = filters.getOrDefault(nodeName, null);
+
+        LOG.trace("nodeName={}, filter!=null? {}", nodeName, filter != null);
+        if (filter == null) {
+            filter = new NotificationDelayFilter<>(nodeName, eventListener);
+            this.filters.put(nodeName, filter);
+        }
+        return filter;
+    }
+
+    public NotificationDelayService(HtDevicemanagerConfiguration htconfig) {
+        this.filters = new HashMap<>();
+        htconfig.registerConfigChangedListener(configChangedListener);
+        NotificationDelayFilter.setDelay(htconfig.getToggleAlarm().getDelay());
+        NotificationDelayFilter.setEnabled(htconfig.getToggleAlarm().isEnabled());
+    }
+
+    private final IConfigChangedListener configChangedListener = () -> {
+        ToggleAlarmConfig cfg = ToggleAlarmConfig.reload();
+        NotificationDelayFilter.setDelay(cfg.getDelay());
+        NotificationDelayFilter.setEnabled(cfg.isEnabled());
+    };
+
+    @Override
+    public void close() throws Exception {
+        // close all filters
+        for (NotificationDelayFilter<T> filter : this.filters.values()) {
+            filter.close();
+        }
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/toggleAlarmFilter/NotificationDelayedListener.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/toggleAlarmFilter/NotificationDelayedListener.java
new file mode 100644
index 0000000..04276c9
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/toggleAlarmFilter/NotificationDelayedListener.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.toggleAlarmFilter;
+
+public interface NotificationDelayedListener<T> {
+
+	public void onNotificationDelay(T notification);
+
+}
+
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/toggleAlarmFilter/NotificationWithServerTimeStamp.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/toggleAlarmFilter/NotificationWithServerTimeStamp.java
new file mode 100644
index 0000000..6631cbe
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/toggleAlarmFilter/NotificationWithServerTimeStamp.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.toggleAlarmFilter;
+
+public class NotificationWithServerTimeStamp<T2> {
+    private final T2 alarmNotification;
+    private T2 contraAlarmNotification;
+    private final long timestampStart;
+    private long timestamp;
+
+    public NotificationWithServerTimeStamp(T2 n) {
+        this(n, System.currentTimeMillis());
+    }
+
+    public NotificationWithServerTimeStamp(T2 n, long ts) {
+        this.alarmNotification = n;
+        this.contraAlarmNotification = null;
+        this.timestamp = ts;
+        this.timestampStart=ts;
+    }
+
+    @SuppressWarnings("unused")
+    public long getStartTime() {
+        return this.timestampStart;
+    }
+    public void refresh() {
+        this.refresh(System.currentTimeMillis());
+    }
+
+    public void refresh(long ts) {
+        this.timestamp = ts;
+    }
+
+    public void setContraEvent(T2 notification) {
+        this.contraAlarmNotification = notification;
+        this.refresh();
+    }
+
+    public void clrContraEvent() {
+        this.contraAlarmNotification = null;
+        this.refresh();
+    }
+
+    public boolean isStable(long now) {
+        return this.timestamp + NotificationDelayFilter.getDelay() < now;
+    }
+
+    @SuppressWarnings("unused")
+    public T2 getAlarmNotification() {
+        return this.alarmNotification;
+    }
+
+    public T2 getContraAlarmNotification() {
+        return this.contraAlarmNotification;
+    }
+
+    @Override
+    public String toString() {
+        return "NotificationWithServerTimeStamp [alarmNotification=" + alarmNotification
+                + ", contraAlarmNotification=" + contraAlarmNotification + ", timestampStart=" + timestampStart
+                + ", timestamp=" + timestamp + "]";
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/BaseSubConfig.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/BaseSubConfig.java
new file mode 100644
index 0000000..88dde50
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/BaseSubConfig.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.config;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.IniConfigurationFile;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.IniConfigurationFile.ConversionException;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.IniConfigurationFile.Section;
+
+public class BaseSubConfig {
+
+    private final Section subconfig;
+    private final ISubConfigHandler configHandler;
+    private final IniConfigurationFile config;
+
+    protected Section getSubConfig() {
+        return this.subconfig;
+    }
+    protected ISubConfigHandler getConfigHandler() {
+        return this.configHandler;
+    }
+    protected IniConfigurationFile getConfig() {
+        return this.config;
+    }
+    public BaseSubConfig()
+    {
+        this.config=null;
+        this.subconfig=null;
+        this.configHandler=null;
+    }
+    public BaseSubConfig(IniConfigurationFile config, ISubConfigHandler configHandler,String section) {
+        this.config = config;
+        this.subconfig = config.subset(section);
+        this.configHandler = configHandler;
+    }
+    protected boolean hasKey(String key)
+    {
+        if(this.subconfig==null) {
+            return false;
+        }
+        return this.subconfig.hasKey(key);
+    }
+    protected String getString(String key,String def)
+    {
+        if(this.subconfig==null) {
+            return def;
+        }
+        String s;
+        //try
+        {
+            s=this.subconfig.getString(key, def);
+            if(s.isEmpty()) {
+                s=def;
+            }
+        }
+        /*catch(ConversionException e)
+        {
+            s=def;
+        }
+        */
+        return s;
+    }
+    protected boolean getBoolean(String key, boolean def) {
+        if(this.subconfig==null) {
+            return def;
+        }
+        boolean s;
+        try {
+            s=this.subconfig.getBoolean(key, def);
+        }
+        catch(ConversionException e)
+        {
+            s=def;
+        }
+        return s;
+    }
+    protected int getInt(String key, int def) {
+        if(this.subconfig==null) {
+            return def;
+        }
+        int s;
+        try {
+            s=this.subconfig.getInt(key, def);
+        }
+        catch(ConversionException e)
+        {
+            s=def;
+        }
+        return s;
+    }
+    protected long getLong(String key, long def) {
+        if(this.subconfig==null) {
+            return def;
+        }
+        long s;
+        try {
+            s=this.subconfig.getLong(key, def);
+        }
+        catch(ConversionException e)
+        {
+            s=def;
+        }
+        return s;
+    }
+    protected void save()
+    {
+        if(this.configHandler!=null) {
+            this.configHandler.save();
+        }
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/HtDevicemanagerConfiguration.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/HtDevicemanagerConfiguration.java
new file mode 100644
index 0000000..6167248
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/HtDevicemanagerConfiguration.java
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.config;
+
+import java.io.File;
+import java.io.IOException;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.IniConfigurationFile;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.IniConfigurationFile.ConfigurationException;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.AaiConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.DcaeConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.EsConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.PmConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.ToggleAlarmConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.util.ConfigFileObserver;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class HtDevicemanagerConfiguration {
+
+    private static final long FILE_POLL_INTERVAL_MS = 1000;
+
+    private static final Logger LOG = LoggerFactory.getLogger(HtDevicemanagerConfiguration.class);
+
+    private static final String CONFIGURATIONFILE = "etc/devicemanager.properties";
+    private static final String CONFIGURATIONTESTFILE = "test.properties"; // for
+    // testing
+
+    private static HtDevicemanagerConfiguration mObj;
+    private static HtDevicemanagerConfiguration mObjTest;
+    private static IniConfigurationFile mConfig;
+    private final ISubConfigHandler subconfigHandler = () -> mConfig.save();
+
+    private final ConfigFileObserver fileObserver;
+    private File mFile;
+
+    private HtDevicemanagerConfiguration(String filename) {
+
+        try {
+            this.mFile = new File(filename);
+            if (!this.mFile.exists()) {
+                if (!this.mFile.createNewFile()) {
+                    LOG.error("Can not create file {}", filename);
+                }
+            }
+            if (mConfig == null) {
+                mConfig = new IniConfigurationFile(this.mFile);
+            }
+            mConfig.load();
+
+        } catch (ConfigurationException e) {
+            LOG.error("Problem loading config values: {}", e.getMessage());
+        } catch (IOException e) {
+            LOG.error("Problem loading config file {} : {}", filename, e.getMessage());
+        }
+
+        this.fileObserver = new ConfigFileObserver(filename, FILE_POLL_INTERVAL_MS, mConfig);
+        this.fileObserver.start();
+    }
+
+
+    public static HtDevicemanagerConfiguration getConfiguration() {
+        if (mObj == null) {
+            mObj = new HtDevicemanagerConfiguration(CONFIGURATIONFILE);
+        }
+        return mObj;
+    }
+
+    public static HtDevicemanagerConfiguration getTestConfiguration() {
+        return getTestConfiguration(CONFIGURATIONTESTFILE);
+    }
+
+    public static HtDevicemanagerConfiguration getTestConfiguration(final String filename) {
+        if (mObjTest == null) {
+            mObjTest = new HtDevicemanagerConfiguration(filename);
+        }
+        return mObjTest;
+    }
+
+    public IniConfigurationFile getMConfig() {
+        return mConfig;
+    }
+
+    public void registerConfigChangedListener(IConfigChangedListener l) {
+        this.fileObserver.registerConfigChangedListener(l);
+    }
+
+    public void unregisterConfigChangedListener(IConfigChangedListener l) {
+        this.fileObserver.unregisterConfigChangedListener(l);
+    }
+
+    @Override
+    protected void finalize() throws Throwable {
+        if (this.fileObserver != null) {
+            this.fileObserver.interrupt();
+        }
+        super.finalize();
+    }
+
+    public DcaeConfig getDcae() {
+        return DcaeConfig.getDcae(mConfig, this.subconfigHandler);
+    }
+
+    public AaiConfig getAai() {
+        return AaiConfig.getAai(mConfig, this.subconfigHandler);
+    }
+
+    public EsConfig getEs() {
+        return EsConfig.getEs(mConfig, this.subconfigHandler);
+    }
+
+    public PmConfig getPm() {
+        return PmConfig.getPm(mConfig, this.subconfigHandler);
+    }
+
+    public ToggleAlarmConfig getToggleAlarm() {
+        return ToggleAlarmConfig.getTa(mConfig, this.subconfigHandler);
+    }
+
+    public ISubConfigHandler getSubconfigHandler() {
+        return subconfigHandler;
+    }
+
+    public static void clear() {
+        mObj = null;
+        mObjTest = null;
+        DcaeConfig.clear();
+        AaiConfig.clear();
+        EsConfig.clear();
+        PmConfig.clear();
+        ToggleAlarmConfig.clear();
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/IConfigChangedListener.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/IConfigChangedListener.java
new file mode 100644
index 0000000..704841c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/IConfigChangedListener.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.config;
+
+public interface IConfigChangedListener {
+    void onConfigChanged();
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/ISubConfigHandler.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/ISubConfigHandler.java
new file mode 100644
index 0000000..c1f67f0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/ISubConfigHandler.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.config;
+
+public interface ISubConfigHandler {
+    void save();
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/AaiClientPropertiesFile.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/AaiClientPropertiesFile.java
new file mode 100644
index 0000000..7912f04
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/AaiClientPropertiesFile.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+public class AaiClientPropertiesFile{
+
+    private final File mFile;
+    private String mPCKS12CertFilename;
+    private String mPCKS12Passphrase;
+    private boolean mTrustInsecureSSL;
+    private String mApplicationIdentifier;
+    private String mRemoteUrl;
+    private int mConnectionTimeout;
+    private int mReadTimeout;
+
+    public String getFilename()
+    { return this.mFile.getAbsolutePath();    }
+    public String getPCKS12CertFilename()
+    {return this.mPCKS12CertFilename;}
+    public String getPCKS12Passphrase()
+    {return this.mPCKS12Passphrase;    }
+    public boolean trustInsecureSSL()
+    {return this.mTrustInsecureSSL;}
+    public String getApplicationIdentifier()
+    {return this.mApplicationIdentifier;}
+    public String getRemoteUrl()
+    {return this.mRemoteUrl;}
+    public int getConnectionTimeout()
+    {return this.mConnectionTimeout;}
+    public int getReadTimeout()
+    {return this.mReadTimeout;}
+
+    public boolean exists()
+    {return this.mFile.exists();}
+    public AaiClientPropertiesFile(String filename)
+    {
+        this.mFile=new File(filename);
+    }
+    public void load() throws IOException,NumberFormatException
+    {
+        Properties defaultProps = new Properties();
+        FileInputStream in = new FileInputStream(this.mFile);
+        defaultProps.load(in);
+        this.mPCKS12CertFilename=defaultProps.getProperty("org.onap.ccsdk.sli.adaptors.aai.ssl.key",null);
+        this.mPCKS12Passphrase=defaultProps.getProperty("org.onap.ccsdk.sli.adaptors.aai.ssl.key.psswd",null);
+        this.mTrustInsecureSSL=defaultProps.getProperty("org.onap.ccsdk.sli.adaptors.aai.host.certificate.ignore","false").equals("true");
+        this.mApplicationIdentifier=defaultProps.getProperty("org.onap.ccsdk.sli.adaptors.aai.application",null);
+        this.mRemoteUrl=defaultProps.getProperty("org.onap.ccsdk.sli.adaptors.aai.uri",null);
+        this.mConnectionTimeout=Integer.parseInt(defaultProps.getProperty("connection.timeout","60000"));
+        this.mReadTimeout=Integer.parseInt(defaultProps.getProperty("read.timeout","60000"));
+        in.close();
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/AaiConfig.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/AaiConfig.java
new file mode 100644
index 0000000..b30b327
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/AaiConfig.java
@@ -0,0 +1,467 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl;
+
+import java.io.IOException;
+import java.util.Base64;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import javax.annotation.Nullable;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.IniConfigurationFile;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.IniConfigurationFile.ConfigurationException;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.BaseSubConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.ISubConfigHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AaiConfig extends BaseSubConfig {
+
+    private static final Logger LOG = LoggerFactory.getLogger(AaiConfig.class);
+
+    private static final String SECTION_MARKER_AAI = "aai";
+
+    private static final String PROPERTY_KEY_AAIPROP_FILE ="aaiPropertiesFile";
+    private static final String PROPERTY_KEY_BASEURL = "aaiUrl";
+    private static final String PROPERTY_KEY_USERCREDENTIALS = "aaiUserCredentials";
+    private static final String PROPERTY_KEY_HEADERS = "aaiHeaders";
+    private static final String PROPERTY_KEY_DELETEONMOUNTPOINTREMOVED = "aaiDeleteOnMountpointRemove";
+    private static final String PROPERTY_KEY_TRUSTALLCERTS = "aaiTrustAllCerts";
+    private static final String PROPERTY_KEY_APIVERSION = "aaiApiVersion";
+    private static final String PROPERTY_KEY_PCKS12CERTFILENAME = "aaiPcks12ClientCertFile";
+    private static final String PROPERTY_KEY_PCKS12PASSPHRASE = "aaiPcks12ClientCertPassphrase";
+    private static final String PROPERTY_KEY_CONNECTIONTIMEOUT = "aaiClientConnectionTimeout";
+    private static final String PROPERTY_KEY_APPLICATIONID = "aaiApplicationId";
+
+    private static final String DEFAULT_VALUE_AAIPROP_FILE ="null";
+    private static final String DEFAULT_VALUE_BASEURL = "off";
+    private static final String DEFAULT_VALUE_APPLICATION = "SDNR";
+    private static final String DEFAULT_VALUE_USERNAME = "";
+    private static final String DEFAULT_VALUE_USERPASSWORD = "";
+    private static final String DEFAULT_VALUE_USERCREDENTIALS = "";
+    private static final String DEFAULT_VALUE_HEADERS = "[\"X-TransactionId: 9999\"]";
+    private static final boolean DEFAULT_VALUE_DELETEONMOUNTPOINTREMOVED = false;
+    private static final boolean DEFAULT_VALUE_TRUSTALLCERTS = false;
+    private static final int DEFAULT_VALUE_CONNECTION_TIMEOUT = 30000;    //in ms
+    private static final String DEFAULT_VALUE_APIVERSION = "aai/v13";
+    private static final String DEFAULT_VALUE_PCKS12CERTFILENAME ="";
+    private static final String DEFAULT_VALUE_PCKS12PASSPHRASE = "";
+    private static final String DEFAULT_VALUE_APPLICATIONID = "SDNR";
+
+    private static final String HEADER_KEY_APPLICATION = "X-FromAppId";
+
+
+    private static AaiConfig aaiConfig;
+
+    private final String aaiPropFile;
+    private final String baseUrl;
+    private String apiVersion;
+    private String applicationIdentifier;
+    private String username;
+    private String password;
+    private String pcks12CertificateFilename;
+    private String pcks12CertificatePassphrase;
+    private int connectionTimeout;
+    private final boolean deleteOnMountPointRemoved;
+    private final boolean trustAllCerts;
+
+    public boolean doDeleteOnMountPointRemoved() {
+        return this.deleteOnMountPointRemoved;
+    }
+
+    private Map<String, String> headers;
+
+
+    private AaiConfig() {
+        super();
+        this.aaiPropFile = DEFAULT_VALUE_AAIPROP_FILE;
+        this.apiVersion=DEFAULT_VALUE_APIVERSION;
+        this.applicationIdentifier = DEFAULT_VALUE_APPLICATION;
+        this.baseUrl = DEFAULT_VALUE_BASEURL;
+        this.username = DEFAULT_VALUE_USERNAME;
+        this.password = DEFAULT_VALUE_USERPASSWORD;
+        this.deleteOnMountPointRemoved = DEFAULT_VALUE_DELETEONMOUNTPOINTREMOVED;
+        this.trustAllCerts=DEFAULT_VALUE_TRUSTALLCERTS;
+        this.applicationIdentifier=DEFAULT_VALUE_APPLICATIONID;
+    }
+
+    public AaiConfig(IniConfigurationFile config, ISubConfigHandler configHandler) throws ConfigurationException {
+        this(config, configHandler, true);
+    }
+
+    public AaiConfig(IniConfigurationFile config, ISubConfigHandler configHandler, boolean save)
+            throws ConfigurationException {
+        super(config, configHandler, SECTION_MARKER_AAI);
+        // load
+        this.aaiPropFile=this.getString(PROPERTY_KEY_AAIPROP_FILE, "");
+        AaiClientPropertiesFile aaiProperties = new AaiClientPropertiesFile(this.aaiPropFile);
+        String defBaseUrl=DEFAULT_VALUE_BASEURL;
+        String defPCKSCertFilename=DEFAULT_VALUE_PCKS12CERTFILENAME;
+        String defPCKSPassphrase=DEFAULT_VALUE_PCKS12PASSPHRASE;
+        String defApplicationId=DEFAULT_VALUE_APPLICATION;
+        int defconnectionTimeout=DEFAULT_VALUE_CONNECTION_TIMEOUT;
+        boolean loaded=false;
+        if(aaiProperties.exists())
+        {
+            LOG.debug("found another aaiclient.properties file");
+            try
+            {
+                aaiProperties.load();
+                loaded=true;
+                LOG.debug("loaded successfully");
+            }
+            catch(IOException|NumberFormatException e)
+            {
+                LOG.warn("problem loading external properties file "+aaiProperties.getFilename()+": "+e.getMessage());
+            }
+            if(loaded)    //preload new default values
+            {
+                String value;
+                value = aaiProperties.getRemoteUrl();
+                if (value != null) {
+                    defBaseUrl = value;
+                }
+                value = aaiProperties.getPCKS12CertFilename();
+                if (value != null) {
+                    defPCKSCertFilename = value;
+                }
+                value = aaiProperties.getPCKS12Passphrase();
+                if (value != null) {
+                    defPCKSPassphrase = value;
+                }
+                value = aaiProperties.getApplicationIdentifier();
+                if (value != null) {
+                    defApplicationId = value;
+                }
+            }
+        } else {
+            LOG.debug("no aaiclient.properties file found");
+        }
+
+
+        this.baseUrl = this.getString(PROPERTY_KEY_BASEURL, defBaseUrl);
+        this.apiVersion=this.getString(PROPERTY_KEY_APIVERSION,DEFAULT_VALUE_APIVERSION);
+        String credentials = this.getString(PROPERTY_KEY_USERCREDENTIALS, DEFAULT_VALUE_USERCREDENTIALS);
+        if (credentials.contains(":")) {
+            try {
+                this.username = credentials.split(":")[0];
+                this.password = credentials.split(":")[1];
+            } catch (Exception e) {
+                this.username = DEFAULT_VALUE_USERNAME;
+                this.password = DEFAULT_VALUE_USERPASSWORD;
+            }
+        } else {
+            this.username = DEFAULT_VALUE_USERNAME;
+            this.password = DEFAULT_VALUE_USERPASSWORD;
+        }
+        this.headers = _parseHeadersMap(this.getString(PROPERTY_KEY_HEADERS, DEFAULT_VALUE_HEADERS));
+        this.applicationIdentifier = this.getString(PROPERTY_KEY_APPLICATIONID, defApplicationId);
+        this.pcks12CertificateFilename=this.getString(PROPERTY_KEY_PCKS12CERTFILENAME, defPCKSCertFilename);
+        this.pcks12CertificatePassphrase=this.getString(PROPERTY_KEY_PCKS12PASSPHRASE, defPCKSPassphrase);
+        this.connectionTimeout = this.getInt(PROPERTY_KEY_CONNECTIONTIMEOUT, defconnectionTimeout);
+        this.deleteOnMountPointRemoved = this.getBoolean(PROPERTY_KEY_DELETEONMOUNTPOINTREMOVED,
+                DEFAULT_VALUE_DELETEONMOUNTPOINTREMOVED);
+        this.trustAllCerts = this.getBoolean(PROPERTY_KEY_TRUSTALLCERTS, DEFAULT_VALUE_TRUSTALLCERTS);
+
+        boolean missing=!this.hasKey(PROPERTY_KEY_APPLICATIONID)|| !this.hasKey(PROPERTY_KEY_CONNECTIONTIMEOUT)||
+                !this.hasKey(PROPERTY_KEY_TRUSTALLCERTS) || !this.hasKey(PROPERTY_KEY_PCKS12CERTFILENAME) ||
+                !this.hasKey(PROPERTY_KEY_PCKS12PASSPHRASE);
+        if(missing) {
+            LOG.debug("some params missing in config file");
+        }
+        //re-save if external aaiproperties file changed to show that params are submitted internally
+        if(missing || aaiConfig!=null && aaiConfig!=this && (
+                !propertyEquals(aaiConfig.aaiPropFile, this.aaiPropFile) ||
+                !propertyEquals(aaiConfig.pcks12CertificateFilename, this.pcks12CertificateFilename) ||
+                !propertyEquals(aaiConfig.pcks12CertificatePassphrase, this.pcks12CertificatePassphrase) ||
+                !propertyEquals(aaiConfig.connectionTimeout, this.connectionTimeout)
+
+                ))
+        {
+            LOG.debug("force saving because of reload changes from remote file");
+            save=true;
+        }
+        if (save) {
+            config.setProperty(SECTION_MARKER_AAI + "." + PROPERTY_KEY_BASEURL, this.baseUrl);
+            config.setProperty(SECTION_MARKER_AAI + "." + PROPERTY_KEY_USERCREDENTIALS,
+                    nullorempty(this.username) && nullorempty(this.password)?"":this.username + ":" + this.password);
+            config.setProperty(SECTION_MARKER_AAI + "." + PROPERTY_KEY_HEADERS, _printHeadersMap(this.headers));
+            config.setProperty(SECTION_MARKER_AAI + "." + PROPERTY_KEY_DELETEONMOUNTPOINTREMOVED,
+                    this.deleteOnMountPointRemoved);
+            config.setProperty(SECTION_MARKER_AAI + "." + PROPERTY_KEY_TRUSTALLCERTS, this.trustAllCerts);
+            config.setProperty(SECTION_MARKER_AAI+"."+PROPERTY_KEY_AAIPROP_FILE, this.aaiPropFile);
+            config.setProperty(SECTION_MARKER_AAI+"."+PROPERTY_KEY_APIVERSION,this.apiVersion);
+            config.setProperty(SECTION_MARKER_AAI+"."+PROPERTY_KEY_APPLICATIONID, this.applicationIdentifier);
+            config.setProperty(SECTION_MARKER_AAI+"."+PROPERTY_KEY_CONNECTIONTIMEOUT, this.connectionTimeout);
+            /*if(this.pcks12CertificateFilename !=null && !this.pcks12CertificateFilename.isEmpty() &&
+                    this.pcks12CertificatePassphrase!=null && !this.pcks12CertificatePassphrase.isEmpty())*/
+            {
+                LOG.debug("no client credentials to save");
+                config.setProperty(SECTION_MARKER_AAI+"."+PROPERTY_KEY_PCKS12CERTFILENAME, this.pcks12CertificateFilename);
+                config.setProperty(SECTION_MARKER_AAI+"."+PROPERTY_KEY_PCKS12PASSPHRASE, this.pcks12CertificatePassphrase);
+            }
+            LOG.debug("save");
+            this.save();
+        }
+    }
+
+    private boolean nullorempty(String s) {
+        return s==null || s.isEmpty();
+    }
+
+    public boolean isOff() {
+        return this.baseUrl == null || this.baseUrl.toLowerCase().equals("off");
+    }
+
+    private static boolean propertyEquals(final Object p1,final Object p2)
+    {
+        return p1==null && p2==null || p1 != null && p1.equals(p2);
+    }
+    private static boolean propertyEquals(final int p1,final int p2)
+    {
+        return p1==p2;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + (aaiPropFile == null ? 0 : aaiPropFile.hashCode());
+        result = prime * result + (apiVersion == null ? 0 : apiVersion.hashCode());
+        result = prime * result + (applicationIdentifier == null ? 0 : applicationIdentifier.hashCode());
+        result = prime * result + (baseUrl == null ? 0 : baseUrl.hashCode());
+        result = prime * result + connectionTimeout;
+        result = prime * result + (deleteOnMountPointRemoved ? 1231 : 1237);
+        result = prime * result + (headers == null ? 0 : headers.hashCode());
+        result = prime * result + (password == null ? 0 : password.hashCode());
+        result = prime * result + (pcks12CertificateFilename == null ? 0 : pcks12CertificateFilename.hashCode());
+        result = prime * result + (pcks12CertificatePassphrase == null ? 0 : pcks12CertificatePassphrase.hashCode());
+        result = prime * result + (trustAllCerts ? 1231 : 1237);
+        result = prime * result + (username == null ? 0 : username.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        AaiConfig other = (AaiConfig) obj;
+        if (aaiPropFile == null) {
+            if (other.aaiPropFile != null) {
+                return false;
+            }
+        } else if (!aaiPropFile.equals(other.aaiPropFile)) {
+            return false;
+        }
+        if (apiVersion == null) {
+            if (other.apiVersion != null) {
+                return false;
+            }
+        } else if (!apiVersion.equals(other.apiVersion)) {
+            return false;
+        }
+        if (applicationIdentifier == null) {
+            if (other.applicationIdentifier != null) {
+                return false;
+            }
+        } else if (!applicationIdentifier.equals(other.applicationIdentifier)) {
+            return false;
+        }
+        if (baseUrl == null) {
+            if (other.baseUrl != null) {
+                return false;
+            }
+        } else if (!baseUrl.equals(other.baseUrl)) {
+            return false;
+        }
+        if (connectionTimeout != other.connectionTimeout) {
+            return false;
+        }
+        if (deleteOnMountPointRemoved != other.deleteOnMountPointRemoved) {
+            return false;
+        }
+        if (headers == null) {
+            if (other.headers != null) {
+                return false;
+            }
+        } else if (!headers.equals(other.headers)) {
+            return false;
+        }
+        if (password == null) {
+            if (other.password != null) {
+                return false;
+            }
+        } else if (!password.equals(other.password)) {
+            return false;
+        }
+        if (pcks12CertificateFilename == null) {
+            if (other.pcks12CertificateFilename != null) {
+                return false;
+            }
+        } else if (!pcks12CertificateFilename.equals(other.pcks12CertificateFilename)) {
+            return false;
+        }
+        if (pcks12CertificatePassphrase == null) {
+            if (other.pcks12CertificatePassphrase != null) {
+                return false;
+            }
+        } else if (!pcks12CertificatePassphrase.equals(other.pcks12CertificatePassphrase)) {
+            return false;
+        }
+        if (trustAllCerts != other.trustAllCerts) {
+            return false;
+        }
+        if (username == null) {
+            if (other.username != null) {
+                return false;
+            }
+        } else if (!username.equals(other.username)) {
+            return false;
+        }
+        return true;
+    }
+
+    public String getBaseUrl() {
+        String url=this.baseUrl;
+        if(!url.endsWith("/")) {
+            url+="/";
+        }
+        if(this.apiVersion.startsWith("/")) {
+            this.apiVersion=this.apiVersion.substring(1);
+        }
+        return url+this.apiVersion;
+    }
+
+    public Map<String, String> getHeaders() {
+        if (this.headers == null) {
+            this.headers = new HashMap<>();
+        }
+        this.headers.put(HEADER_KEY_APPLICATION, this.applicationIdentifier);
+        String s = this.headers.getOrDefault("Authorization", null);
+        if (nullorempty(s) && !nullorempty(this.username) && !nullorempty(this.password)) {
+            this.headers.put("Authorization", "Basic "
+                    + new String(Base64.getEncoder().encode((this.username + ":" + this.password).getBytes())));
+        }
+        return this.headers;
+    }
+
+    @Override
+    public String toString() {
+        return "AaiConfig [aaiPropFile=" + aaiPropFile + ", baseUrl=" + baseUrl + ", apiVersion=" + apiVersion
+                + ", applicationIdentifier=" + applicationIdentifier + ", username=" + username + ", password="
+                + password + ", pcks12CertificateFilename=" + pcks12CertificateFilename
+                + ", pcks12CertificatePassphrase=" + pcks12CertificatePassphrase + ", connectionTimeout="
+                + connectionTimeout + ", deleteOnMountPointRemoved=" + deleteOnMountPointRemoved + ", trustAllCerts="
+                + trustAllCerts + ", headers=" + this.getHeaders() + "]";
+    }
+
+    private static String _printHeadersMap(Map<String, String> headers) {
+        String r = "[";
+        if (headers != null) {
+            int i = 0;
+            for (Entry<String, String> entry : headers.entrySet()) {
+                if (i > 0) {
+                    r += ",";
+                }
+                r += "\"" + entry.getKey() + ":" + entry.getValue() + "\"";
+                i++;
+            }
+        }
+        r += "]";
+        return r;
+    }
+
+    private static Map<String, String> _parseHeadersMap(String s) throws JSONException {
+        Map<String, String> r = new HashMap<>();
+        JSONArray a = new JSONArray(s);
+        if (a != null && a.length() > 0) {
+            for (int i = 0; i < a.length(); i++) {
+                String item = a.getString(i);
+                String[] hlp = item.split(":");
+                if (hlp.length > 1) {
+                    r.put(hlp[0], hlp[1]);
+                }
+            }
+        }
+        return r;
+    }
+
+    public static boolean isInstantiated() {
+        return aaiConfig != null;
+    }
+
+    public static AaiConfig getDefaultConfiguration() {
+        return new AaiConfig();
+    }
+
+    public static AaiConfig getAai(IniConfigurationFile config, ISubConfigHandler configHandler) {
+        if (aaiConfig == null) {
+            try {
+                aaiConfig = new AaiConfig(config, configHandler);
+            } catch (ConfigurationException e) {
+                aaiConfig = AaiConfig.getDefaultConfiguration();
+            }
+        }
+        return aaiConfig;
+    }
+
+    public static @Nullable AaiConfig reload() {
+        if (aaiConfig == null) {
+            return null;
+        }
+        AaiConfig tmpConfig;
+        try {
+            tmpConfig = new AaiConfig(aaiConfig.getConfig(), aaiConfig.getConfigHandler(), false);
+        } catch (ConfigurationException e) {
+            tmpConfig = AaiConfig.getDefaultConfiguration();
+            LOG.warn("problem loading config: "+e.getMessage());
+        }
+        aaiConfig = tmpConfig;
+        return aaiConfig;
+    }
+
+    public boolean getTrustAll() {
+        return this.trustAllCerts;
+    }
+
+    public String getPcks12CertificateFilename() {
+        return this.pcks12CertificateFilename;
+    }
+
+    public String getPcks12CertificatePassphrase() {
+        return this.pcks12CertificatePassphrase;
+    }
+
+    public int getConnectionTimeout() {
+        return this.connectionTimeout;
+    }
+
+    public static void clear() {
+        aaiConfig=null;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/AkkaConfig.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/AkkaConfig.java
new file mode 100644
index 0000000..6c416a2
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/AkkaConfig.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl;
+
+import com.typesafe.config.Config;
+import com.typesafe.config.ConfigFactory;
+import java.io.File;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.util.ClusterConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AkkaConfig {
+
+    @SuppressWarnings("unused")
+    private static final Logger LOG = LoggerFactory.getLogger(AkkaConfig.class);
+
+    private static final String DEFAULT_FILENAME = "configuration/initial/akka.conf";
+    private final String filename;
+    private ClusterConfig cluserConfig;
+
+    public ClusterConfig getClusterConfig() {
+        return this.cluserConfig;
+    }
+
+    private AkkaConfig(String filename) {
+        this.filename = filename;
+    }
+
+    public AkkaConfig() {
+        this(null);
+    }
+
+    @Override
+    public String toString() {
+        return "AkkaConfig [filename=" + filename + ", cluserConfig=" + cluserConfig + "]";
+    }
+
+    private void loadFromFile() throws Exception {
+        Config cfg = ConfigFactory.parseFile(new File(this.filename));
+        this.cluserConfig = new ClusterConfig(cfg.getConfig("odl-cluster-data").getConfig("akka").getConfig("cluster"));
+    }
+
+    public boolean isCluster() {
+        return this.cluserConfig != null ? this.cluserConfig.isCluster() : false;
+    }
+
+    public static AkkaConfig load() throws Exception {
+        return load(DEFAULT_FILENAME);
+    }
+
+    public static AkkaConfig load(String filename) throws Exception {
+        AkkaConfig cfg = new AkkaConfig(filename);
+        cfg.loadFromFile();
+        return cfg;
+    }
+
+    public boolean isSingleNode() {
+        return !this.isCluster();
+    }
+    public static AkkaConfig defaultSingleNodeConfig()
+    {
+        AkkaConfig cfg=new AkkaConfig();
+        cfg.cluserConfig=new ClusterConfig();
+        return cfg;
+    }
+
+    public static AkkaConfig parse(String content) throws Exception {
+        Config cfg = ConfigFactory.parseString(content);
+        AkkaConfig c = new AkkaConfig();
+        c.cluserConfig=new ClusterConfig(cfg.getConfig("odl-cluster-data").getConfig("akka").getConfig("cluster"));
+        return c;
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/DcaeConfig.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/DcaeConfig.java
new file mode 100644
index 0000000..669b211
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/DcaeConfig.java
@@ -0,0 +1,200 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.IniConfigurationFile;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.IniConfigurationFile.ConfigurationException;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.BaseSubConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.ISubConfigHandler;
+
+public class DcaeConfig extends BaseSubConfig {
+    private static final String SECTION_MARKER_DCAE = "dcae";
+
+    private static final String PROPERTY_KEY_EVENTRECEIVERURL = "dcaeUrl";
+    //private static final String PROPERTY_KEY_TESTCOLLECTOR = "dcaeTestCollector";
+    private static final String PROPERTY_KEY_USERCREDENTIALS = "dcaeUserCredentials";
+    private static final String PROPERTY_KEY_TIMERPERIOD = "dcaeHeartbeatPeriodSeconds";
+
+    private static final String DEFAULT_VALUE_EVENTRECEIVERURL = "off";
+    @SuppressWarnings("unused")
+    private static final String DEFAULT_VALUE_TESTCOLLECTOR = "no";
+    private static final String DEFAULT_VALUE_USERCREDENTIALS = "admin:admin";
+    private static final int DEFAULT_VALUE_TIMERPERIOD = 120;
+
+    private static DcaeConfig dcaeConfig = null; // Singleton of configuration data
+
+    private String eventReceiverUrl;
+    private String userCredentials;
+    private Integer timerPeriodSeconds;
+
+    private DcaeConfig() {
+        super();
+        this.eventReceiverUrl = DEFAULT_VALUE_EVENTRECEIVERURL;
+        this.userCredentials = DEFAULT_VALUE_USERCREDENTIALS;
+        this.timerPeriodSeconds = DEFAULT_VALUE_TIMERPERIOD;
+    }
+
+    private DcaeConfig(IniConfigurationFile config, ISubConfigHandler configHandler) throws ConfigurationException {
+        this(config, configHandler, true);
+    }
+
+    private DcaeConfig(IniConfigurationFile config, ISubConfigHandler configHandler, boolean save)
+            throws ConfigurationException {
+
+        super(config, configHandler, SECTION_MARKER_DCAE);
+
+        this.eventReceiverUrl = this.getString(PROPERTY_KEY_EVENTRECEIVERURL, DEFAULT_VALUE_EVENTRECEIVERURL);
+        this.userCredentials = this.getString(PROPERTY_KEY_USERCREDENTIALS, DEFAULT_VALUE_USERCREDENTIALS);
+        this.timerPeriodSeconds = this.getInt(PROPERTY_KEY_TIMERPERIOD, DEFAULT_VALUE_TIMERPERIOD);
+        if (save) {
+            config.setProperty(SECTION_MARKER_DCAE + "." + PROPERTY_KEY_EVENTRECEIVERURL, this.eventReceiverUrl);
+            config.setProperty(SECTION_MARKER_DCAE + "." + PROPERTY_KEY_USERCREDENTIALS, this.userCredentials);
+            config.setProperty(SECTION_MARKER_DCAE + "." + PROPERTY_KEY_TIMERPERIOD, this.timerPeriodSeconds);
+
+            this.save();
+        }
+    }
+
+    /*
+     * Setter
+     */
+
+    public void setEventReceiverUrl(String eventReveicerUrl) {
+        this.eventReceiverUrl = eventReveicerUrl;
+    }
+
+    public void setUserCredentials(String userCredentials) {
+        this.userCredentials = userCredentials;
+    }
+
+
+
+    public void setTimerPeriodSeconds(Integer timerPeriodSeconds) {
+        this.timerPeriodSeconds = timerPeriodSeconds;
+    }
+
+    /*
+     * Getter
+     */
+
+    public String getEventReveicerUrl() {
+        return eventReceiverUrl;
+    }
+
+    public String getUserCredentials() {
+        return userCredentials;
+    }
+
+
+    public Integer getTimerPeriodSeconds() {
+        return timerPeriodSeconds;
+    }
+
+    @Override
+    public String toString() {
+        return "DcaeConfig [eventReceiverUrl=" + eventReceiverUrl + ", userCredentials=" + userCredentials
+                + ", timerPeriodSeconds=" + timerPeriodSeconds + "]";
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + (eventReceiverUrl == null ? 0 : eventReceiverUrl.hashCode());
+        result = prime * result + (timerPeriodSeconds == null ? 0 : timerPeriodSeconds.hashCode());
+        result = prime * result + (userCredentials == null ? 0 : userCredentials.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        DcaeConfig other = (DcaeConfig) obj;
+        if (eventReceiverUrl == null) {
+            if (other.eventReceiverUrl != null) {
+                return false;
+            }
+        } else if (!eventReceiverUrl.equals(other.eventReceiverUrl)) {
+            return false;
+        }
+        if (timerPeriodSeconds == null) {
+            if (other.timerPeriodSeconds != null) {
+                return false;
+            }
+        } else if (!timerPeriodSeconds.equals(other.timerPeriodSeconds)) {
+            return false;
+        }
+        if (userCredentials == null) {
+            if (other.userCredentials != null) {
+                return false;
+            }
+        } else if (!userCredentials.equals(other.userCredentials)) {
+            return false;
+        }
+        return true;
+    }
+
+     /*-------------------------------------
+     * static Functions
+     */
+
+    public static DcaeConfig getDefaultConfiguration() {
+        return new DcaeConfig();
+    }
+
+    public static DcaeConfig getDcae(IniConfigurationFile config, ISubConfigHandler configHandler) {
+        if (dcaeConfig == null) {
+            try {
+                dcaeConfig = new DcaeConfig(config, configHandler);
+            } catch (ConfigurationException e) {
+                dcaeConfig = DcaeConfig.getDefaultConfiguration();
+            }
+        }
+        return dcaeConfig;
+    }
+
+    public static boolean isInstantiated() {
+        return dcaeConfig != null;
+    }
+
+    public static DcaeConfig reload() {
+        if (dcaeConfig == null) {
+            return null;
+        }
+        DcaeConfig tmpConfig;
+        try {
+            tmpConfig = new DcaeConfig(dcaeConfig.getConfig(), dcaeConfig.getConfigHandler(), false);
+        } catch (ConfigurationException e) {
+            tmpConfig = DcaeConfig.getDefaultConfiguration();
+        }
+        dcaeConfig = tmpConfig;
+        return dcaeConfig;
+    }
+
+    public static void clear() {
+        dcaeConfig=null;
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/EsConfig.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/EsConfig.java
new file mode 100644
index 0000000..958a0df
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/EsConfig.java
@@ -0,0 +1,219 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.Environment;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.IniConfigurationFile;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.IniConfigurationFile.ConfigurationException;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.BaseSubConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.ISubConfigHandler;
+
+public class EsConfig extends BaseSubConfig {
+
+    public static final String SECTION_MARKER_ES = "es";
+    public static final String ESDATATYPENAME = "database";
+    private static final String EMPTY = "empty";
+    private static final String PROPERTY_KEY_CLUSTER = "esCluster";
+    private static final String DEFAULT_VALUE_CLUSTER = "";
+    private static EsConfig esConfig;
+
+    private String cluster;
+    private String host;
+    private String node;
+    private String index;
+
+    private EsConfig() {
+        super();
+        this.host = EMPTY;
+        this.node = EMPTY;
+        this.index = EMPTY;
+        this.cluster = DEFAULT_VALUE_CLUSTER;
+    }
+
+    public EsConfig cloneWithIndex(String _index) {
+        EsConfig c = new EsConfig();
+        c.index = _index;
+        c.host = this.host;
+        c.node = this.node;
+        c.cluster = this.cluster;
+        return c;
+    }
+
+    public static String getESDATATYPENAME() {
+        return ESDATATYPENAME;
+    }
+
+    public String getCluster() {
+        return cluster;
+    }
+
+    public void setCluster(String cluster) {
+        this.cluster = cluster;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public void setHost(String host) {
+        this.host = host;
+    }
+
+    public String getNode() {
+        return node;
+    }
+
+    public void setNode(String node) {
+        this.node = node;
+    }
+
+    public String getIndex() {
+        return index;
+    }
+
+    public void setIndex(String index) {
+        this.index = index;
+    }
+
+    @Override
+    public String toString() {
+        return "EsConfig [cluster=" + cluster + ", host=" + host + ", node=" + node + ", index=" + index + "]";
+    }
+
+    public EsConfig(IniConfigurationFile config, ISubConfigHandler configHandler) throws ConfigurationException {
+        this(config, configHandler, true);
+    }
+
+    public EsConfig(IniConfigurationFile config, ISubConfigHandler configHandler, boolean save)
+            throws ConfigurationException {
+
+        super(config, configHandler, SECTION_MARKER_ES);
+        String clustername = Environment.getVar("$HOSTNAME");
+
+        String c = this.getString(PROPERTY_KEY_CLUSTER, clustername);
+        if (c != null && c.startsWith("$")) {
+            c = Environment.getVar(c);
+        }
+        this.cluster = c;
+        this.node = String.format("%s%s", this.cluster, "n1");
+        this.host = "localhost";
+
+        if (save) {
+            config.setProperty(SECTION_MARKER_ES + "." + PROPERTY_KEY_CLUSTER, this.cluster);
+            this.save();
+        }
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + (cluster == null ? 0 : cluster.hashCode());
+        result = prime * result + (host == null ? 0 : host.hashCode());
+        result = prime * result + (index == null ? 0 : index.hashCode());
+        result = prime * result + (node == null ? 0 : node.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        EsConfig other = (EsConfig) obj;
+        if (cluster == null) {
+            if (other.cluster != null) {
+                return false;
+            }
+        } else if (!cluster.equals(other.cluster)) {
+            return false;
+        }
+        if (host == null) {
+            if (other.host != null) {
+                return false;
+            }
+        } else if (!host.equals(other.host)) {
+            return false;
+        }
+        if (index == null) {
+            if (other.index != null) {
+                return false;
+            }
+        } else if (!index.equals(other.index)) {
+            return false;
+        }
+        if (node == null) {
+            if (other.node != null) {
+                return false;
+            }
+        } else if (!node.equals(other.node)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public void save()
+    {
+        this.getConfig().setProperty(SECTION_MARKER_ES + "." + PROPERTY_KEY_CLUSTER, this.cluster);
+        super.save();
+    }
+    public static boolean isInstantiated() {
+        return esConfig != null;
+    }
+
+    public static EsConfig getDefaultConfiguration() {
+        return new EsConfig();
+    }
+
+    public static EsConfig getEs(IniConfigurationFile config, ISubConfigHandler configHandler) {
+        if (esConfig == null) {
+            try {
+                esConfig = new EsConfig(config, configHandler);
+            } catch (ConfigurationException e) {
+                esConfig = EsConfig.getDefaultConfiguration();
+            }
+        }
+        return esConfig;
+    }
+
+    public static EsConfig reload() {
+        if (esConfig == null) {
+            return null;
+        }
+        EsConfig tmpConfig;
+        try {
+            tmpConfig = new EsConfig(esConfig.getConfig(), esConfig.getConfigHandler(), false);
+        } catch (ConfigurationException e) {
+            tmpConfig = EsConfig.getDefaultConfiguration();
+        }
+        esConfig = tmpConfig;
+        return esConfig;
+    }
+
+    public static void clear() {
+        esConfig=null;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/GeoConfig.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/GeoConfig.java
new file mode 100644
index 0000000..ac9c3cb
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/GeoConfig.java
@@ -0,0 +1,163 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl;
+
+import com.typesafe.config.Config;
+import com.typesafe.config.ConfigFactory;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.util.ClusterRoleInfo;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.util.ClusterRoleInfoCollection;
+
+public class GeoConfig {
+
+    private static final String DEFAULT_FILENAME = "configuration/initial/geo.conf";
+    private static final String LUMINA_ROOTNODENAME = "lumina-geo-cluster";
+    private final String filename;
+    private final String rootNodename;
+    private ClusterRoleInfoCollection primaryRoles;
+    private ClusterRoleInfoCollection secondayRoles;
+    private RolesTable rolesTable;
+
+    private GeoConfig() {
+        this(null);
+    }
+
+    private GeoConfig(String filename) {
+        this(filename, LUMINA_ROOTNODENAME);
+    }
+
+    private GeoConfig(String filename, String rootNodeName) {
+        this.filename = filename;
+        this.rootNodename = rootNodeName;
+    }
+
+    public static boolean fileExists() {
+        File f = new File(DEFAULT_FILENAME);
+        return f.exists();
+    }
+
+    public static GeoConfig load() throws Exception {
+        return load(DEFAULT_FILENAME);
+    }
+
+    public static GeoConfig load(String filename) throws Exception {
+        GeoConfig cfg = new GeoConfig(filename);
+        cfg._load();
+        return cfg;
+    }
+
+    private void _load() throws Exception {
+        this._load(ConfigFactory.parseFile(new File(this.filename)));
+    }
+
+    private void _load(Config cfg) throws Exception {
+        this.primaryRoles = new ClusterRoleInfoCollection();
+        List<String> a = cfg.getConfig(this.rootNodename).getStringList("primary_roles");
+
+        for (int i = 0; i < a.size(); i++) {
+            ClusterRoleInfo s = new ClusterRoleInfo(a.get(i));
+            this.primaryRoles.add(s);
+        }
+        this.secondayRoles = new ClusterRoleInfoCollection();
+        a = cfg.getConfig(this.rootNodename).getStringList("secondary_roles");
+        for (int i = 0; i < a.size(); i++) {
+            ClusterRoleInfo s = new ClusterRoleInfo(a.get(i));
+            this.secondayRoles.add(s);
+        }
+        this.checkDuplicateRoleEntries();
+        this.rolesTable = new RolesTable(cfg.getConfig(this.rootNodename).getConfigList("ip_roles_table"));
+    }
+
+    private void checkDuplicateRoleEntries() throws Exception {
+        ClusterRoleInfoCollection duplicateEntries = new ClusterRoleInfoCollection();
+        for (ClusterRoleInfo primaryRole : this.primaryRoles) {
+            if (this.secondayRoles.contains(primaryRole)) {
+                duplicateEntries.add(primaryRole);
+            }
+        }
+        if (duplicateEntries.size() > 0) {
+            throw new Exception("duplicate entries found: " + duplicateEntries.toString());
+        }
+
+    }
+
+    public static GeoConfig parse(String content) throws Exception {
+        GeoConfig cfg = new GeoConfig();
+        cfg._load(ConfigFactory.parseString(content));
+        return cfg;
+    }
+
+    public ClusterRoleInfoCollection getPrimaryRoles() {
+        return this.primaryRoles;
+    }
+
+    public ClusterRoleInfoCollection getSecondaryRoles() {
+        return this.secondayRoles;
+    }
+
+    public boolean isPrimary(ClusterRoleInfo roleMember) {
+        return !this.isSecondary(roleMember);
+    }
+
+    private boolean isSecondary(ClusterRoleInfo roleMember) {
+        if (roleMember == null) {
+            return false;
+        }
+        for (ClusterRoleInfo info : this.secondayRoles) {
+            if (info.equals(roleMember)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return "GeoConfig [filename=" + filename + ", rootNodename=" + rootNodename + ", primaryRoles=" + primaryRoles
+                + ", secondayRoles=" + secondayRoles + ", rolesTable=" + rolesTable + "]";
+    }
+
+    public static class RolesTableEntry {
+        private final ClusterRoleInfo role;
+        private final String ip;
+
+        public RolesTableEntry(Config c) throws Exception {
+            this.role = new ClusterRoleInfo(c.getString("role"));
+            this.ip = c.getString("ip");
+        }
+
+        @Override
+        public String toString() {
+            return "RolesTableEntry [role=" + role + ", ip=" + ip + "]";
+        }
+    }
+    public static class RolesTable extends ArrayList<RolesTableEntry> {
+        private static final long serialVersionUID = -9146218864237487506L;
+
+        public RolesTable(List<? extends Config> configList) throws Exception {
+            for (Config c : configList) {
+                this.add(new RolesTableEntry(c));
+            }
+        }
+
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/PmConfig.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/PmConfig.java
new file mode 100644
index 0000000..d710efe
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/PmConfig.java
@@ -0,0 +1,209 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.Environment;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.IniConfigurationFile;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.IniConfigurationFile.ConfigurationException;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.BaseSubConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.ISubConfigHandler;
+
+public class PmConfig extends BaseSubConfig {
+
+    private static final String SECTION_MARKER_PM = "pm";
+    private static final String PROPERTY_KEY_ENABLED = "pmEnabled";
+    private static final String PROPERTY_KEY_CLUSTER = "pmCluster";
+
+    private static final boolean DEFAULT_VALUE_ENABLED = true;
+    private static final String DEFAULT_VALUE_CLUSTER = "";
+    private static PmConfig pmConfig;
+
+    private boolean enabled;
+
+    public static final String ESDATATYPENAME = "database";
+
+    private static final String EMPTY = "empty";
+
+    private String cluster;
+    private String host;
+    private String node;
+
+    public static String getESDATATYPENAME() {
+        return ESDATATYPENAME;
+    }
+
+    public String getCluster() {
+        return cluster;
+    }
+
+    public void setCluster(String cluster) {
+        this.cluster = cluster;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public void setHost(String host) {
+        this.host = host;
+    }
+
+    public String getNode() {
+        return node;
+    }
+
+    public void setNode(String node) {
+        this.node = node;
+    }
+
+    public boolean isPerformanceManagerEnabled() {
+        return this.enabled;
+    }
+
+    public PmConfig(IniConfigurationFile config, ISubConfigHandler configHandler) throws ConfigurationException {
+        this(config, configHandler, true);
+    }
+
+    public PmConfig(IniConfigurationFile config, ISubConfigHandler configHandler, boolean save)
+            throws ConfigurationException {
+
+        super(config, configHandler, SECTION_MARKER_PM);
+        String clustername = Environment.getVar("$HOSTNAME");
+
+        this.enabled = this.getBoolean(PROPERTY_KEY_ENABLED, DEFAULT_VALUE_ENABLED);
+        String c = this.getString(PROPERTY_KEY_CLUSTER, clustername);
+        if (c != null && c.startsWith("$")) {
+            c = Environment.getVar(c);
+        }
+        this.cluster = c;
+        this.node = String.format("%s%s", this.cluster, "n1");
+        this.host = "localhost";
+
+        if (save) {
+            config.setProperty(SECTION_MARKER_PM + "." + PROPERTY_KEY_ENABLED, this.enabled);
+            config.setProperty(SECTION_MARKER_PM + "." + PROPERTY_KEY_CLUSTER, this.cluster);
+
+            this.save();
+        }
+    }
+
+    private PmConfig() {
+        super();
+        this.cluster = EMPTY;
+        this.host = EMPTY;
+        this.node = EMPTY;
+        this.enabled = DEFAULT_VALUE_ENABLED;
+    }
+
+
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + (cluster == null ? 0 : cluster.hashCode());
+        result = prime * result + (enabled ? 1231 : 1237);
+        result = prime * result + (host == null ? 0 : host.hashCode());
+        result = prime * result + (node == null ? 0 : node.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        PmConfig other = (PmConfig) obj;
+        if (cluster == null) {
+            if (other.cluster != null) {
+                return false;
+            }
+        } else if (!cluster.equals(other.cluster)) {
+            return false;
+        }
+        if (enabled != other.enabled) {
+            return false;
+        }
+        if (host == null) {
+            if (other.host != null) {
+                return false;
+            }
+        } else if (!host.equals(other.host)) {
+            return false;
+        }
+        if (node == null) {
+            if (other.node != null) {
+                return false;
+            }
+        } else if (!node.equals(other.node)) {
+            return false;
+        }
+        return true;
+    }
+
+    public static PmConfig getDefaultConfiguration() {
+        PmConfig c = new PmConfig();
+        c.enabled = DEFAULT_VALUE_ENABLED;
+        c.cluster = DEFAULT_VALUE_CLUSTER;
+        return c;
+    }
+
+    @Override
+    public String toString() {
+        return "PmConfig [enabled=" + enabled + ", cluster=" + cluster + ", host=" + host + ", node=" + node + "]";
+    }
+
+    public static boolean isInstantiated() {
+        return pmConfig != null;
+    }
+
+    public static PmConfig getPm(IniConfigurationFile config, ISubConfigHandler configHandler) {
+        if (pmConfig == null) {
+            try {
+                pmConfig = new PmConfig(config, configHandler);
+            } catch (ConfigurationException e) {
+                pmConfig = PmConfig.getDefaultConfiguration();
+            }
+        }
+        return pmConfig;
+    }
+
+    public static PmConfig reload() {
+        if (pmConfig == null) {
+            return null;
+        }
+        PmConfig tmpConfig;
+        try {
+            tmpConfig = new PmConfig(pmConfig.getConfig(), pmConfig.getConfigHandler(), false);
+        } catch (ConfigurationException e) {
+            tmpConfig = PmConfig.getDefaultConfiguration();
+        }
+        pmConfig = tmpConfig;
+        return pmConfig;
+    }
+
+    public static void clear() {
+        pmConfig=null;
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/ToggleAlarmConfig.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/ToggleAlarmConfig.java
new file mode 100644
index 0000000..da2f10a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/ToggleAlarmConfig.java
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.IniConfigurationFile;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.IniConfigurationFile.ConfigurationException;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.BaseSubConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.ISubConfigHandler;
+
+public class ToggleAlarmConfig extends BaseSubConfig{
+
+    private static final String SECTION_MARKER_TA = "toggleAlarmFilter";
+    private static final String PROPERTY_KEY_ENABLED = "taEnabled";
+    private static final String PROPERTY_KEY_DELAY = "taDelay";
+
+    private static final boolean DEFAULT_VALUE_ENABLED = true;
+    private static final long DEFAULT_VALUE_DELAY = 3000;  //in ms
+    private static ToggleAlarmConfig taConfig;
+    private boolean enabled;
+    private long delay;
+
+    public boolean isEnabled() {
+        return this.enabled;
+    }
+    public long getDelay() {
+        return this.delay;
+    }
+    private ToggleAlarmConfig() {
+        super();
+        this.enabled = DEFAULT_VALUE_ENABLED;
+        this.delay=DEFAULT_VALUE_DELAY;
+    }
+    public ToggleAlarmConfig(IniConfigurationFile config, ISubConfigHandler configHandler) throws ConfigurationException {
+        this(config, configHandler, true);
+    }
+
+    public ToggleAlarmConfig(IniConfigurationFile config, ISubConfigHandler configHandler, boolean save)
+            throws ConfigurationException {
+
+        super(config, configHandler, SECTION_MARKER_TA);
+
+        this.enabled = this.getBoolean(PROPERTY_KEY_ENABLED, DEFAULT_VALUE_ENABLED);
+        this.delay = this.getLong(PROPERTY_KEY_DELAY,DEFAULT_VALUE_DELAY);
+        if (save) {
+            config.setProperty(SECTION_MARKER_TA + "." + PROPERTY_KEY_ENABLED, this.enabled);
+            config.setProperty(SECTION_MARKER_TA + "." + PROPERTY_KEY_DELAY, this.delay);
+
+            this.save();
+        }
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + (int) (delay ^ delay >>> 32);
+        result = prime * result + (enabled ? 1231 : 1237);
+        return result;
+    }
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        ToggleAlarmConfig other = (ToggleAlarmConfig) obj;
+        if (delay != other.delay) {
+            return false;
+        }
+        if (enabled != other.enabled) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "ToggleAlarmConfig [enabled=" + enabled + ", delay=" + delay + "]";
+    }
+
+    public static ToggleAlarmConfig getDefaultConfiguration() {
+        ToggleAlarmConfig c = new ToggleAlarmConfig();
+        c.enabled = DEFAULT_VALUE_ENABLED;
+        c.delay = DEFAULT_VALUE_DELAY;
+        return c;
+    }
+    public static boolean isInstantiated() {
+        return taConfig != null;
+    }
+
+    public static ToggleAlarmConfig getTa(IniConfigurationFile config, ISubConfigHandler configHandler) {
+        if (taConfig == null) {
+            try {
+                taConfig = new ToggleAlarmConfig(config, configHandler);
+            } catch (ConfigurationException e) {
+                taConfig = ToggleAlarmConfig.getDefaultConfiguration();
+            }
+        }
+        return taConfig;
+    }
+
+    public static ToggleAlarmConfig reload() {
+        if (taConfig == null) {
+            return null;
+        }
+        ToggleAlarmConfig tmpConfig;
+        try {
+            tmpConfig = new ToggleAlarmConfig(taConfig.getConfig(), taConfig.getConfigHandler(), false);
+        } catch (ConfigurationException e) {
+            tmpConfig = ToggleAlarmConfig.getDefaultConfiguration();
+        }
+        taConfig = tmpConfig;
+        return taConfig;
+    }
+
+    public static void clear() {
+        taConfig=null;
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/util/ClusterConfig.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/util/ClusterConfig.java
new file mode 100644
index 0000000..7d3174b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/util/ClusterConfig.java
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.config.util;
+
+import com.typesafe.config.Config;
+import java.util.ArrayList;
+import java.util.List;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ClusterConfig {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ClusterConfig.class);
+
+    private final List<ClusterNodeInfo> seedNodes;
+    private final ClusterRoleInfoCollection roles;
+    private ClusterNodeInfo ismeInfo;
+
+    public static ClusterConfig defaultSingleNodeConfig()
+    {
+        ClusterConfig cfg=new ClusterConfig();
+        cfg.ismeInfo=ClusterNodeInfo.defaultSingleNodeInfo();
+        cfg.seedNodes.add(cfg.ismeInfo);
+        cfg.roles.add(ClusterRoleInfo.defaultSingleNodeRole());
+        return cfg;
+    }
+    public ClusterConfig()
+    {
+        this.seedNodes = new ArrayList<>();
+        this.roles = new ClusterRoleInfoCollection();
+
+    }
+    public ClusterConfig(Config o) throws Exception {
+        {
+            this.seedNodes = new ArrayList<>();
+            this.roles = new ClusterRoleInfoCollection();
+            List<String> a = o.getStringList("seed-nodes");
+            for (int i = 0; i < a.size(); i++) {
+                ClusterNodeInfo info = new ClusterNodeInfo(a.get(i));
+                this.seedNodes.add(info);
+            }
+            a = o.getStringList("roles");
+            for (int i = 0; i < a.size(); i++) {
+                ClusterRoleInfo s = new ClusterRoleInfo(a.get(i));
+                this.roles.add(s);
+            }
+            int idx = this.roles.get(0).getIndex() - 1;
+            if (idx >= 0 && idx < this.seedNodes.size()) {
+                this.ismeInfo = this.seedNodes.get(idx);
+            } else {
+                this.ismeInfo = null;
+            }
+        }
+
+    }
+
+    public boolean isCluster() {
+        return this.seedNodes != null ? this.seedNodes.size() > 1 : false;
+    }
+
+    public boolean isMe(ClusterNodeInfo i) {
+        return this.ismeInfo != null ? this.ismeInfo.equals(i) : false;
+    }
+
+    public List<ClusterNodeInfo> getSeedNodes() {
+        return this.seedNodes;
+    }
+
+    public String getHostName(String defaultValue) {
+        if (getRoleMemberIndex() > 0 && getRoleMemberIndex() <= seedNodes.size()) {
+            return this.seedNodes.get(getRoleMemberIndex()-1).getRemoteAddress();
+        } else {
+            LOG.warn("Seednode not available for roleMemberIndex {}. Using default {}",getRoleMember(), defaultValue);
+            return defaultValue;
+        }
+    }
+
+    public String getDBClusterName(String defaultValue) {
+        String r = null;
+        if (this.seedNodes != null && this.seedNodes.size() > 0) {
+            r = String.format("cluster-%s.%d", this.seedNodes.get(0).getRemoteAddress(), this.seedNodes.get(0).getPort());
+        }
+        if (r == null || r.isEmpty()) {
+            r = defaultValue;
+        }
+        return r;
+    }
+    public String getClusterSeedNodeName() {
+        return this.getClusterSeedNodeName("");
+    }
+    public String getClusterSeedNodeName(String defaultValue) {
+        int idx=this.getRoleMemberIndex()-1;
+        String r=null;
+        if(this.seedNodes!=null && idx>=0 && this.seedNodes.size()>0 && this.seedNodes.size()>idx)
+        {
+            r=this.seedNodes.get(idx).getSeedNodeName();
+        }
+        if (r == null || r.isEmpty()) {
+            r = defaultValue;
+        }
+        return r;
+    }
+    public int getRoleMemberIndex() {
+
+        ClusterRoleInfo role=this.roles.get("member");
+        return role!=null?role.getIndex():0;
+    }
+    public ClusterRoleInfo getRoleMember() {
+        return this.roles.get("member");
+    }
+
+    @Override
+    public String toString() {
+        return "ClusterConfig [seedNodes=" + seedNodes + ", roles=" + roles + ", ismeInfo=" + ismeInfo + "]";
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/util/ClusterNodeInfo.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/util/ClusterNodeInfo.java
new file mode 100644
index 0000000..53dcfd1
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/util/ClusterNodeInfo.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.config.util;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public  class ClusterNodeInfo {
+    private final String protocol;
+    private final String clusterName;
+    private final String remoteAdr;
+    private final int port;
+    private final String seedNodeName;
+
+    public static ClusterNodeInfo defaultSingleNodeInfo() {
+        return new ClusterNodeInfo("akka.tcp","opendaylight-cluster-data","127.0.0.1",2550);
+    }
+
+    public ClusterNodeInfo(String s) throws Exception {
+        final String regex = "([a-z.]*):\\/\\/([a-zA-Z0-9-]*)@([a-zA-Z0-9.-]*):([0-9]*)";
+        final Pattern pattern = Pattern.compile(regex);
+        final Matcher matcher = pattern.matcher(s);
+        if (!matcher.find()) {
+            throw new Exception("invalid seedNode format");
+        }
+        this.seedNodeName = matcher.group();
+        this.protocol = matcher.group(1);
+        this.clusterName = matcher.group(2);
+        this.remoteAdr = matcher.group(3);
+        this.port = Integer.parseInt(matcher.group(4));
+    }
+
+    public ClusterNodeInfo(String protocol, String clustername, String remoteadr, int port) {
+        this.protocol=protocol;
+        this.clusterName=clustername;
+        this.remoteAdr=remoteadr;
+        this.port=port;
+        this.seedNodeName=this.protocol+"://"+this.clusterName+"@"+this.remoteAdr+":"+this.port;
+    }
+
+    public String getProtocol() {
+        return protocol;
+    }
+
+    public String getClusterName() {
+        return clusterName;
+    }
+
+    public String getRemoteAddress() {
+        return remoteAdr;
+    }
+    public String getSeedNodeName() {
+        return seedNodeName;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    @Override
+    public String toString() {
+        return "ClusterNodeInfo [protocol=" + protocol + ", clusterName=" + clusterName + ", remoteAdr=" + remoteAdr
+                + ", port=" + port + ", seedNodeName=" + seedNodeName + "]";
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/util/ClusterRoleInfo.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/util/ClusterRoleInfo.java
new file mode 100644
index 0000000..fa2a21b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/util/ClusterRoleInfo.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.config.util;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class ClusterRoleInfo {
+    private final String Role;
+    private final int Index;
+
+    public ClusterRoleInfo(String s) throws Exception {
+        final String regex = "([a-zA-Z]*)-([0-9]*)";
+        final Pattern pattern = Pattern.compile(regex);
+        final Matcher matcher = pattern.matcher(s);
+        if (!matcher.find()) {
+            throw new Exception("unexpected role format:"+s);
+        }
+        this.Role = matcher.group(1);
+        this.Index = Integer.parseInt(matcher.group(2));
+    }
+
+    private ClusterRoleInfo(String role, int idx) {
+        this.Role=role;
+        this.Index=idx;
+    }
+
+    public static ClusterRoleInfo defaultSingleNodeRole() {
+        return new ClusterRoleInfo("member",1);
+    }
+
+    public String getRole() {
+        return Role;
+    }
+    public int getIndex() {
+        return Index;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + Index;
+        result = prime * result + (Role == null ? 0 : Role.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        ClusterRoleInfo other = (ClusterRoleInfo) obj;
+        if (Index != other.Index) {
+            return false;
+        }
+        if (Role == null) {
+            if (other.Role != null) {
+                return false;
+            }
+        } else if (!Role.equals(other.Role)) {
+            return false;
+        }
+        return true;
+    }
+    @Override
+    public String toString() {
+        return "ClusterRoleInfo [Role=" + Role + ", Index=" + Index + "]";
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/util/ClusterRoleInfoCollection.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/util/ClusterRoleInfoCollection.java
new file mode 100644
index 0000000..6cb81c2
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/util/ClusterRoleInfoCollection.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.config.util;
+
+import java.util.ArrayList;
+
+public class ClusterRoleInfoCollection extends ArrayList<ClusterRoleInfo> {
+    private static final long serialVersionUID = 1L;
+
+    public ClusterRoleInfo get(String role) {
+        for (ClusterRoleInfo info : this) {
+            if (info.getRole().equals(role)) {
+                return info;
+            }
+        }
+        return null;
+    }
+
+    public boolean contains(ClusterRoleInfo info) {
+        if (info == null) {
+            return false;
+        }
+        for (ClusterRoleInfo i : this) {
+            if (i.equals(info)) {
+                return true;
+            }
+        }
+        return false;
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/util/ConfigFileObserver.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/util/ConfigFileObserver.java
new file mode 100644
index 0000000..daa572a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/util/ConfigFileObserver.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.config.util;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.annotation.Nonnull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.FileWatchdog;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.IniConfigurationFile;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.IniConfigurationFile.ConfigurationException;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.IConfigChangedListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ConfigFileObserver extends FileWatchdog {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ConfigFileObserver.class);
+
+    private final List<IConfigChangedListener> mConfigChangedHandlers = new ArrayList<>();
+    private final IniConfigurationFile mConfig;
+
+    public ConfigFileObserver(String filename, long pollIntervallMs, IniConfigurationFile mConfig) {
+        super(filename);
+        this.setDelay(pollIntervallMs);
+        this.mConfig = mConfig;
+    }
+
+    @Override
+    protected void doOnChange() {
+
+        LOG.debug("property file has changed");
+        try {
+            mConfig.reLoad();
+            // push event to all listeners
+            for (IConfigChangedListener listener : this.mConfigChangedHandlers) {
+                listener.onConfigChanged();
+            }
+        } catch (ConfigurationException e) {
+            LOG.warn("error reloading config: " + e.getMessage());
+        }
+    }
+
+    public void registerConfigChangedListener(@Nonnull IConfigChangedListener l) {
+        if (!this.mConfigChangedHandlers.contains(l)) {
+            this.mConfigChangedHandlers.add(l);
+        }
+    }
+
+    public void unregisterConfigChangedListener(IConfigChangedListener l) {
+        this.mConfigChangedHandlers.remove(l);
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeMessages.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeMessages.java
new file mode 100644
index 0000000..5f3c1aa
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeMessages.java
@@ -0,0 +1,341 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+        ecompProvider.sendProblemNotification(ownKeyName, notificationXml);
+ * ECOMP Messages are generated an send to destination
+ *
+ * @author herbert
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.text.ParseException;
+import javax.annotation.Nullable;
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalSeverity;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InventoryInformation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCoreNetworkElementRepresentation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.NetconfTimeStamp;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DcaeMessages {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DcaeSenderImpl.class);
+
+    private static final String DCAE_NORMAL =  "NORMAL";
+    private static final String DCAE_MINOR =  "MINOR";
+    private static final String DCAE_WARNING =  "WARNING";
+    private static final String DCAE_CRITICAL =  "CRITICAL";
+    private static final String DCAE_MAJOR =  "MAJOR";
+
+    private static final String eventNamePrefix = "fault_Microwave_Radio_Alarms";
+    private static final String eventType = "Microwave_Radio_Alarms";
+    private static final String eventSourceType = "Microwave_Radio";
+
+    private static final String charset = "UTF-8";
+
+    private static final HostnameVerifier allHostsValid = (hostname, session) -> true;
+
+    private static final String CONTENT_TYPE_APPJSON = "application/json";
+
+    private static final NetconfTimeStamp NETCONFTIME_CONVERTER = NetconfTimeStamp.getConverter();
+
+    //Configurable parameters
+    private final DcaeSender dcaeSender;
+    private final int heartbeatIntervallSeconds;
+    private final String entityName;
+    private final DeviceManagerImpl deviceManager;
+
+    //Variables
+    private int heartbeatsequence = 0;
+
+    public DcaeMessages(DcaeSender ecompSender, String entityName, Integer heartbeatIntervallSeconds, DeviceManagerImpl deviceManager) {
+        this.dcaeSender = ecompSender;
+        this.entityName = entityName;
+        this.deviceManager = deviceManager;
+        this.heartbeatIntervallSeconds = heartbeatIntervallSeconds;
+    }
+
+    /**
+     * Create a heartbeat message.
+     * @return Result string with answer from server
+     */
+    public String postHeartBeat() {
+        String epochTimeMicrosecondsString = getEpochTimeMicroseconds();
+        String body = assembleHeartbeatFromTemplate(null,
+                epochTimeMicrosecondsString,
+                heartbeatsequence++,
+                NETCONFTIME_CONVERTER.getTimeStampAsNetconfString()).toString();
+        return dcaeSender.sendDcaePost( body);
+    }
+
+    /**
+     * ONF 1.2 Problem Notification
+     * @param mountPointName self-explaining
+     * @param notification Notification input
+     * @return String with answer
+     */
+
+    public String postNotification(String mountPointName, ProblemNotificationXml notification) {
+
+        String problemName = notification.getProblem();
+        String sequence = notification.getCounter();
+        String objId = notification.getObjectId();
+        String severity = convert( notification.getSeverity());
+        String timeStamp = convert( notification.getTimeStamp() );
+
+        String body = assembleEventNotificationFromTemplate(null,
+                timeStamp, sequence,
+                mountPointName, objId, problemName, severity, notification.getTimeStamp() ).toString();
+
+        return dcaeSender.sendDcaePost( body);
+    }
+
+    /**
+     * Setup a connection to URL with authorisation header
+     * @param url e.g. "https://plan.fritz.box:9092/ux/#" or "
+     * @param basicAuth authorisation header like "Basic SGVyYmVydDpIZXJiZXJ0"
+     * @param insertContentHeader
+     * @return Null in case of error or the URLConnection
+     * @throws IOException
+     * @throws MalformedURLException
+     */
+    static @Nullable HttpURLConnection openConnection( URL url, String basicAuth, boolean insertContentHeader, @Nullable SSLContext sc) throws MalformedURLException, IOException {
+
+        //Prepare the connection
+        HttpURLConnection newHttpConnection = null;
+        {
+            URLConnection newConnection = url.openConnection();
+            if (newConnection instanceof HttpURLConnection) {
+                LOG.debug("Setup connection to {} ", url.toString());
+
+                newHttpConnection = (HttpURLConnection)newConnection;
+
+                newHttpConnection.setDoOutput(true); // Triggers POST.
+                newHttpConnection.setRequestProperty("Accept-Charset", charset);
+                if (basicAuth != null) {
+                    newHttpConnection.setRequestProperty("Authorization", basicAuth);
+                }
+                if (insertContentHeader) {
+                    newHttpConnection.setRequestProperty("Content-Type", CONTENT_TYPE_APPJSON);
+                }
+
+                if (newHttpConnection instanceof HttpsURLConnection) {
+                    LOG.debug("SSL connection setup with trust all.");
+                    HttpsURLConnection newHttpsConnection = (HttpsURLConnection)newHttpConnection;
+                    if (sc != null) {
+                        newHttpsConnection.setSSLSocketFactory(sc.getSocketFactory());
+                    } else {
+                        LOG.warn("No SSL Contect available");
+                    }
+                    newHttpsConnection.setHostnameVerifier(allHostsValid);
+                }
+            } else {
+                LOG.warn("URL not a HTTP protocol: {}", url);
+            }
+        }
+        return newHttpConnection;
+    }
+
+    /* -----------------
+     * Private function for message creation and with templates
+     */
+
+    /**
+     * Get actual microseconds
+     * @return String
+     */
+    private String getEpochTimeMicroseconds() {
+        long microseconds = System.nanoTime() / 1000;
+        return String.valueOf(microseconds);
+    }
+
+    /**
+     * Assemble heartbeat message
+     * @param sb StringBuffer to be used or null to allocate
+     * @param epochTimeMicrosecondsString Text with time stamp
+     * @param sequence integer sequence number
+     * @param eventTimeValueNetconfFormatString like this: 2018-05-14T05:32:17.292Z
+     * @return StringBuffer with result
+     */
+    private StringBuffer assembleHeartbeatFromTemplate(
+                 StringBuffer sb,
+                 String epochTimeMicrosecondsString,
+                 int sequence,
+                 String eventTimeValueNetconfFormatString) {
+
+        if (sb == null) {
+          sb = new StringBuffer();
+        }
+        sb.append("{\n" +
+                "    \"event\": {\n" +
+                "        \"commonEventHeader\": {\n" +
+                "            \"domain\": \"heartbeat\",\n" +
+                "            \"eventId\": \"testpattern-ab305d54-85b4-a31b-7db2-fb6b9e546015\",\n" +
+                "            \"eventName\": \"heartbeat_Controller\",\n" +
+                "            \"eventType\": \"Controller\",\n" +
+                "            \"priority\": \"Low\",\n" +
+                "            \"reportingEntityId\": \"\",\n" +
+                "            \"reportingEntityName\": \""+entityName+"\",\n" +
+                "            \"sequence\": "+String.valueOf(sequence)+",\n" +
+                "            \"sourceId\": \"\",\n" +
+                "            \"sourceName\": \""+entityName+"\",\n" +
+                "            \"startEpochMicrosec\": "+epochTimeMicrosecondsString+",\n" +
+                "            \"lastEpochMicrosec\": "+epochTimeMicrosecondsString+",\n" +
+                "            \"version\": 3.0\n" +
+                "        },\n" +
+                "        \"heartbeatFields\": {\n" +
+                "            \"additionalFields\": [\n" +
+                "                 {\n" +
+                "                   \"name\": \"eventTime\",\n" +
+                "                   \"value\": \""+eventTimeValueNetconfFormatString+"\"\n" +
+                "                 }\n" +
+                "            ],\n" +
+                "            \"heartbeatFieldsVersion\": 1.0,\n" +
+                "            \"heartbeatInterval\": "+heartbeatIntervallSeconds+"\n" +
+                "        }\n" +
+                "    }\n" +
+                "}\n"
+        );
+
+        return sb;
+    }
+
+    /**
+     * Assemble notification message
+     * @param sb StringBuffer to be used or null to allocate
+     * @param epochTimeMicrosecondsString Text with time stamp
+     * @param sequence integer sequence number
+     * @param mountpointName
+     * @param objId
+     * @param problemName
+     * @param severity
+     * @return StringBuffer with result
+     */
+
+    private StringBuffer assembleEventNotificationFromTemplate(StringBuffer sb,
+            String epochTimeMicrosecondsString, String sequence,
+            String mountpointName, String objId, String problemName, String severity, String eventTimeValueNetconfFormatString
+            ) {
+
+        if (sb == null) {
+            sb = new StringBuffer();
+        }
+
+        ONFCoreNetworkElementRepresentation optionalNe = deviceManager != null ? deviceManager.getNeByMountpoint(mountpointName) : null;
+        InventoryInformation neInventory = optionalNe != null ? optionalNe.getInventoryInformation() : InventoryInformation.getDefault();
+
+        sb.append("{\n" +
+                "    \"event\": {\n" +
+                "        \"commonEventHeader\": {\n" +
+                "            \"domain\": \"fault\",\n" +
+                "            \"eventId\": \""+mountpointName+"_"+objId+"_"+problemName+"\",\n" +
+                "            \"eventName\": \""+eventNamePrefix+"_"+problemName+"\",\n" +
+                "            \"eventType\": \""+eventType+"\",\n" +
+                "            \"sequence\": "+sequence+",\n" +
+                "            \"priority\": \"High\",\n" +
+                "            \"reportingEntityId\": \"\",\n" +
+                "            \"reportingEntityName\": \""+entityName+"\",\n" +
+                "            \"sourceId\": \"\",\n" +
+                "            \"sourceName\": \""+mountpointName+"\",\n" +
+                "            \"startEpochMicrosec\": "+epochTimeMicrosecondsString+",\n" +
+                "            \"lastEpochMicrosec\": "+epochTimeMicrosecondsString+",\n" +
+                "            \"version\": 3.0\n" +
+                "        },\n" +
+                "        \"faultFields\": {\n" +
+                "            \"alarmAdditionalInformation\": [\n" +
+                "                 {\n" +
+                "                   \"name\": \"eventTime\",\n" +
+                "                   \"value\": \""+eventTimeValueNetconfFormatString+"\"\n" +
+                "                 },\n" +
+                "                 {\n" +
+                "                   \"name\": \"equipType\",\n" +
+                "                   \"value\": \""+neInventory.getType()+"\"\n" +
+                "                 },\n" +
+                "                 {\n" +
+                "                   \"name\": \"vendor\",\n" +
+                "                   \"value\": \""+neInventory.getVendor()+"\"\n" +
+                "                 },\n" +
+                "                 {\n" +
+                "                   \"name\": \"model\",\n" +
+                "                   \"value\": \""+neInventory.getModel()+"\"\n" +
+                "                 }\n" +
+                "            ],\n" +
+                "            \"faultFieldsVersion\":2.0,\n" +
+                "            \"eventSourceType\": \""+eventSourceType+"\",\n" +
+                "            \"alarmCondition\": \""+problemName+"\",\n" +
+                "            \"alarmInterfaceA\": \""+objId+"\",\n" +
+                "            \"specificProblem\": \""+problemName+"\",\n" +
+                "            \"eventSeverity\": \""+severity+"\",\n" +
+                "            \"vfStatus\": \"Active\"\n" +
+                "        }\n" +
+                "    }\n" +
+                "}\n"
+                );
+
+        return sb;
+    }
+
+    /* -----------------
+     * Convert internal type formats into the Ecomp format
+     */
+
+    private String convert(InternalSeverity severity ) {
+         switch( severity ) {
+            case NonAlarmed:
+                break;
+            case Warning:
+                return DCAE_WARNING;
+            case Minor:
+                return DCAE_MINOR;
+            case Major:
+                return DCAE_MAJOR;
+            case Critical:
+                return DCAE_CRITICAL;
+        }
+        return DCAE_NORMAL;
+    }
+
+
+    /**
+     * Time has to be converted into milliseconds
+     * @param timeAsString time as string
+     * @return as string
+     */
+    private String convert(String timeAsString) {
+
+        long microseconds = -1;
+        try {
+            microseconds = NETCONFTIME_CONVERTER.getTimeStampFromNetconfAsMilliseconds(timeAsString) * 1000;
+        } catch (IllegalArgumentException | ParseException e) {
+            LOG.info("Can not convert timeAsString", e);
+        }
+        return String.valueOf(microseconds);
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeProviderClient.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeProviderClient.java
new file mode 100644
index 0000000..0f81732
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeProviderClient.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.HtDevicemanagerConfiguration;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.IConfigChangedListener;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.DcaeConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.ProviderClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class DcaeProviderClient implements AutoCloseable, ProviderClient {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DcaeProviderClient.class);
+
+    private final HtDevicemanagerConfiguration htConfig;
+    private final IConfigChangedListener configChangedListener;
+
+    private final Object lock = new Object();;
+    private DcaeProviderWorker worker;
+
+    public DcaeProviderClient(HtDevicemanagerConfiguration cfg, String entityName, DeviceManagerImpl deviceManager) {
+        LOG.info("Create");
+        this.htConfig=cfg;
+        worker = new DcaeProviderWorker(this.htConfig.getDcae(), entityName, deviceManager);
+        this.configChangedListener = () -> {
+            LOG.info("Configuration change. Worker exchanged");
+            synchronized(lock) {
+                worker.close();
+                worker = new DcaeProviderWorker(DcaeConfig.reload(), entityName, deviceManager);
+            }
+        };
+        this.htConfig.registerConfigChangedListener(configChangedListener );
+
+    }
+
+    @Override
+    public void sendProblemNotification(String mountPointName, ProblemNotificationXml notification) {
+        synchronized(lock) {
+            worker.sendProblemNotification(mountPointName, notification);
+        }
+    }
+
+    @Override
+    public void sendProblemNotification(String mountPointName, ProblemNotificationXml notification, boolean neDeviceAlarm) {
+        sendProblemNotification(mountPointName, notification);
+    }
+
+    @Override
+    public void close() {
+        this.htConfig.unregisterConfigChangedListener(configChangedListener);
+        synchronized(lock) {
+            worker.close();
+        }
+    }
+
+    /* ---------------------------------------------------------
+     * Private
+     */
+
+}
+
+
+
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeProviderTask.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeProviderTask.java
new file mode 100644
index 0000000..2a169db
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeProviderTask.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ * Event provider to ECOMP for heartbeat message
+ *
+ * @author herbert
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+class DcaeProviderTask  implements Runnable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DcaeProviderTask.class);
+
+    private int t = 0;
+    private final DcaeMessages dcaeMessages;
+
+    DcaeProviderTask(DcaeMessages dcaeMessages) {
+        LOG.info("Create eventprovider task");
+        this.dcaeMessages = dcaeMessages;
+    }
+
+    private void sendHeartbeat() {
+         dcaeMessages.postHeartBeat();
+    }
+
+    @Override
+    public void run() {
+        LOG.debug("DCAE provider heartbeat tick start {}", t++);
+        sendHeartbeat();
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeProviderWorker.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeProviderWorker.java
new file mode 100644
index 0000000..17d09ec
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeProviderWorker.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl;
+
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.DcaeConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+class DcaeProviderWorker implements AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DcaeProviderWorker.class);
+
+    private static final int MIN_HEARTBEAT_TIME_SECONDS = 30;
+
+    private final ScheduledExecutorService scheduler;
+    private final DcaeSenderImpl dcaepClient;
+    private final DcaeMessages dcaeMessages;
+    private final ScheduledFuture<?> taskReference;
+
+    public DcaeProviderWorker(DcaeConfig configuration, String entityName, DeviceManagerImpl deviceManager) {
+
+        //Start services
+        LOG.info("Configuration: "+configuration);
+        int heartbeatSeconds = configuration.getTimerPeriodSeconds();
+        if ( heartbeatSeconds < MIN_HEARTBEAT_TIME_SECONDS ) {
+            heartbeatSeconds = MIN_HEARTBEAT_TIME_SECONDS;
+            LOG.info("Adjust heartbeat intervall to minimum of { } seconds.",heartbeatSeconds);
+        }
+
+        dcaepClient = new DcaeSenderImpl(configuration.getEventReveicerUrl(), configuration.getUserCredentials());
+        dcaeMessages = new DcaeMessages(dcaepClient, entityName, heartbeatSeconds, deviceManager);
+
+        //Activate task
+        LOG.info("Create Fault manager client Task");
+        this.scheduler = Executors.newSingleThreadScheduledExecutor();
+        Runnable task = new DcaeProviderTask(dcaeMessages);
+
+        LOG.info("Fault task created with "+heartbeatSeconds+" Seconds");
+        this.taskReference = this.scheduler.scheduleAtFixedRate(task, 0, heartbeatSeconds, TimeUnit.SECONDS);
+        LOG.info("Fault task scheduled");
+    }
+
+    public void sendProblemNotification(String mountPointName, ProblemNotificationXml notification) {
+        LOG.debug("Notification answer: {}", dcaeMessages.postNotification(mountPointName, notification));
+    }
+
+    @Override
+    public void close() {
+        this.taskReference.cancel(false);
+        try {
+            this.scheduler.shutdown();
+            this.scheduler.awaitTermination(5, TimeUnit.SECONDS);
+        } catch (InterruptedException | SecurityException e) {
+            LOG.debug("Schedler shutdown interrupted with exception: ",e);
+            if (e instanceof InterruptedException) {
+                Thread.currentThread().interrupt();
+            }
+        }
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeSender.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeSender.java
new file mode 100644
index 0000000..5ebc37d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeSender.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl;
+
+/**
+ * @author herbert
+ *
+ */
+public interface DcaeSender {
+
+    public String sendDcaePost(String body);
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeSenderImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeSenderImpl.java
new file mode 100644
index 0000000..9b386ad
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeSenderImpl.java
@@ -0,0 +1,236 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ * Client for ECOMP notification server
+ *
+ * Reference: @link
+ * http://stackoverflow.com/questions/13022717/java-and-https-url-connection-without-downloading-certificate
+ *
+ * @author herbert
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.security.KeyManagementException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.CertificateException;
+import java.security.spec.InvalidKeySpecException;
+import java.util.Base64;
+import javax.net.ssl.SSLContext;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.http.BaseHTTPClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DcaeSenderImpl implements DcaeSender {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DcaeSenderImpl.class);
+    private static final String EMPTY = "";
+    private static final String charset = "UTF-8";
+
+    private final String urlString;
+    private final String basicAuth;
+
+    private SSLContext sc = null;
+    private URL url = null;
+    private HttpURLConnection connection = null;
+
+    public DcaeSenderImpl(String url, String userCredentials) {
+
+        LOG.info("DcaeSenderImpl setup start with {} {}", url, userCredentials);
+
+        this.urlString = url;
+        this.basicAuth = "Basic " + new String(Base64.getEncoder().encode(userCredentials.getBytes()));
+
+        if (urlString != null && !urlString.equals("off")) {
+            try {
+                this.url = new URL(url);
+                sc = BaseHTTPClient.setupSsl(true);
+            } catch (KeyManagementException | NoSuchAlgorithmException | UnrecoverableKeyException
+                    | CertificateException | KeyStoreException | InvalidKeySpecException | IOException e) {
+                LOG.warn("SSL setup failed: {}", e.getMessage());
+            }
+        }
+        LOG.info("DcaeSenderImpl setup ends");
+    }
+
+    /**
+     * Send message to ECOMP Server
+     *
+     * @param body for POST message
+     */
+    @Override
+    public String sendDcaePost(String body) {
+
+        if (url != null) {
+            try {
+                connection = DcaeMessages.openConnection(url, basicAuth, true, sc);
+                if (connection != null) {
+                    return processPost(connection, body);
+                } else {
+                    LOG.warn("No SSL context available");
+                }
+            } catch (IOException e) {
+                LOG.warn("Dcae post failed {}", e.getMessage());
+            }
+        }
+        return EMPTY;
+    }
+
+    /**
+     * Connect to Server and expect answer.
+     *
+     * @return with answer body
+     */
+    public String testConnectServer() {
+
+        if (url != null) {
+            try {
+                connection = DcaeMessages.openConnection(url, null, false, sc);
+                if (connection != null) {
+                    return receiveInitialAnswer(connection);
+                }
+            } catch (IOException e) {
+                LOG.warn("Dcae post failed {}", e.getMessage());
+            }
+        }
+        return EMPTY;
+    }
+
+    /**
+     * Show status in readable form for testing
+     *
+     * @return String with result
+     */
+    public String getStatusAsString() {
+        StringBuffer sb = new StringBuffer();
+
+        sb.append("URL: " + url.getPath() + " " + url.getPort() + " Host: " + url.getHost());
+        sb.append("\n");
+        if (connection != null) {
+            sb.append("Connection setup: ");
+            sb.append(connection.getClass().getName());
+            sb.append(" ");
+        } else {
+            sb.append("Connection setup: No connection (server problem or switched off)");
+        }
+        return sb.toString();
+
+    }
+
+
+    /*------------------------------------------------------------------------------
+     * Private functions
+     */
+
+
+    /**
+     * Send Post and wait for answer
+     *
+     * @param connection
+     * @param body
+     * @return
+     * @throws IOException
+     */
+    private static String processPost(HttpURLConnection connection, String body) throws IOException {
+
+        LOG.debug("Post message: {}", connection.getURL().toString());
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("Body: {} ", body);
+        }
+
+        // Send the message to destination
+        try (OutputStream output = connection.getOutputStream()) {
+            output.write(body.getBytes(charset));
+        }
+
+        // Receive answer
+        InputStream response = null;
+        BufferedReader rd = null;
+        StringBuilder result = new StringBuilder();
+
+        try {
+            int responseCode = connection.getResponseCode();
+            LOG.debug("Response code: {}", String.valueOf(responseCode));
+
+            if (responseCode >= 200 && responseCode < 300) {
+                response = connection.getInputStream();
+            } else {
+                response = connection.getErrorStream();
+                if (response == null) {
+                    response = connection.getInputStream();
+                }
+            }
+            if (response != null) {
+                rd = new BufferedReader(new InputStreamReader(response));
+                String line;
+                while ((line = rd.readLine()) != null) {
+                    result.append(line);
+                }
+            }
+        } catch (IOException e) {
+            LOG.debug("No response received: {}", e.getMessage());
+        } finally {
+            if (response != null) {
+                response.close();
+            }
+            if (rd != null) {
+                rd.close();
+            }
+        }
+
+        LOG.trace("Result: {} ", result);
+        return result.toString();
+    }
+
+    /**
+     * Read initial answer from Server after connect
+     *
+     * @param connection that was opened
+     * @return String with answer message
+     * @throws IOException
+     */
+    private static String receiveInitialAnswer(URLConnection iConnection) throws IOException {
+
+
+        final StringBuffer response = new StringBuffer();
+
+        if (iConnection != null) {
+
+            final Reader reader = new InputStreamReader(iConnection.getInputStream());
+            final BufferedReader br = new BufferedReader(reader);
+            String line = "";
+            while ((line = br.readLine()) != null) {
+                response.append(line);
+                response.append("\n");
+            }
+            br.close();
+        }
+
+        return response.toString();
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/Checker.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/Checker.java
new file mode 100644
index 0000000..1091c41
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/Checker.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ * (c) highstreet technologies GmbH
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.devicemonitor.impl;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Steps to Monitor the connection to a network element during state connected
+ */
+abstract class Checker {
+
+    @SuppressWarnings("unused")
+    private static final Logger LOG = LoggerFactory.getLogger(Checker.class);
+
+    /**
+     * Check action.
+     * @return true if reachable, false if not
+     */
+    abstract boolean isReachableOnce();
+
+    /**
+     * Procedure to check the connection of one mountpoint
+     * @return true if reachable, false if not
+     */
+    boolean isConnected() {
+        return isReachableOnce();
+    }
+}
+
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorImpl.java
new file mode 100644
index 0000000..0141b26
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorImpl.java
@@ -0,0 +1,208 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ * (c) 2017 highstreet technologies GmbH
+ */
+
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.devicemonitor.impl;
+
+import java.util.Enumeration;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.listener.ODLEventListener;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *  Implementation of concept "Active monitoring" of a device.<br>
+ *    <br>
+ *  For each existing mountpoint a task runs with 120s cycle time. Every 120 seconds the check actions are performed.
+ *  The request is handled by the NETCONF layer with a (default)configured time-out of 60 seconds.<br>
+ *  Generated alarms, by the object/node "SDN-Controller" are (enum DeviceMonitorProblems):<br>
+ *      - notConnected(InternalSeverity.Warning)<br>
+ *      - noConnectionMediator(InternalSeverity.Minor)<br>
+ *      - noConnectionNe(InternalSeverity.Critical)<br>
+ *    <br>
+ *  1. Mountpoint does not exist<br>
+ *  If the mountpoint does not exists there are no related current alarms in the database.<br>
+ *    <br>
+ *  2. Created mountpoint with state "Connecting" or "UnableToConnect"<br>
+ *  If the Mountpoint is created and connection status is "Connecting" or "UnableToConnect".<br>
+ *  - After about 2..4 Minutes ... raise alarm "notConnected" with severity warning<br>
+ *    <br>
+ *  3. Created mountpoint with state "Connection"<br>
+ *  There are two monitor activities.<br>
+ *      3a. Check of Mediator connection by requesting (typical) cached data.<br>
+ *          - After about 60 seconds raise alarm: connection-loss-mediator with severity minor<br>
+ *          - Request from Mediator: network-element<br>
+ *    <br>
+ *      3b. Check connection to NEby requesting (typical) non-cached data.<br>
+ *          - Only if AirInterface available. The first one is used.<br>
+ *          - Requested are the currentAlarms<br>
+ *          - After about 60 seconds raise alarm: connection-loss-network-element with severity critical<br>
+ *    <br>
+ * @author herbert
+ */
+
+public class DeviceMonitorImpl implements AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DeviceMonitorImpl.class);
+
+    private final ConcurrentHashMap<String, DeviceMonitorTask> queue;
+    private final ScheduledExecutorService scheduler;
+    private final ODLEventListener odlEventListener;
+    @SuppressWarnings("unused")
+    private final DataBroker dataBroker; //Future usage
+
+    /*-------------------------------------------------------------
+     * Construction/ destruction of service
+     */
+
+    /**
+     * Basic implementation of devicemonitoring
+     * @param odlEventListener as destination for problems
+     */
+    public DeviceMonitorImpl(DataBroker dataBroker, ODLEventListener odlEventListener) {
+        LOG.info("Construct {}", this.getClass().getSimpleName());
+
+        this.odlEventListener = odlEventListener;
+        this.dataBroker = dataBroker;
+        this.queue = new ConcurrentHashMap<>();
+        this.scheduler = Executors.newScheduledThreadPool(10);
+    }
+
+    /**
+     * Stop the service. Stop all running monitoring tasks.
+     */
+    @Override
+    synchronized public void close() {
+        LOG.info("Close {}", this.getClass().getSimpleName());
+
+        Enumeration<String> e = queue.keys();
+        while (e.hasMoreElements()) {
+            deviceDisconnectIndication(e.nextElement());
+        }
+
+        scheduler.shutdown();
+    }
+
+    /*-------------------------------------------------------------
+     * Start/ stop/ update service for Mountpoint
+     */
+
+    /**
+     * Notify of device state changes to "connected" for slave nodes
+     * @param mountPointNodeName name of mount point
+     */
+    synchronized public void deviceConnectSlaveIndication(String mountPointNodeName) {
+        deviceConnectMasterIndication(mountPointNodeName, null);
+    }
+
+    /**
+     * Notify of device state changes to "connected"
+     * @param mountPointNodeName name of mount point
+     * @param ne to monitor
+     */
+    synchronized public void deviceConnectMasterIndication(String mountPointNodeName, DeviceMonitoredNe ne) {
+
+        LOG.debug("ne changes to connected state {}",mountPointNodeName);
+        createMonitoringTask(mountPointNodeName);
+        if (queue.containsKey(mountPointNodeName)) {
+            DeviceMonitorTask task = queue.get(mountPointNodeName);
+            task.deviceConnectIndication(ne);
+        } else {
+            LOG.warn("Monitoring task not in queue: {} {} {}", mountPointNodeName, mountPointNodeName.hashCode(), queue.size());
+        }
+    }
+
+   /**
+    * Notify of device state change to "disconnected"
+    * Mount point supervision
+    * @param mountPointNodeName to deregister
+    */
+    synchronized public void deviceDisconnectIndication(String mountPointNodeName) {
+
+        LOG.debug("State changes to not connected state {}",mountPointNodeName);
+        createMonitoringTask(mountPointNodeName);
+        if (queue.containsKey(mountPointNodeName)) {
+            DeviceMonitorTask task = queue.get(mountPointNodeName);
+            task.deviceDisconnectIndication();
+        } else {
+            LOG.warn("Monitoring task not in queue: {} {} {}", mountPointNodeName, mountPointNodeName.hashCode(), queue.size());
+        }
+    }
+
+    /**
+     * removeMountpointIndication deregisters a mountpoint for registration services
+     * @param mountPointNodeName to deregister
+     */
+    synchronized public void removeMountpointIndication(String mountPointNodeName) {
+
+        if (queue.containsKey(mountPointNodeName)) {
+            DeviceMonitorTask task = queue.get(mountPointNodeName);
+            //Remove from here
+            queue.remove(mountPointNodeName);
+
+            //Clear all problems
+            task.removeMountpointIndication();
+            LOG.debug("Task stopped: {}", mountPointNodeName);
+        } else {
+            LOG.warn("Task not in queue: {}", mountPointNodeName);
+        }
+    }
+
+    /**
+     * Referesh database by raising all alarms again.
+     */
+    public void refreshAlarmsInDb() {
+        synchronized(queue) {
+            for (DeviceMonitorTask task : queue.values()) {
+                task.refreshAlarms();
+            }
+        }
+    }
+
+    /*-------------------------------------------------------------
+     * Private functions
+     */
+
+    /**
+     * createMountpoint registers a new mountpoint monitoring service
+     * @param mountPointNodeName name of mountpoint
+     */
+    synchronized private DeviceMonitorTask createMonitoringTask(String mountPointNodeName) {
+
+        DeviceMonitorTask task;
+        LOG.debug("Register for monitoring {} {}",mountPointNodeName, mountPointNodeName.hashCode());
+
+        if (queue.containsKey(mountPointNodeName)) {
+            LOG.info("Monitoring task exists");
+            task = queue.get(mountPointNodeName);
+        } else {
+            LOG.info("Do start of DeviceMonitor task");
+            //Runnable task = new PerformanceManagerTask(queue, databaseService);
+            task = new DeviceMonitorTask(mountPointNodeName, this.odlEventListener);
+            queue.put(mountPointNodeName, task);
+            task.start(scheduler);
+        }
+        return task;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorProblems.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorProblems.java
new file mode 100644
index 0000000..003c200
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorProblems.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ * Problems generated by DeviceMonitor
+ *
+ * @author herbert
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.devicemonitor.impl;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalSeverity;
+
+public enum DeviceMonitorProblems {
+
+	/**
+	 * Mountpoint is not connected via NETCONF with NE/Mediator = ssh connection
+	 */
+    connectionLossOAM(InternalSeverity.Major),
+
+    /**
+     * Mountpoint is connected via Netconf to Mediator, but mediator is not responding.
+     * Connection state to NE is unknown.
+     */
+    connectionLossMediator(InternalSeverity.Major),
+
+    /** Mountpoint is connected via Netconf to Mediator.
+     * This connection is OK, but mediator <-> NE Connection is not OK
+     */
+    connectionLossNeOAM(InternalSeverity.Major);
+
+    InternalSeverity severity;
+
+    DeviceMonitorProblems(InternalSeverity severity) {
+        this.severity = severity;
+    }
+
+    InternalSeverity getSeverity() {
+        return severity;
+    }
+
+}
+
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorTask.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorTask.java
new file mode 100644
index 0000000..04d15cc
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorTask.java
@@ -0,0 +1,320 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ * @author herbert
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.devicemonitor.impl;
+
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.Set;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalSeverity;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.NetconfTimeStamp;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.listener.ODLEventListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DeviceMonitorTask implements Runnable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DeviceMonitorTask.class);
+    private static final String LOGMARKER = "DMTick";
+    private static final NetconfTimeStamp NETCONFTIME_CONVERTER = NetconfTimeStamp.getConverter();
+
+    private final String mountPointName;
+    private final ODLEventListener odlEventListener;
+    private final Checker checkConnectionToMediator;
+    private final Checker checkConnectionToNe;
+
+    private int tickCounter; //Added for each tick. Not relevant for internal status
+
+    private ScheduledFuture<?> taskHandle;
+    private final Object lockNe = new Object();    //USe top lock access to member ne
+    private @Nullable DeviceMonitoredNe ne; //Indication if in status connect or disconnect
+    private @Nonnull Boolean mountpointConnectingStateSupervision; //Indication of mountpoint supervision
+
+    private final Object lockDisconnectSupervisionTickout = new Object();
+    private Integer disconnectSupervisionTickout; //Tickcounter of task ticks for "not connected indication"
+    private Set<DeviceMonitorProblems> currentProblems; //List with actual problems. Synchronized by itself
+
+    /*------------------------------------------------------------
+     * Construction
+     */
+
+    /**
+     * Setup monitoring task
+     * @param mountPointName to monitor
+     * @param odlEventListener to forward problems to
+     */
+    public DeviceMonitorTask(String mountPointName, ODLEventListener odlEventListener) {
+        LOG.debug("Init task {}", DeviceMonitorTask.class.getSimpleName());
+
+        //Setup finals
+        this.mountPointName = mountPointName;
+        this.odlEventListener = odlEventListener;
+        this.checkConnectionToMediator = new Checker() {
+            @Override
+            boolean isReachableOnce() {
+                synchronized(lockNe) {
+                    //mountpoint state "Connected"
+                    //If for any reason the mountpoint is Connected, but Notconf messages are not received
+                    return ne == null ? true : ne.checkIfConnectionToMediatorIsOk();
+                }
+            }
+        };
+        this.checkConnectionToNe = new Checker() {
+            @Override
+            boolean isReachableOnce() {
+                synchronized(lockNe) {
+                    //mountpoint state "Connected"
+                    //If netconf mediator (netconf application software for NE) has connection loss to managed device.
+                    //The networkelement object is available, but there is no interfacepack available.
+                    return ne == null ? true : ne.checkIfConnectionToNeIsOk();
+                }
+            }
+        };
+
+        //Setup parameters
+        this.taskHandle = null;
+        this.tickCounter = 0;
+        this.ne = null;
+        this.mountpointConnectingStateSupervision = false;
+        this.currentProblems = Collections.synchronizedSet(EnumSet.noneOf(DeviceMonitorProblems.class));
+        this.disconnectSupervisionTickout = 0;
+
+        int removed = odlEventListener.removeAllCurrentProblemsOfNode(mountPointName);
+        LOG.debug("{} Init task removed fault entries {}", LOGMARKER, removed);
+
+    }
+
+    /**
+     * Start for each object an own instance of the thread.
+     * @param scheduler for all the threads.
+     */
+    public void start(ScheduledExecutorService scheduler) {
+        LOG.info("{} {} DeviceMonitor task to create", LOGMARKER, tickCounter);
+        if (taskHandle == null) {
+            startDisconnectSupervision();
+            taskHandle = scheduler.scheduleAtFixedRate(this, 0, 120, TimeUnit.SECONDS);
+            LOG.info("DeviceMonitor task scheduled");
+        } else {
+            LOG.error("{} {} Task already running.", LOGMARKER, tickCounter);
+        }
+    }
+
+    /**
+     * Call after NE change state to connected.
+     * Mountpoint exists. Status is Connecting.
+     * @param neParam that connected
+     */
+
+    public void deviceConnectIndication(DeviceMonitoredNe neParam) {
+        LOG.info("{} {} Connect {} and stop.", LOGMARKER, tickCounter, mountPointName);
+        clear(DeviceMonitorProblems.connectionLossOAM);
+        synchronized(lockNe) {
+            this.ne = neParam;
+            this.mountpointConnectingStateSupervision = false;
+        }
+        stopDisconnectSupervision();
+    }
+
+    /**
+     * If ne is disconnected do the related actions.
+     * - Mountpoint exists. Status is Connecting or UnableToConnect
+     */
+
+    public void deviceDisconnectIndication() {
+        LOG.info("{} {} Disconnect {} and start.", LOGMARKER, tickCounter, mountPointName);
+        clear(DeviceMonitorProblems.connectionLossOAM);
+        synchronized(lockNe) {
+            this.ne = null;
+            this.mountpointConnectingStateSupervision = true;
+        }
+        startDisconnectSupervision();
+    }
+
+    /**
+     * Do all actions to clean up the log if mountpoint has been deleted.
+     * - Mountpoint removed
+     * Prepare cancellation of the task and cancel task
+     */
+
+    public void removeMountpointIndication() {
+         for (DeviceMonitorProblems problem : DeviceMonitorProblems.values()) {
+            clear(problem);
+        }
+         //Cancel the task
+         if (this.taskHandle != null) {
+             this.taskHandle.cancel(false);
+             LOG.info("{} {} DeviceMonitor task canceled for {}", LOGMARKER, tickCounter, mountPointName);
+         } else {
+             LOG.error("{} {} Task already stopped", LOGMARKER, tickCounter);
+         }
+    }
+
+    /**
+     * Referesh Alarms
+     */
+    public void refreshAlarms() {
+        LOG.debug("{} Start refresh of all problems",LOGMARKER);
+        synchronized(currentProblems) {
+            for (DeviceMonitorProblems problem :    currentProblems) {
+                LOG.debug("{} Refresh problem {} Raised-status {}",LOGMARKER, problem.name(), currentProblems.contains(problem));
+                odlEventListener.onProblemNotification(mountPointName, problem.name(), problem.getSeverity());
+            }
+        }
+        LOG.debug("{} Finish refresh of all problems",LOGMARKER);
+    }
+
+    /*------------------------------------------------------------
+     * Functions to clear/raise alarm
+     */
+
+    /**
+     * Raise a problem, but only once
+     * @param problem
+     */
+    private void raise(DeviceMonitorProblems problem) {
+        LOG.debug("{} Raise problem {} Raised-status {}",LOGMARKER, problem.name(), currentProblems.contains(problem));
+        synchronized(currentProblems) {
+            if (! currentProblems.contains(problem)) {
+                currentProblems.add(problem);
+                odlEventListener.onProblemNotification(mountPointName, problem.name(), problem.getSeverity());
+            }
+        }
+    }
+
+    /**
+     * Raise a problem, but only once
+     * @param problem
+     */
+    private void clear(DeviceMonitorProblems problem) {
+        LOG.debug("{} Clear problem {} Raised-status {}",LOGMARKER, problem.name(), currentProblems.contains(problem));
+        synchronized(currentProblems) {
+            if (currentProblems.contains(problem)) {
+                currentProblems.remove(problem);
+                odlEventListener.onProblemNotification(mountPointName, problem.name(), InternalSeverity.NonAlarmed);
+            }
+        }
+    }
+
+    /**
+     * Process problem notification cascade
+     * @param isReachable
+     * @param problem
+     */
+    private void clearRaiseIfConnected(Checker checker, DeviceMonitorProblems problem) {
+        LOG.debug("{} check start {} problem {} Raised-status {}",LOGMARKER, tickCounter, problem.name(), currentProblems.contains(problem));
+        if (checker.isConnected()) {
+            clear(problem);
+        } else {
+            raise(problem);
+        }
+        LOG.debug("{} check end {} problem {} Raised-status {}",LOGMARKER, tickCounter, problem.name(), currentProblems.contains(problem));
+    }
+
+    /*------------------------------------------------------------
+     * Functions to start/stop
+     */
+
+    private void startDisconnectSupervision() {
+        synchronized(lockDisconnectSupervisionTickout) {
+            this.disconnectSupervisionTickout = 2;
+        }
+    }
+
+    private void stopDisconnectSupervision() {
+        synchronized(lockDisconnectSupervisionTickout) {
+            this.disconnectSupervisionTickout = 0;
+        }
+    }
+
+    private boolean processDisconnectSupervisionAndCheckExceeded() {
+        synchronized(lockDisconnectSupervisionTickout) {
+            if (disconnectSupervisionTickout == 0) {
+                return true;
+            } else if (disconnectSupervisionTickout > 0) {
+                disconnectSupervisionTickout--;
+            }
+            return false;
+        }
+    }
+
+    /*------------------------------------------------------------
+     * TASK
+     */
+
+    /**
+     * Task to monitor connectivity to Network Elements.
+     * Connectivity problems lead to alarm indication.
+     */
+    @Override
+    public void run() {
+
+        try {
+            LOG.debug("{} UTCTime {} START mountpoint {} tick {} connecting supervision {} tickout {}",
+                    LOGMARKER,
+                    NETCONFTIME_CONVERTER.getTimeStamp(),
+                    mountPointName,
+                    tickCounter,
+                    mountpointConnectingStateSupervision,
+                    disconnectSupervisionTickout);
+
+               if (mountpointConnectingStateSupervision) {
+                   LOG.debug("{} {} Mountpoint supervision {}", LOGMARKER, tickCounter, mountPointName);
+                   if (processDisconnectSupervisionAndCheckExceeded()) {
+                       raise(DeviceMonitorProblems.connectionLossOAM);
+                   }
+
+               } else {
+                synchronized (lockNe) {
+                       if (ne != null) {
+                           //checks during "Connected"
+                           clear(DeviceMonitorProblems.connectionLossOAM); //Always cleared never raised
+                           LOG.debug("{} {} Prepare check", LOGMARKER, tickCounter);
+                           ne.prepareCheck();  // Prepare ne check
+                           // Mediator check
+                           LOG.debug("{} {} Mediator check", LOGMARKER, tickCounter);
+                           clearRaiseIfConnected(checkConnectionToMediator, DeviceMonitorProblems.connectionLossMediator);
+
+                           // NE check
+                           LOG.debug("{} {} Ne check", LOGMARKER, tickCounter);
+                           clearRaiseIfConnected(checkConnectionToNe, DeviceMonitorProblems.connectionLossNeOAM);
+                       } else {
+                           //Monitor switch off.
+                           LOG.debug("{} {} Monitor switch off state", LOGMARKER, tickCounter);
+                           clear(DeviceMonitorProblems.connectionLossOAM); //Always cleared never raised
+                           clear(DeviceMonitorProblems.connectionLossMediator); //Always cleared never raised
+                           clear(DeviceMonitorProblems.connectionLossNeOAM); //Always cleared never raised
+                       }
+                   }
+            }
+        } catch (Exception e) {
+            //Prevent stopping the task
+            LOG.warn("{} {} During DeviceMontoring task",LOGMARKER, tickCounter, e);
+        }
+        LOG.debug("{} {} END", LOGMARKER, tickCounter++);
+
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitoredNe.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitoredNe.java
new file mode 100644
index 0000000..ec19f17
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitoredNe.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.devicemonitor.impl;
+
+/**
+ * @author herbert
+ *
+ */
+public interface DeviceMonitoredNe {
+
+    /**
+     * Prepare subsequent check calls
+     */
+    public void prepareCheck();
+
+    /**
+     * Test connection to mediator, by getting data that have to be called from NE
+     * @return true if connection working, false if not
+     */
+    public boolean checkIfConnectionToMediatorIsOk();
+
+    /**
+     * Test connection to NE via mediator, by getting data that have to be called from NE
+     * @return true if connection working, false if not
+     */
+    public boolean checkIfConnectionToNeIsOk();
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerApiServiceImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerApiServiceImpl.java
new file mode 100644
index 0000000..6e8d85b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerApiServiceImpl.java
@@ -0,0 +1,200 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.List;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.MaintenanceRPCServiceAPI;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.impl.MaintenanceServiceImpl;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ClearCurrentFaultByNodenameInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ClearCurrentFaultByNodenameOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ClearCurrentFaultByNodenameOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.DevicemanagerService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetRequiredNetworkElementKeysInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetRequiredNetworkElementKeysOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetRequiredNetworkElementKeysOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeOutputBuilder;
+import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DeviceManagerApiServiceImpl implements DevicemanagerService, AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DevicemanagerService.class);
+
+    private final RpcRegistration<DevicemanagerService> rpcReg;
+
+    private MaintenanceRPCServiceAPI maintenanceService;
+    private ResyncNetworkElementsListener resyncCallbackListener;
+
+    DeviceManagerApiServiceImpl(final RpcProviderRegistry rpcProviderRegistry) {
+        // Register ourselves as the REST API RPC implementation
+        LOG.info("Register RPC Service "+DevicemanagerService.class.getSimpleName());
+        this.maintenanceService = null;
+        this.rpcReg = rpcProviderRegistry.addRpcImplementation(DevicemanagerService.class, this);
+    }
+
+    public void setMaintenanceService(MaintenanceServiceImpl maintenanceService2) {
+        this.maintenanceService = maintenanceService2;
+    }
+
+    @Override
+    public void close() throws Exception {
+        LOG.info("Close RPC Service");
+        if (rpcReg != null) {
+            rpcReg.close();
+        }
+    }
+
+    /*-------------------------------
+     * Interfaces for MaintenanceService
+     */
+
+    @Override
+    public ListenableFuture<RpcResult<GetRequiredNetworkElementKeysOutput>> getRequiredNetworkElementKeys(
+            GetRequiredNetworkElementKeysInput input) {
+        return getRequiredNetworkElementKeys();
+    }
+
+    // For casablanca version no input was generated.
+    public ListenableFuture<RpcResult<GetRequiredNetworkElementKeysOutput>> getRequiredNetworkElementKeys() {
+
+        LOG.info("RPC Request: getRequiredNetworkElementKeys");
+        RpcResultBuilder<GetRequiredNetworkElementKeysOutput> result;
+        try {
+            GetRequiredNetworkElementKeysOutputBuilder outputBuilder = maintenanceService.getRequiredNetworkElementKeys();
+            result =  RpcResultBuilder.success(outputBuilder);
+        } catch (Exception e) {
+            result = RpcResultBuilder.failed();
+            result.withError(ErrorType.APPLICATION, "Exception", e);
+        }
+        return result.buildFuture();
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<ShowRequiredNetworkElementOutput>> showRequiredNetworkElement(
+            ShowRequiredNetworkElementInput input) {
+
+        LOG.info("RPC Request: showRequiredNetworkElement input: {}", input.getMountpointName());
+        RpcResultBuilder<ShowRequiredNetworkElementOutput> result;
+
+        try {
+            ShowRequiredNetworkElementOutputBuilder outputBuilder = maintenanceService.showRequiredNetworkElement(input);
+            result =  RpcResultBuilder.success(outputBuilder);
+        } catch (Exception e) {
+            result = RpcResultBuilder.failed();
+            result.withError(ErrorType.APPLICATION, "Exception", e);
+        }
+        return result.buildFuture();
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<SetMaintenanceModeOutput>> setMaintenanceMode(SetMaintenanceModeInput input) {
+
+        LOG.info("RPC Request: setMaintenanceMode input: {}", input.getMountpointName());
+        RpcResultBuilder<SetMaintenanceModeOutput> result;
+
+        try {
+            SetMaintenanceModeOutputBuilder outputBuilder = maintenanceService.setMaintenanceMode(input);
+            result =  RpcResultBuilder.success(outputBuilder);
+        } catch (Exception e) {
+            result = RpcResultBuilder.failed();
+            result.withError(ErrorType.APPLICATION, "Exception", e);
+        }
+        return result.buildFuture();
+
+    }
+
+
+
+    @Override
+    public ListenableFuture<RpcResult<GetMaintenanceModeOutput>> getMaintenanceMode(GetMaintenanceModeInput input) {
+
+        LOG.info("RPC Request: getMaintenanceMode input: {}", input.getMountpointName());
+        RpcResultBuilder<GetMaintenanceModeOutput> result;
+
+        try {
+            GetMaintenanceModeOutputBuilder outputBuilder = maintenanceService.getMaintenanceMode(input);
+            result =  RpcResultBuilder.success(outputBuilder);
+        } catch (Exception e) {
+            result = RpcResultBuilder.failed();
+            result.withError(ErrorType.APPLICATION, "Exception", e);
+        }
+        return result.buildFuture();
+
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<TestMaintenanceModeOutput>> testMaintenanceMode(TestMaintenanceModeInput input) {
+        LOG.info("RPC Request: getMaintenanceMode input: {}", input.getMountpointName());
+        RpcResultBuilder<TestMaintenanceModeOutput> result;
+
+        try {
+            TestMaintenanceModeOutputBuilder outputBuilder = maintenanceService.testMaintenanceMode(input);
+            result =  RpcResultBuilder.success(outputBuilder);
+        } catch (Exception e) {
+            result = RpcResultBuilder.failed();
+            result.withError(ErrorType.APPLICATION, "Exception", e);
+        }
+        return result.buildFuture();
+
+    }
+
+
+    @Override
+    public ListenableFuture<RpcResult<ClearCurrentFaultByNodenameOutput>> clearCurrentFaultByNodename(
+            ClearCurrentFaultByNodenameInput input) {
+        LOG.info("RPC Request: clearNetworkElementAlarms input: {}", input.getNodenames());
+        RpcResultBuilder<ClearCurrentFaultByNodenameOutput> result;
+        try {
+            if(this.resyncCallbackListener!=null) {
+                List<String> nodeNames= this.resyncCallbackListener.doClearCurrentFaultByNodename(input.getNodenames());
+                ClearCurrentFaultByNodenameOutputBuilder outputBuilder = new ClearCurrentFaultByNodenameOutputBuilder();
+                outputBuilder.setNodenames(nodeNames);
+                result =  RpcResultBuilder.success(outputBuilder);
+            } else {
+                result = RpcResultBuilder.failed();
+                result.withError(ErrorType.APPLICATION, "Startup running" );
+            }
+        } catch(Exception e) {
+            result = RpcResultBuilder.failed();
+            result.withError(ErrorType.APPLICATION, "Exception", e);
+        }
+        return result.buildFuture();
+    }
+
+    public void setResyncListener(ResyncNetworkElementsListener listener) {
+        this.resyncCallbackListener = listener;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerImpl.java
new file mode 100644
index 0000000..fcd7c1b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerImpl.java
@@ -0,0 +1,633 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl;
+
+import com.google.common.base.Optional;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.aaiconnector.impl.AaiProviderClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseNode;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCoreNetworkElementFactory;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCoreNetworkElementRepresentation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.toggleAlarmFilter.NotificationDelayService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.HtDevicemanagerConfiguration;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.AkkaConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.EsConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.GeoConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.PmConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl.DcaeProviderClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.devicemonitor.impl.DeviceMonitorImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.service.HtDatabaseEventsService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.listener.NetconfChangeListener;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.listener.ODLEventListener;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.WebSocketServiceClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.WebSocketServiceClientImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.WebSocketServiceClientImpl2;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.index.impl.IndexConfigService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.index.impl.IndexMwtnService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.index.impl.IndexUpdateService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.impl.MaintenanceServiceImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.PerformanceManagerImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.service.MicrowaveHistoricalPerformanceWriterService;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.MountPoint;
+import org.opendaylight.controller.md.sal.binding.api.MountPointService;
+import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
+import org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscriptionInput;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscriptionInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.NotificationsService;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.StreamNameType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.network.topology.topology.topology.types.TopologyNetconf;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DeviceManagerImpl implements DeviceManagerService, AutoCloseable, ResyncNetworkElementsListener {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DeviceManagerImpl.class);
+    private static final String APPLICATION_NAME = "DeviceManager";
+    private static final String MYDBKEYNAMEBASE = "SDN-Controller";
+
+    // http://sendateodl:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf
+    private static final InstanceIdentifier<Topology> NETCONF_TOPO_IID =
+            InstanceIdentifier.create(NetworkTopology.class).child(Topology.class,
+                    new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName())));
+    @SuppressWarnings("unused")
+    private static final String STARTUPLOG_FILENAME = "etc/devicemanager.startup.log";
+    // private static final String STARTUPLOG_FILENAME2 = "data/cache/devicemanager.startup.log";
+
+    private DataBroker dataBroker = null;
+    private MountPointService mountPointService = null;
+    private RpcProviderRegistry rpcProviderRegistry = null;
+    @SuppressWarnings("unused")
+    private NotificationPublishService notificationPublishService = null;
+
+    private final ConcurrentHashMap<String, ONFCoreNetworkElementRepresentation> networkElementRepresentations =
+            new ConcurrentHashMap<>();
+
+    private WebSocketServiceClient webSocketService;
+    private HtDatabaseEventsService databaseClientEvents;
+    private ODLEventListener odlEventListener;
+    private NetconfChangeListener netconfChangeListener;
+    private DeviceManagerApiServiceImpl rpcApiService;
+    private @Nullable PerformanceManagerImpl performanceManager = null;
+    private ProviderClient dcaeProviderClient;
+    private ProviderClient aotsMProvider;
+    private @Nullable AaiProviderClient aaiProviderClient;
+    private DeviceMonitorImpl deviceMonitor;
+    private IndexUpdateService updateService;
+    private IndexConfigService configService;
+    private IndexMwtnService mwtnService;
+    private HtDatabaseNode htDatabase;
+    private Boolean devicemanagerInitializationOk = false;
+    private MaintenanceServiceImpl maintenanceService;
+    private NotificationDelayService<ProblemNotificationXml> notificationDelayService;
+    private Thread threadDoClearCurrentFaultByNodename = null;
+    private int refreshCounter = 0;
+    private AkkaConfig akkaConfig;
+
+    // Blueprint 1
+    public DeviceManagerImpl() {
+        LOG.info("Creating provider for {}", APPLICATION_NAME);
+    }
+
+    public void setDataBroker(DataBroker dataBroker) {
+        this.dataBroker = dataBroker;
+    }
+
+    public void setRpcProviderRegistry(RpcProviderRegistry rpcProviderRegistry) {
+        this.rpcProviderRegistry = rpcProviderRegistry;
+
+    }
+
+    public void setNotificationPublishService(NotificationPublishService notificationPublishService) {
+        this.notificationPublishService = notificationPublishService;
+    }
+
+    public void setMountPointService(MountPointService mountPointService) {
+        this.mountPointService = mountPointService;
+    }
+
+    public void init() {
+
+        LOG.info("Session Initiated start {}", APPLICATION_NAME);
+
+        // Start RPC Service
+        this.rpcApiService = new DeviceManagerApiServiceImpl(rpcProviderRegistry);
+        // Get configuration
+        HtDevicemanagerConfiguration config = HtDevicemanagerConfiguration.getConfiguration();
+        this.akkaConfig = null;
+        try {
+            this.akkaConfig = AkkaConfig.load();
+            LOG.debug("akka.conf loaded: " + akkaConfig.toString());
+        } catch (Exception e1) {
+            LOG.warn("problem loading akka.conf: " + e1.getMessage());
+        }
+        GeoConfig geoConfig = null;
+        if (akkaConfig != null && akkaConfig.isCluster()) {
+            LOG.info("cluster mode detected");
+            if (GeoConfig.fileExists()) {
+                try {
+                    LOG.debug("try to load geoconfig");
+                    geoConfig = GeoConfig.load();
+                } catch (Exception err) {
+                    LOG.warn("problem loading geoconfig: " + err.getMessage());
+                }
+            } else {
+                LOG.debug("no geoconfig file found");
+            }
+        } else {
+            LOG.info("single node mode detected");
+        }
+
+        this.notificationDelayService = new NotificationDelayService<>(config);
+
+        EsConfig dbConfig = config.getEs();
+        LOG.debug("esConfig=" + dbConfig.toString());
+        // Start database
+        htDatabase = HtDatabaseNode.start(dbConfig, akkaConfig, geoConfig);
+        if (htDatabase == null) {
+            LOG.error("Can only run with local database. Stop initialization of devicemanager.");
+        } else {
+            // init Database Values only if singleNode or clusterMember=1
+            if (akkaConfig == null || akkaConfig.isSingleNode() || akkaConfig != null && akkaConfig.isCluster()
+                    && akkaConfig.getClusterConfig().getRoleMemberIndex() == 1) {
+                // Create DB index if not existing and if database is running
+                try {
+                    this.configService = new IndexConfigService(htDatabase);
+                    this.mwtnService = new IndexMwtnService(htDatabase);
+                } catch (Exception e) {
+                    LOG.warn("Can not start ES access clients to provide database index config, mwtn. ",e);
+                }
+            }
+            // start service for device maintenance service
+            this.maintenanceService = new MaintenanceServiceImpl(htDatabase);
+            // Websockets
+            try {
+                this.webSocketService = new WebSocketServiceClientImpl2(rpcProviderRegistry);
+            } catch (Exception e) {
+                LOG.error("Can not start websocket service. Loading mock class.", e);
+                this.webSocketService = new WebSocketServiceClientImpl();
+            }
+            // DCAE
+            this.dcaeProviderClient = new DcaeProviderClient(config, dbConfig.getCluster(), this);
+
+            this.aaiProviderClient = new AaiProviderClient(config, this);
+            // EM
+            EsConfig emConfig = dbConfig.cloneWithIndex("sdnevents");
+
+            if (emConfig == null) {
+                LOG.warn("No configuration available. Don't start event manager");
+            } else {
+                this.databaseClientEvents = new HtDatabaseEventsService(htDatabase);
+
+                String myDbKeyNameExtended = MYDBKEYNAMEBASE + "-" + dbConfig.getCluster();
+
+
+                this.odlEventListener = new ODLEventListener(myDbKeyNameExtended, webSocketService,
+                        databaseClientEvents, dcaeProviderClient, aotsMProvider, maintenanceService);
+            }
+
+            // PM
+            PmConfig configurationPM = config.getPm();
+            LOG.info("Performance manager configuration: {}", configurationPM);
+            if (!configurationPM.isPerformanceManagerEnabled()) {
+
+                LOG.info("No configuration available. Don't start performance manager");
+            } else {
+                @Nullable
+                MicrowaveHistoricalPerformanceWriterService databaseClientHistoricalPerformance;
+                databaseClientHistoricalPerformance = new MicrowaveHistoricalPerformanceWriterService(htDatabase);
+                this.performanceManager = new PerformanceManagerImpl(60, databaseClientHistoricalPerformance);
+            }
+
+            // DUS (Database update service)
+            LOG.debug("start db update service");
+            this.updateService =
+                    new IndexUpdateService(htDatabase, dbConfig.getHost(), dbConfig.getCluster(), dbConfig.getNode());
+            this.updateService.start();
+
+            // RPC Service for specific services
+            this.rpcApiService.setMaintenanceService(this.maintenanceService);
+            this.rpcApiService.setResyncListener(this);
+            // DM
+            // DeviceMonitor has to be available before netconfSubscriptionManager is
+            // configured
+            LOG.debug("start DeviceMonitor Service");
+            this.deviceMonitor = new DeviceMonitorImpl(dataBroker, odlEventListener);
+
+            // netconfSubscriptionManager should be the last one because this is a callback
+            // service
+            LOG.debug("start NetconfSubscriptionManager Service");
+            // this.netconfSubscriptionManager = new
+            // NetconfSubscriptionManagerOfDeviceManager(this, dataBroker);
+            // this.netconfSubscriptionManager.register();
+            this.netconfChangeListener = new NetconfChangeListener(this, dataBroker);
+            this.netconfChangeListener.register();
+
+            this.devicemanagerInitializationOk = true;
+        }
+        LOG.info("Session Initiated end. Initialization done {}", devicemanagerInitializationOk);
+    }
+
+    @Override
+    public void close() throws Exception {
+        LOG.info("DeviceManagerImpl closing ...");
+
+        close(performanceManager);
+        close(dcaeProviderClient);
+        close(aaiProviderClient);
+        close(aotsMProvider);
+        close(deviceMonitor);
+        close(updateService, configService, mwtnService);
+        close(htDatabase);
+        close(netconfChangeListener);
+        close(maintenanceService);
+        close(rpcApiService);
+        close(notificationDelayService);
+
+        LOG.info("DeviceManagerImpl closing done");
+    }
+
+
+    /**
+     * Used to close all Services, that should support AutoCloseable Pattern
+     *
+     * @param toClose
+     * @throws Exception
+     */
+    private void close(AutoCloseable... toCloseList) throws Exception {
+        for (AutoCloseable element : toCloseList) {
+            if (element != null) {
+                element.close();
+            }
+        }
+    }
+
+    /**
+     * For each mounted device a mountpoint is created and this listener is called.
+     *
+     */
+    @Override
+    public void startListenerOnNodeForConnectedState(Action action, NodeId nNodeId, NetconfNode nNode) {
+
+        String mountPointNodeName = nNodeId.getValue();
+        LOG.info("Starting Event listener on Netconf for mountpoint {} Action {}", mountPointNodeName, action);
+
+        boolean preConditionMissing = false;
+        if (mountPointService == null) {
+            preConditionMissing = true;
+            LOG.warn("No mountservice available.");
+        }
+        if (!devicemanagerInitializationOk) {
+            preConditionMissing = true;
+            LOG.warn("Devicemanager initialization still pending.");
+        }
+        if (preConditionMissing) {
+            return;
+        }
+
+        if (networkElementRepresentations.containsKey(mountPointNodeName)) {
+            LOG.warn("Mountpoint {} already registered. Leave startup procedure.", mountPointNodeName);
+            return;
+        }
+
+        if (!isMaster(nNode)) {
+            // Change Devicemonitor-status to connected ... for non master mountpoints.
+            deviceMonitor.deviceConnectSlaveIndication(mountPointNodeName);
+            return;
+        }
+
+        InstanceIdentifier<Node> instanceIdentifier =
+                NETCONF_TOPO_IID.child(Node.class, new NodeKey(new NodeId(mountPointNodeName)));
+
+        Optional<MountPoint> optionalMountPoint = null;
+        int timeout = 10000;
+        while (!(optionalMountPoint = mountPointService.getMountPoint(instanceIdentifier)).isPresent() && timeout > 0) {
+
+            LOG.info("Event listener waiting for mount point for Netconf device :: Name : {}", mountPointNodeName);
+            try {
+                Thread.sleep(1000);
+                timeout -= 1000;
+            } catch (InterruptedException e) {
+                LOG.info("Event listener waiting for mount point for Netconf device :: Name : {} Time: {}",
+                        mountPointNodeName, timeout);
+                // Restore interrupted state...
+                Thread.currentThread().interrupt();
+            }
+        }
+
+        if (!optionalMountPoint.isPresent()) {
+            LOG.warn("Event listener timeout while waiting for mount point for Netconf device :: Name : {} ",
+                    mountPointNodeName);
+            return;
+        }
+        // Mountpoint is present for sure
+        MountPoint mountPoint = optionalMountPoint.get();
+
+        DataBroker netconfNodeDataBroker = mountPoint.getService(DataBroker.class).orNull();
+        if (netconfNodeDataBroker == null) {
+            LOG.info("Mountpoint is slave mountpoint {}", mountPointNodeName);
+            return;
+        }
+
+        LOG.info("Databroker service 1:{} 2:{}", dataBroker.hashCode(), netconfNodeDataBroker.hashCode());
+        // getNodeInfoTest(dataBroker);
+
+        // create automatic empty maintenance entry into db before reading and listening for problems
+        this.maintenanceService.createIfNotExists(mountPointNodeName);
+
+        // Setup microwaveEventListener for Notificationservice
+
+        // MicrowaveEventListener microwaveEventListener = new
+        // MicrowaveEventListener(mountPointNodeName, websocketmanagerService,
+        // xmlMapper, databaseClientEvents);
+        ONFCoreNetworkElementRepresentation ne = ONFCoreNetworkElementFactory.create(mountPointNodeName, dataBroker,
+                webSocketService, databaseClientEvents, instanceIdentifier, netconfNodeDataBroker, dcaeProviderClient,
+                aotsMProvider, maintenanceService, notificationDelayService);
+        networkElementRepresentations.put(mountPointNodeName, ne);
+        ne.doRegisterMicrowaveEventListener(mountPoint);
+
+        // Register netconf stream
+        registerNotificationStream(mountPointNodeName, mountPoint, "NETCONF");
+
+        // -- Read data from NE
+        ne.initialReadFromNetworkElement();
+        ne.initSynchronizationExtension();
+
+        // Setup Service that monitors registration/ deregistration of session
+        odlEventListener.registration(mountPointNodeName);
+
+        if (aaiProviderClient != null) {
+            aaiProviderClient.onDeviceRegistered(mountPointNodeName);
+        }
+        // -- Register NE to performance manager
+        if (performanceManager != null) {
+            performanceManager.registration(mountPointNodeName, ne);
+        }
+
+        deviceMonitor.deviceConnectMasterIndication(mountPointNodeName, ne);
+
+        LOG.info("Starting Event listener on Netconf device :: Name : {} finished", mountPointNodeName);
+    }
+
+    // removeListenerOnNode
+    @Override
+    public void leaveConnectedState(NodeId nNodeId, NetconfNode nNode) {
+        String mountPointNodeName = nNodeId.getValue();
+        LOG.info("leaveConnectedState for device :: Name : {}", mountPointNodeName);
+
+        this.maintenanceService.deleteIfNotRequired(mountPointNodeName);
+        ONFCoreNetworkElementRepresentation ne = networkElementRepresentations.remove(mountPointNodeName);
+        if (ne != null) {
+            int problems = ne.removeAllCurrentProblemsOfNode();
+            LOG.debug("Removed all {} problems from database at deregistration for {}", problems, mountPointNodeName);
+            if (odlEventListener != null) {
+                odlEventListener.deRegistration(mountPointNodeName);
+            }
+            if (performanceManager != null) {
+                performanceManager.deRegistration(mountPointNodeName);
+            }
+            if (aaiProviderClient != null) {
+                aaiProviderClient.onDeviceUnregistered(mountPointNodeName);
+            }
+        } else {
+            LOG.info("No related ne object for mountpoint {} to deregister .", mountPointNodeName);
+        }
+        if (deviceMonitor != null) {
+            deviceMonitor.deviceDisconnectIndication(mountPointNodeName);
+        }
+
+    }
+
+    /*
+     * @Override public void mountpointNodeCreation(NodeId nNodeId, NetconfNode nNode) { String
+     * mountPointNodeName = nNodeId.getValue(); LOG.info("mountpointNodeCreation {} {}",
+     * nNodeId.getValue(), nNode.getConnectionStatus());
+     * deviceMonitor.createMountpointIndication(mountPointNodeName); }
+     */
+    @Override
+    public void mountpointNodeRemoved(NodeId nNodeId) {
+        String mountPointNodeName = nNodeId.getValue();
+        LOG.info("mountpointNodeRemoved {}", nNodeId.getValue());
+        deviceMonitor.removeMountpointIndication(mountPointNodeName);
+    }
+
+    /**
+     * Async RPC Interface implementation
+     */
+    @Override
+    public @Nonnull List<String> doClearCurrentFaultByNodename(@Nullable List<String> nodeNamesInput)
+            throws IllegalStateException {
+
+        if (this.databaseClientEvents == null) {
+            throw new IllegalStateException("dbEvents service not instantiated");
+        }
+
+        if (threadDoClearCurrentFaultByNodename != null && threadDoClearCurrentFaultByNodename.isAlive()) {
+            throw new IllegalStateException("A clear task is already active");
+        } else {
+
+            // Create list of mountpoints if input is empty, using the content in ES
+            if (nodeNamesInput == null || nodeNamesInput.size() <= 0) {
+                nodeNamesInput = this.databaseClientEvents.getAllNodesWithCurrentAlarms();
+            }
+
+            // Filter all mountpoints from input that were found and are known to this Cluster-node instance of
+            // DeviceManager
+            final List<String> nodeNamesHandled = new ArrayList<>();
+            for (String mountpointName : nodeNamesInput) {
+                LOG.info("Work with mountpoint {}", mountpointName);
+
+                if (odlEventListener != null && mountpointName.equals(odlEventListener.getOwnKeyName())) {
+
+                    // SDN Controller related alarms
+                    // -- can not be recreated on all nodes in connected state
+                    // -- would result in a DCAE/AAI Notification
+                    // Conclusion for 1810 Delivery ... not covered by RPC function (See issue #43)
+                    LOG.info("Ignore SDN Controller related alarms for {}", mountpointName);
+                    // this.databaseClientEvents.clearFaultsCurrentOfNode(mountpointName);
+                    // nodeNamesHandled.add(mountpointName);
+
+                } else {
+
+                    if (mountPointService != null) {
+                        InstanceIdentifier<Node> instanceIdentifier =
+                                NETCONF_TOPO_IID.child(Node.class, new NodeKey(new NodeId(mountpointName)));
+                        Optional<MountPoint> optionalMountPoint = mountPointService.getMountPoint(instanceIdentifier);
+
+                        if (!optionalMountPoint.isPresent()) {
+                            LOG.info("Remove Alarms for unknown mountpoint {}", mountpointName);
+                            this.databaseClientEvents.clearFaultsCurrentOfNode(mountpointName);
+                            nodeNamesHandled.add(mountpointName);
+                        } else {
+                            if (networkElementRepresentations.containsKey(mountpointName)) {
+                                LOG.info("At node known mountpoint {}", mountpointName);
+                                nodeNamesHandled.add(mountpointName);
+                            } else {
+                                LOG.info("At node unknown mountpoint {}", mountpointName);
+                            }
+                        }
+                    }
+                }
+            }
+
+            // Force a sync
+            if (this.deviceMonitor != null) {
+                this.deviceMonitor.refreshAlarmsInDb();
+            }
+
+            threadDoClearCurrentFaultByNodename = new Thread(() -> {
+                refreshCounter++;
+                LOG.info("Start refresh mountpoint task {}", refreshCounter);
+                // for(String nodeName:nodeNamesOutput) {
+                for (String nodeName : nodeNamesHandled) {
+                    ONFCoreNetworkElementRepresentation ne = networkElementRepresentations.get(nodeName);
+                    if (ne != null) {
+                        LOG.info("Refresh mountpoint {}", nodeName);
+                        ne.initialReadFromNetworkElement();
+                    } else {
+                        LOG.info("Unhandled mountpoint {}", nodeName);
+                    }
+                }
+                LOG.info("End refresh mountpoint task {}", refreshCounter);
+            });
+            threadDoClearCurrentFaultByNodename.start();
+            return nodeNamesHandled;
+        }
+    };
+
+    /**
+     * Indication if init() of devicemanager successfully done.
+     *
+     * @return true if init() was sucessfull. False if not done or not successfull.
+     */
+    public boolean isDevicemanagerInitializationOk() {
+        return this.devicemanagerInitializationOk;
+    }
+
+    /**
+     * Get initialization status of database.
+     *
+     * @return true if fully initialized false if not
+     */
+    public boolean isDatabaseInitializationFinished() {
+        return htDatabase == null ? false : htDatabase.getInitialized();
+    }
+
+    /*---------------------------------------------------------------------
+     * Private funtions
+     */
+
+    /**
+     * Do the stream creation for the device.
+     *
+     * @param mountPointNodeName
+     * @param mountPoint
+     */
+    private void registerNotificationStream(String mountPointNodeName, MountPoint mountPoint, String streamName) {
+
+        final Optional<RpcConsumerRegistry> optionalRpcConsumerService =
+                mountPoint.getService(RpcConsumerRegistry.class);
+        if (optionalRpcConsumerService.isPresent()) {
+            final RpcConsumerRegistry rpcConsumerRegitry = optionalRpcConsumerService.get();
+            final NotificationsService rpcService = rpcConsumerRegitry.getRpcService(NotificationsService.class);
+            if (rpcService == null) {
+                LOG.warn("rpcService is null for mountpoint {}", mountPointNodeName);
+            } else {
+                final CreateSubscriptionInputBuilder createSubscriptionInputBuilder =
+                        new CreateSubscriptionInputBuilder();
+                createSubscriptionInputBuilder.setStream(new StreamNameType(streamName));
+                LOG.info("Event listener triggering notification stream {} for node {}", streamName,
+                        mountPointNodeName);
+                try {
+                    CreateSubscriptionInput createSubscriptionInput = createSubscriptionInputBuilder.build();
+                    if (createSubscriptionInput == null) {
+                        LOG.warn("createSubscriptionInput is null for mountpoint {}", mountPointNodeName);
+                    } else {
+                        rpcService.createSubscription(createSubscriptionInput);
+                    }
+                } catch (NullPointerException e) {
+                    LOG.warn("createSubscription failed");
+                }
+            }
+        } else {
+            LOG.warn("No RpcConsumerRegistry avaialble.");
+        }
+
+    }
+
+    /**
+     * Get NE object
+     *
+     * @param mountpoint mount point name
+     * @return null or NE specific data
+     */
+    public @Nullable ONFCoreNetworkElementRepresentation getNeByMountpoint(String mountpoint) {
+
+        return networkElementRepresentations.get(mountpoint);
+
+    }
+
+    /* -- LOG related functions -- */
+
+
+    private boolean isInClusterMode() {
+        return this.akkaConfig == null ? false : this.akkaConfig.isCluster();
+    }
+
+    private String getClusterNetconfNodeName() {
+        return this.akkaConfig == null ? "" : this.akkaConfig.getClusterConfig().getClusterSeedNodeName("abc");
+    }
+
+    private boolean isMaster(NetconfNode nnode) {
+        if (isInClusterMode()) {
+            LOG.debug("check if me is responsible for node");
+            String masterNodeName = nnode.getClusteredConnectionStatus() == null ? "null"
+                    : nnode.getClusteredConnectionStatus().getNetconfMasterNode();
+            /*
+             * List<NodeStatus> clusterNodeStatusList=nnode.getClusteredConnectionStatus()==null?null:nnode.
+             * getClusteredConnectionStatus().getNodeStatus(); if(clusterNodeStatusList!=null) { for(NodeStatus
+             * s: clusterNodeStatusList) LOG.debug("node "+s.getNode()+
+             * " with status "+(s.getStatus()==null?"null":s.getStatus().getName())); }
+             */
+            String myNodeName = getClusterNetconfNodeName();
+            LOG.debug("sdnMasterNode=" + masterNodeName + " and sdnMyNode=" + myNodeName);
+            if (!masterNodeName.equals(myNodeName)) {
+                LOG.debug("netconf change but me is not master for this node");
+                return false;
+            }
+        }
+        return true;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerService.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerService.java
new file mode 100644
index 0000000..817d78d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerService.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+
+public interface DeviceManagerService {
+
+    public enum Action {
+        ADD,
+        REMOVE,
+        UPDATE
+    }
+    /**
+     * Managed device is connected to node/mountpoint.
+     * @param action provide action
+     * @param nNodeId id of the mountpoint
+     * @param nNode mountpoint contents
+     */
+    void startListenerOnNodeForConnectedState(Action action, NodeId nNodeId, NetconfNode nNode);
+
+    /**
+     * Managed device is disconnected from node/mountpoint.
+     * @param nNodeId id of the mountpoint
+     * @param nNode mountpoint contents
+     */
+    void leaveConnectedState(NodeId nNodeId, NetconfNode nNode);
+
+    /**
+     * Removal indication of node/mountpoint.
+     * @param nNodeId id of the mountpoint
+     */
+    void mountpointNodeRemoved(NodeId nNodeId);
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/ProviderClient.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/ProviderClient.java
new file mode 100644
index 0000000..922b8a0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/ProviderClient.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+
+public interface ProviderClient extends AutoCloseable {
+
+	/**
+	 * Send out problem notification, that was created by a device/ or NE
+	 * @param mountPointName related
+	 * @param notification xml description
+	 */
+    public void sendProblemNotification(String mountPointName, ProblemNotificationXml notification);
+
+	/**
+	 * Send out problem notification
+	 * @param mountPointName related
+	 * @param notification xml description
+	 * @param neDeviceAlarm  true indicates an NE originated alarm, false an sdncontroller generated alarm
+	 */
+	public void sendProblemNotification(String mountPointName, ProblemNotificationXml notification, boolean neDeviceAlarm);
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/ResyncNetworkElementsListener.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/ResyncNetworkElementsListener.java
new file mode 100644
index 0000000..d202cde
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/ResyncNetworkElementsListener.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl;
+
+import java.util.List;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+public interface ResyncNetworkElementsListener
+{
+    /**
+     * Handle API Request and clean up current alarms according to the list of mountpoint id's/devices
+     * Implement RPC function "clear-current-fault-by-nodename"
+     * @return List with
+     * @throws IllegalStateException Illegal state exception
+     */
+    public @Nonnull List<String> doClearCurrentFaultByNodename(@Nullable List<String> nodeNamesInput) throws IllegalStateException;
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/service/HtDatabaseEventsService.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/service/HtDatabaseEventsService.java
new file mode 100644
index 0000000..90b0799
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/service/HtDatabaseEventsService.java
@@ -0,0 +1,228 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.service;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.annotation.Nonnull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDataBaseReaderAndWriter;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseClientAbstract;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseNode;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.IndexClientBuilder;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCoreNetworkElement12Equipment;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.EsEventBase;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.EsFaultCurrent;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.EsFaultLog;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.equipment.EsEquipment;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.equipment.EsToplevelEquipment;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.equipment.ExtendedEquipment;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.AttributeValueChangedNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.MwtNotificationBase;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectCreationNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectDeletionNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Event service, writing all events into the database into the appropriate index.
+ *
+ * @author herbert
+ */
+public class HtDatabaseEventsService {
+    private static final Logger LOG = LoggerFactory.getLogger(HtDatabaseEventsService.class);
+
+    ///** Filename in the resources with maven initialized version information  */
+    //private static final String RESOURCENAME = "version.properties"; // could also be a constant
+    ///** Index name to be used */
+    private static final String INDEX = "sdnevents";
+    private static final String MAPPING = "/elasticsearch/index/sdnevents/sdneventsMapping.json";
+
+    private HtDatabaseClientAbstract client;
+    private HtDataBaseReaderAndWriter<EsEventBase> eventRWEventLog;
+    private HtDataBaseReaderAndWriter<EsFaultCurrent> eventRWFaultCurrent;
+    private HtDataBaseReaderAndWriter<EsFaultLog> eventRWFaultLog;
+    private HtDataBaseReaderAndWriter<EsEquipment> eventRWEquipment;
+    private HtDataBaseReaderAndWriter<EsToplevelEquipment> eventRWToplevelEquipment;
+
+
+    // --- Construct and initialize
+
+    public HtDatabaseEventsService(HtDatabaseNode database) {
+
+        LOG.info("Create {} start", HtDatabaseEventsService.class);
+
+        try {
+            // Create control structure
+            IndexClientBuilder clientBuilder = IndexClientBuilder.getBuilder(INDEX).setMappingSettingJsonFileName(MAPPING);
+            client = clientBuilder.create(database);
+            clientBuilder.close();
+
+            eventRWEventLog = new HtDataBaseReaderAndWriter<>(client, EsEventBase.ESDATATYPENAME, EsEventBase.class);
+            eventRWFaultLog = new HtDataBaseReaderAndWriter<>(client, EsFaultLog.ESDATATYPENAME, EsFaultLog.class);
+            eventRWFaultCurrent = new HtDataBaseReaderAndWriter<>(client, EsFaultCurrent.ESDATATYPENAME, EsFaultCurrent.class);
+            eventRWToplevelEquipment = new HtDataBaseReaderAndWriter<>(client, EsToplevelEquipment.ESDATATYPENAME, EsToplevelEquipment.class);
+            eventRWEquipment = new HtDataBaseReaderAndWriter<>(client, EsEquipment.ESDATATYPENAME, EsEquipment.class);
+
+
+        } catch (Exception e) {
+            LOG.error("Can not start database client. Exception: {}", e.getMessage());
+        }
+        LOG.info("Create {} finished. DB Service {} started.", HtDatabaseEventsService.class,  client != null ? "sucessfully" : "not" );
+    }
+
+    // --- Function
+
+    public void writeEventLog(ObjectCreationNotificationXml event) {
+        writeEventGeneric(event);
+    }
+
+    public void writeEventLog(ObjectDeletionNotificationXml event) {
+        writeEventGeneric(event);
+    }
+
+    public void writeEventLog(AttributeValueChangedNotificationXml event) {
+        writeEventGeneric(event);
+    }
+
+    private void writeEventGeneric(MwtNotificationBase event) {
+        if (client == null) {
+            LOG.debug("No DB, can not write: {}",event.toString());
+            return;
+        }
+
+        LOG.debug("Write event: {}",event.toString());
+        EsEventBase eventBase = new EsEventBase();
+        eventBase.setProblem(event);
+        eventRWEventLog.doWrite(eventBase);
+    }
+
+    public void writeFaultLog(ProblemNotificationXml fault) {
+        if (client == null) {
+            LOG.debug("No DB, can not write: {}",fault.toString());
+            return;
+        }
+
+        LOG.debug("Write fault to faultlog: {}",fault.toString());
+        EsFaultLog eventProblem = new EsFaultLog();
+        eventProblem.setProblem(fault);
+        eventRWFaultLog.doWrite(eventProblem);
+    }
+
+    public void updateFaultCurrent(ProblemNotificationXml fault) {
+        if (client == null) {
+            LOG.debug("No DB, can not write: {}",fault.toString());
+            return;
+        }
+
+        if (!fault.isNotManagedAsCurrentProblem()) {
+            EsFaultCurrent eventProblem = new EsFaultCurrent();
+            eventProblem.setProblem(fault);
+
+            if (eventProblem.isNoAlarmIndication()) {
+                LOG.debug("Remove from currentFaults: {}",fault.toString());
+                eventRWFaultCurrent.doRemove(eventProblem);
+            } else {
+                LOG.debug("Write to currentFaults: {}",fault.toString());
+                eventRWFaultCurrent.doWrite(eventProblem);
+            }
+        } else {
+            LOG.debug("Ingnore for currentFaults: {}",fault.toString());
+        }
+    }
+
+    /**
+     * Remove all entries for one node
+     * @param nodeName contains the mountpointname
+     * @return number of deleted entries
+     */
+    public int clearFaultsCurrentOfNode(String nodeName) {
+        if (client == null) {
+            LOG.debug("No DB, can not delete for node: {}", nodeName);
+            return -1;
+        }
+        LOG.debug("Remove from currentFaults all faults for node: {}", nodeName);
+        return eventRWFaultCurrent.doRemoveByQuery(EsFaultCurrent.getQueryForOneNode(nodeName));
+    }
+
+    /**
+     * Remove all entries for one node
+     * @param nodeName contains the mountpointname
+     * @param objectId of element to be deleted
+     * @return number of deleted entries
+     */
+    public int clearFaultsCurrentOfNodeWithObjectId(String nodeName, String objectId) {
+        if (client == null) {
+            LOG.debug("No DB, can not delete for node: {}", nodeName);
+            return -1;
+        }
+        LOG.debug("Remove from currentFaults all faults for node/objectId: {}/{}", nodeName, objectId);
+        return eventRWFaultCurrent.doRemoveByQuery(EsFaultCurrent.getQueryForOneNodeAndObjectId(nodeName, objectId));
+
+    }
+
+    /**
+     * Deliver list with all mountpoint/node-names in the database.
+     * @return List of all mountpoint/node-names the had active alarms.
+     */
+    public @Nonnull List<String> getAllNodesWithCurrentAlarms() {
+        if (client == null) {
+            LOG.debug("No DB, can not delete for all nodes");
+            return new ArrayList<>();
+        }
+        LOG.debug("Remove from currentFaults faults for all node");
+        List<String> nodeNames = new ArrayList<>();
+
+        for (EsFaultCurrent fault : eventRWFaultCurrent.doReadAll()) {
+            String nodeName = fault.getProblem().getNodeName();
+            if (!nodeNames.contains(nodeName)) {
+                //this.clearFaultsCurrentOfNode(nodeName); -> Function shifted
+                nodeNames.add(nodeName);
+            }
+        }
+        return nodeNames;
+    }
+
+
+    /**
+     * Write inventory to DB
+     * @param equipment all equipment of network element
+     */
+    public void writeInventory(ONFCoreNetworkElement12Equipment equipment) {
+        if (client == null) {
+            LOG.debug("No DB, can not write for mountpoint: {}",equipment.getMountpoint());
+            return;
+        }
+
+        LOG.debug("Write inventory to database for mountpoint: {}",equipment.getMountpoint());
+
+        EsToplevelEquipment esToplevelEquipment = new EsToplevelEquipment();
+        esToplevelEquipment.set(equipment);
+        eventRWToplevelEquipment.doWrite(esToplevelEquipment);
+
+        List<ExtendedEquipment> equipmentList = equipment.getEquipmentList();
+        EsEquipment esEquipment;
+        for (ExtendedEquipment equipment1 : equipmentList) {
+            esEquipment = new EsEquipment();
+            esEquipment.set(equipment.getMountpoint(), equipment1);
+            eventRWEquipment.doWrite(esEquipment);
+        }
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsEventBase.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsEventBase.java
new file mode 100644
index 0000000..d173145
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsEventBase.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.EsObject;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.MwtNotificationBase;
+
+/**
+ *
+ * Event from Network to be recorded in the database
+ *
+ */
+
+public class EsEventBase extends EsObject {
+
+    public static final String ESDATATYPENAME = "eventlog";
+
+    private MwtNotificationBase event;
+
+    public MwtNotificationBase getProblem() {
+        return event;
+    }
+
+    public void setProblem(MwtNotificationBase event) {
+        this.event = event;
+    }
+
+    public static String getEsdatatypename() {
+        return ESDATATYPENAME;
+    }
+
+ }
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsFaultCurrent.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsFaultCurrent.java
new file mode 100644
index 0000000..b39b2e2
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsFaultCurrent.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types;
+
+import org.elasticsearch.index.query.BoolQueryBuilder;
+import org.elasticsearch.index.query.QueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.EsObject;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+
+/**
+ * Event from Network to be recorded in the database
+ *
+ */
+
+public class EsFaultCurrent extends EsObject {
+
+    public static final String ESDATATYPENAME = "faultcurrent";
+    //private static final String NOALARM = "NonAlarmed";
+
+    private ProblemNotificationXml faultCurrent;
+
+    public ProblemNotificationXml getProblem() {
+        return faultCurrent;
+    }
+
+    public void setProblem(ProblemNotificationXml fault) {
+        this.faultCurrent = fault;
+        setEsId(fault.genSpecificEsId());
+    }
+
+    public boolean isNoAlarmIndication() {
+        return faultCurrent.getSeverity().isNoAlarmIndication();
+    }
+
+    /**
+     * TODO: termquery to matchquery, termquery with scoring, not exact matching
+     * @param nodeName name of the node
+     * @return query builder
+     */
+    public static QueryBuilder getQueryForOneNode( String nodeName) {
+        return QueryBuilders.termQuery("faultCurrent.nodeName", nodeName);
+    }
+    public static QueryBuilder getQueryForAll() {
+        return QueryBuilders.matchAllQuery();
+    }
+
+    public static QueryBuilder getQueryForOneNodeAndObjectId( String nodeName, String objectId) {
+        BoolQueryBuilder bq = QueryBuilders.boolQuery();
+        bq.must(QueryBuilders.termQuery("faultCurrent.nodeName", nodeName));
+        bq.must(QueryBuilders.termQuery("faultCurrent.objectId", objectId));
+        return bq;
+        //return QueryBuilders.termQuery("faultCurrent.objectId", objectId);
+
+    }
+
+    public static String getEsdatatypename() {
+        return ESDATATYPENAME;
+    }
+ }
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsFaultLog.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsFaultLog.java
new file mode 100644
index 0000000..87c77ea
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsFaultLog.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.EsObject;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+
+/**
+ *
+ * Event from Network to be recorded in the database
+ *
+ */
+
+public class EsFaultLog extends EsObject {
+
+    public static final String ESDATATYPENAME = "faultlog";
+
+    private ProblemNotificationXml fault;
+
+    public ProblemNotificationXml getProblem() {
+        return fault;
+    }
+
+    public void setProblem(ProblemNotificationXml fault) {
+        this.fault = fault;
+    }
+
+    public static String getEsdatatypename() {
+        return ESDATATYPENAME;
+    }
+
+ }
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsVersionInfo.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsVersionInfo.java
new file mode 100644
index 0000000..ca5b367
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsVersionInfo.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.EsObject;
+import org.osgi.framework.Version;
+
+/**
+ *
+ * Create a VersionInfo Object Network to be recorded in the database
+ *
+ */
+
+public class EsVersionInfo extends EsObject {
+
+    public static final String ESDATATYPENAME = "versioninfo";
+    private static final String EMPTY = "";
+
+    private Version bundleVersion;
+    private String build = EMPTY;
+    private String version = EMPTY;
+
+    public EsVersionInfo() {
+    }
+
+    public Version getBundleVersion() {
+        return bundleVersion;
+    }
+
+    public void setBundleVersion(Version bundleVersion) {
+        this.bundleVersion = bundleVersion;
+    }
+
+    public String getBuild() {
+        return build;
+    }
+
+    public void setBuild(String build) {
+        this.build = build;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public static String getEsdatatypename() {
+        return ESDATATYPENAME;
+    }
+
+    @Override
+    public String toString() {
+        return "EsVersionInfo [bundleVersion=" + bundleVersion + ", build=" + build + ", version=" + version + "]";
+    }
+
+
+ }
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/equipment/EsEquipment.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/equipment/EsEquipment.java
new file mode 100644
index 0000000..5c70ad9
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/equipment/EsEquipment.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.equipment;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.EsObject;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.Equipment;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.equipment.g.ContainedHolder;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.equipment.g.ManufacturedThing;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.manufactured.thing.g.EquipmentInstance;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.manufactured.thing.g.EquipmentType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.manufactured.thing.g.ManufacturerProperties;
+
+public class EsEquipment extends EsObject {
+
+    public static final String ESDATATYPENAME = "inventoryequipment";
+
+    int treeLevel;
+    String parentUuid;
+    String mountpoint;
+    String uuid;
+    List<String> containedHolder;
+    String manufacturerName;
+    String manufacturerIdentifier;
+    String serial;
+    String date;
+    String version;
+    String description;
+    String partTypeId;
+    String modelIdentifier;
+    String typeName;
+
+
+    public EsEquipment set( String mountpoint, ExtendedEquipment extendedEquipment ) {
+
+        Equipment equipment = extendedEquipment.getEquipment();
+
+        this.parentUuid = extendedEquipment.getParentUuid();
+        this.treeLevel = extendedEquipment.getTreeLevel();
+        this.mountpoint = mountpoint;
+        this.uuid = equipment.getUuid().getValue();
+        this.setEsId(this.mountpoint+"/"+this.uuid);
+
+        this.containedHolder = new ArrayList<>();
+        List<ContainedHolder> containedHolderList = equipment.getContainedHolder();
+        if (containedHolderList != null && !containedHolderList.isEmpty()) {
+            for (ContainedHolder containedHolderElement: containedHolderList) {
+                this.containedHolder.add(containedHolderElement.key().getUuid().getValue());
+            }
+        }
+        ManufacturedThing manufacturedThing = equipment.getManufacturedThing();
+        if (manufacturedThing != null) {
+            ManufacturerProperties manufacturedProperties = manufacturedThing.getManufacturerProperties();
+            if (manufacturedProperties != null) {
+                this.manufacturerName = manufacturedProperties.getManufacturerName();
+                this.manufacturerIdentifier = manufacturedProperties.getManufacturerIdentifier();
+            }
+            EquipmentInstance equipmentInstance = manufacturedThing.getEquipmentInstance();
+            if (equipmentInstance != null) {
+                this.serial = equipmentInstance.getSerialNumber();
+                this.date = equipmentInstance.getManufactureDate();
+            }
+            EquipmentType equipmentType = manufacturedThing.getEquipmentType();
+            if (equipmentType != null) {
+                this.version = equipmentType.getVersion();
+                this.description = equipmentType.getDescription();
+                this.partTypeId = equipmentType.getPartTypeIdentifier();
+                this.modelIdentifier = equipmentType.getModelIdentifier();
+                this.typeName = equipmentType.getTypeName();
+            }
+        }
+
+        return this;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/equipment/EsToplevelEquipment.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/equipment/EsToplevelEquipment.java
new file mode 100644
index 0000000..a2e7af7
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/equipment/EsToplevelEquipment.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.equipment;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.EsObject;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCoreNetworkElement12Equipment;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+
+public class EsToplevelEquipment extends EsObject {
+
+    public static final String ESDATATYPENAME = "inventorytoplevel";
+
+    String mountpoint;
+	List<String> uuidList;
+
+	public EsToplevelEquipment set(ONFCoreNetworkElement12Equipment coreEquipment) {
+
+		mountpoint = coreEquipment.getMountpoint();
+		this.setEsId(mountpoint);
+
+		uuidList = new ArrayList<>();
+		for (UniversalId uuid : coreEquipment.getTopLevelEqUuidList()) {
+			uuidList.add(uuid.getValue());
+		}
+
+		return(this);
+	}
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/equipment/ExtendedEquipment.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/equipment/ExtendedEquipment.java
new file mode 100644
index 0000000..cdccd97
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/equipment/ExtendedEquipment.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.equipment;
+
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.Equipment;
+
+public class ExtendedEquipment {
+
+    private final String parentUuid;
+    private final int treeLevel;
+    private final Equipment equipment;
+
+    /**
+     * Equipment with additional information beside NETCONF equipment
+     *
+     * @param parentUuid of parent equipment
+     * @param equipment NETCONF Equipment
+     * @param treeLevel level of tree starting with root at 0
+     */
+    public ExtendedEquipment(String parentUuid, Equipment equipment, int treeLevel) {
+        super();
+        this.parentUuid = parentUuid;
+        this.equipment = equipment;
+        this.treeLevel = treeLevel;
+    }
+
+    public String getParentUuid() {
+        return parentUuid;
+    }
+
+    public Equipment getEquipment() {
+        return equipment;
+    }
+
+    public int getTreeLevel() {
+        return treeLevel;
+    }
+
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/MicrowaveEventListener12.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/MicrowaveEventListener12.java
new file mode 100644
index 0000000..6612f62
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/MicrowaveEventListener12.java
@@ -0,0 +1,205 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.listener;
+
+import java.util.List;
+
+import javax.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalSeverity;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCoreNetworkElement12Equipment;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCoreNetworkElementCallback;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc.OnfMicrowaveModelNotification;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.toggleAlarmFilter.NotificationDelayFilter;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.toggleAlarmFilter.NotificationDelayService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.toggleAlarmFilter.NotificationDelayedListener;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.ProviderClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.service.HtDatabaseEventsService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.AttributeValueChangedNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectCreationNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectDeletionNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.WebSocketServiceClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.MaintenanceService;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ProblemNotification;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Important: Websocket notification must be the last action.
+ * @author herbert
+ *
+ */ //OnfMicrowaveModelNotification  //
+public class MicrowaveEventListener12 implements OnfMicrowaveModelNotification, NotificationDelayedListener<ProblemNotificationXml> {
+
+    private static final Logger LOG = LoggerFactory.getLogger(MicrowaveEventListener12.class);
+
+    private final String nodeName;
+    private final WebSocketServiceClient webSocketService;
+    //private final WebsocketmanagerService websocketmanagerService;
+    //private final XmlMapper xmlMapper;
+    private final HtDatabaseEventsService databaseService;
+    private final ProviderClient dcaeProvider;
+    private final @Nullable ProviderClient aotsmClient;
+
+    private final MaintenanceService maintenanceService;
+
+    private final NotificationDelayFilter<ProblemNotificationXml> delayFilter;
+    private final ONFCoreNetworkElementCallback ne;
+
+    public MicrowaveEventListener12(String nodeName, WebSocketServiceClient webSocketService,
+            HtDatabaseEventsService databaseService, ProviderClient dcaeProvider,@Nullable ProviderClient aotsmClient,
+            MaintenanceService maintenanceService2,NotificationDelayService<ProblemNotificationXml> notificationDelayService,
+            ONFCoreNetworkElementCallback ne) {
+        super();
+        this.nodeName = nodeName;
+        //this.websocketmanagerService = websocketmanagerService;
+        //this.xmlMapper = xmlMapper;
+        this.webSocketService = webSocketService;
+        this.databaseService = databaseService;
+        this.dcaeProvider = dcaeProvider;
+        this.aotsmClient = aotsmClient;
+        this.maintenanceService=maintenanceService2;
+        this.delayFilter=notificationDelayService.getInstance(nodeName, this);//12(nodeName,this);
+        this.ne = ne;
+    }
+
+
+    @Override
+    public void onAttributeValueChangedNotification(AttributeValueChangedNotificationXml notificationXml) {
+
+        ne.notificationFromNeListener(notificationXml);
+
+        databaseService.writeEventLog(notificationXml);
+
+        webSocketService.sendViaWebsockets(nodeName, notificationXml);
+    }
+
+
+    @Override
+    public void onObjectCreationNotification(ObjectCreationNotificationXml notificationXml) {
+
+        databaseService.writeEventLog(notificationXml);
+
+        webSocketService.sendViaWebsockets(nodeName, notificationXml);
+
+    }
+
+    @Override
+    public void onObjectDeletionNotification(ObjectDeletionNotificationXml notificationXml) {
+
+        databaseService.writeEventLog(notificationXml);
+
+        webSocketService.sendViaWebsockets(nodeName, notificationXml);
+    }
+
+    @Override
+    public void onProblemNotification(ProblemNotificationXml notificationXml) {
+
+        databaseService.writeFaultLog(notificationXml);
+        databaseService.updateFaultCurrent(notificationXml);
+
+        //ToggleAlarmFilter functionality
+        if(NotificationDelayFilter.isEnabled())
+        {
+            if(notificationXml.getSeverity() == InternalSeverity.NonAlarmed) {
+                delayFilter.clearAlarmNotification(notificationXml.getProblem(), notificationXml);
+            } else {
+                delayFilter.pushAlarmNotification(notificationXml.getProblem(), notificationXml);
+            }
+        }
+        else
+        {
+             this.pushAlarmIfNotInMaintenance(notificationXml);
+        }
+        //end of ToggleAlarmFilter
+
+        this.webSocketService.sendViaWebsockets(nodeName, notificationXml);
+
+    }
+
+    @Override
+    public void onNotificationDelay(ProblemNotificationXml notificationXml) {
+
+        LOG.debug("Got delayed event of type :: {}", ProblemNotification.class.getSimpleName());
+        this.pushAlarmIfNotInMaintenance(notificationXml);
+
+    }
+    private void pushAlarmIfNotInMaintenance(ProblemNotificationXml notificationXml)
+    {
+         if(!this.maintenanceService.isONFObjectInMaintenance(nodeName, notificationXml.getObjectId(), notificationXml.getProblem()))
+         {
+             this.dcaeProvider.sendProblemNotification(nodeName, notificationXml);
+             if(this.aotsmClient!=null) {
+                this.aotsmClient.sendProblemNotification(nodeName, notificationXml);
+            }
+         }
+         else
+         {
+             LOG.debug("Notification will not be sent to external services. Device "+this.nodeName+" is in maintenance mode");
+         }
+    }
+    private void initCurrentProblem(ProblemNotificationXml notificationXml) {
+        databaseService.updateFaultCurrent(notificationXml);
+        //to prevent push alarms on reconnect
+        //=> only pushed alarms are forwared to dcae
+        //dcaeProvider.sendProblemNotification(nodeName, notificationXml);
+        if(aotsmClient!=null) {
+            aotsmClient.sendProblemNotification(this.nodeName, notificationXml);
+        }
+    }
+
+    /**
+     * Called to initialize with the current status and notify the clients
+     * @param notificationXmlList List with problems
+     */
+    public void initCurrentProblemStatus(List<ProblemNotificationXml> notificationXmlList) {
+
+        for (ProblemNotificationXml notificationXml : notificationXmlList) {
+            initCurrentProblem(notificationXml);
+        }
+
+    }
+
+    /**
+     * Called on exit to remove everything from the current list.
+     * @return Number of deleted objects
+     */
+    public int removeAllCurrentProblemsOfNode() {
+        int deleted = databaseService.clearFaultsCurrentOfNode(nodeName);
+        return deleted;
+    }
+
+    /**
+     * Called on exit to remove for one Object-Pac from the current list.
+     * @param objectId uuid of the interface-pac or equipment-pac
+     * @return Number of deleted objects
+     */
+    public int removeObjectsCurrentProblemsOfNode(String objectId) {
+        int deleted = databaseService.clearFaultsCurrentOfNodeWithObjectId(nodeName, objectId);
+        return deleted;
+    }
+
+    /**
+     * Write equipment data to database
+     * @param equipment to write
+     */
+    public void writeEquipment(ONFCoreNetworkElement12Equipment equipment) {
+        databaseService.writeInventory(equipment);
+    }
+
+ }
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/NetconfChangeListener.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/NetconfChangeListener.java
new file mode 100644
index 0000000..1a92f37
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/NetconfChangeListener.java
@@ -0,0 +1,180 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.listener;
+
+import java.util.Collection;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerService.Action;
+import org.opendaylight.controller.md.sal.binding.api.ClusteredDataTreeChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
+import org.opendaylight.controller.md.sal.binding.api.DataObjectModification.ModificationType;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.network.topology.topology.topology.types.TopologyNetconf;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// 07.09.18 Switched to DataTreeChangeListener from ClusteredDataTreeChangeListener -> DM Service is running at all nodes
+// This is not correct
+public class NetconfChangeListener implements ClusteredDataTreeChangeListener<Node>, AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(NetconfChangeListener.class);
+
+    private static final InstanceIdentifier<Node> NETCONF_NODE_TOPO_IID = InstanceIdentifier
+            .create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName())))
+            .child(Node.class);
+    // Name of ODL controller NETCONF instance
+    private static final String CONTROLLER = "controller-config";
+
+    private final DeviceManagerService deviceManagerService;
+    private final DataBroker dataBroker;
+    private ListenerRegistration<NetconfChangeListener> dlcReg;
+
+    public NetconfChangeListener(DeviceManagerService deviceManagerService, DataBroker dataBroker) {
+        this.deviceManagerService = deviceManagerService;
+        this.dataBroker = dataBroker;
+    }
+
+    public void register() {
+        DataTreeIdentifier<Node> treeId = new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
+                NETCONF_NODE_TOPO_IID);
+        dlcReg = dataBroker.registerDataTreeChangeListener(treeId, this);
+    }
+
+    @Override
+    public void close() {
+        if (dlcReg != null) {
+            dlcReg.close();
+        }
+    }
+    /*---------------------------------------------------------------------------
+     * Listener
+     */
+
+    @Override
+    public void onDataTreeChanged(Collection<DataTreeModification<Node>> changes) {
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("OnDataChange, TreeChange {}", changes);
+        } else if (LOG.isDebugEnabled()) {
+            LOG.debug("OnDataChange, TreeChange");
+        }
+
+        for (final DataTreeModification<Node> change : changes) {
+            final DataObjectModification<Node> root = change.getRootNode();
+            final ModificationType modificationType = root.getModificationType();
+            if (LOG.isTraceEnabled()) {
+                LOG.trace("Handle this modificationType:{} path:{} root:{}", modificationType, change.getRootPath(), root);
+            }
+            switch (modificationType) {
+                case SUBTREE_MODIFIED:
+                    // Change of subtree information
+                    // update(change); OLD
+                    doProcessing(Action.UPDATE, root.getDataAfter());
+                    break;
+                case WRITE:
+                    // Create or modify top level node
+                    // Treat an overwrite as an update
+                    boolean update = root.getDataBefore() != null;
+                    if (update) {
+                        //update(change);
+                        doProcessing(Action.UPDATE, root.getDataAfter());
+                    } else {
+                        //add(change);
+                        doProcessing(Action.ADD, root.getDataAfter());
+                    }
+                    break;
+                case DELETE:
+                    // Node removed
+                    //remove(change);
+                    doProcessing(Action.REMOVE, root.getDataBefore());
+                    break;
+            }
+        }
+    }
+
+    /* ----------------------------------------------------------------
+     * Functions to select the right node from DataObjectModification
+     */
+
+    /**
+     * Process event and forward to clients
+     * @param action
+     * @param node   Basis node
+     */
+    private void doProcessing(Action action, Node node) {
+
+        NodeId nodeId;
+        NetconfNode nnode;
+        try {
+            NodeKey nodeKey = node.key();
+            nodeId = nodeKey.getNodeId();
+            nnode = node.augmentation(NetconfNode.class);
+        } catch (NullPointerException e) {
+            LOG.warn("Unexpected null .. stop processing.", e);
+            return;
+        }
+
+        LOG.debug("doProcessing action {} {}",action, nodeId);
+        String nodeIdString = nodeId.getValue();
+        // Do not forward any controller related events to devicemanager
+        if (nodeIdString.equals(CONTROLLER)) {
+            LOG.debug("Stop processing for [{}]", nodeIdString);
+            return;
+        }
+
+        // Related to action
+        if (action == Action.REMOVE) {
+            deviceManagerService.mountpointNodeRemoved(nodeId); //Stop Monitor
+            deviceManagerService.leaveConnectedState(nodeId, nnode); //Remove Mountpoint handler
+            return;
+        }
+
+        // Related to Mountpoint status
+        ConnectionStatus csts = nnode.getConnectionStatus();
+        LOG.debug("NETCONF Node handled with status: {} {}", csts, nnode.getClusteredConnectionStatus());
+        if (csts != null) {
+            switch (csts) {
+                case Connected: {
+                    deviceManagerService.startListenerOnNodeForConnectedState(action, nodeId, nnode);
+                    break;
+                }
+                case UnableToConnect:
+                case Connecting: {
+                    deviceManagerService.leaveConnectedState(nodeId, nnode);
+                    break;
+                }
+            }
+        } else {
+            LOG.debug("NETCONF Node handled with null status");
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/ODLEventListener.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/ODLEventListener.java
new file mode 100644
index 0000000..ace5f12
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/ODLEventListener.java
@@ -0,0 +1,208 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.listener;
+
+import javax.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalDateAndTime;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalSeverity;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.NetconfTimeStamp;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.ProviderClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.service.HtDatabaseEventsService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectCreationNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectDeletionNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.WebSocketServiceClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.MaintenanceService;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ProblemNotification;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Responsible class for documenting changes in the ODL itself. The occurence of
+ * such an event is documented in the database and to clients. Specific example
+ * here is the registration or deregistration of a netconf device. This service
+ * has an own eventcounter to apply to the ONF Coremodel netconf behaviour.
+ *
+ * Important: Websocket notification must be the last action.
+ *
+ * @author herbert
+ */
+
+public class ODLEventListener {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ODLEventListener.class);
+    private static final NetconfTimeStamp NETCONFTIME_CONVERTER = NetconfTimeStamp.getConverter();
+
+
+    private final String ownKeyName;
+
+    private final WebSocketServiceClient webSocketService;
+    private final HtDatabaseEventsService databaseService;
+    private final ProviderClient dcaeProvider;
+    private final ProviderClient aotsMProvider;
+    private int eventNumber;
+    private final MaintenanceService maintenanceService;
+    /*---------------------------------------------------------------
+     * Construct
+     */
+
+    /**
+     * Create a Service to document events to clients and within a database
+     *
+     * @param ownKeyName          The name of this service, that is used in the
+     *                            database as identification key.
+     * @param webSocketService    service to direct messages to clients
+     * @param databaseService     service to write to the database
+     * @param dcaeProvider        to deliver problems to
+     * @param maintenanceService2
+     */
+    @SuppressWarnings("javadoc")
+    public ODLEventListener(String ownKeyName, WebSocketServiceClient webSocketService,
+            HtDatabaseEventsService databaseService, ProviderClient dcaeProvider,
+            @Nullable ProviderClient aotsMProvider, MaintenanceService maintenanceService) {
+        super();
+
+        this.ownKeyName = ownKeyName;
+        this.webSocketService = webSocketService;
+
+        this.databaseService = databaseService;
+        this.dcaeProvider = dcaeProvider;
+        this.aotsMProvider = aotsMProvider;
+
+        this.eventNumber = 0;
+        this.maintenanceService = maintenanceService;
+
+    }
+
+    /*---------------------------------------------------------------
+     * Functions
+     */
+
+    /**
+     * A registration of a mountpoint occured.
+     *
+     * @param registrationName Name of the event that is used as key in the
+     *                         database.
+     */
+
+    public void registration(String registrationName) {
+
+        ObjectCreationNotificationXml cNotificationXml = new ObjectCreationNotificationXml(ownKeyName,
+                popEvntNumberAsString(), InternalDateAndTime.valueOf(NETCONFTIME_CONVERTER.getTimeStamp()),
+                registrationName);
+
+        // Write first to prevent missing entries
+        databaseService.writeEventLog(cNotificationXml);
+
+        webSocketService.sendViaWebsockets(registrationName, cNotificationXml);
+
+    }
+
+    /**
+     * A deregistration of a mountpoint occured.
+     *
+     * @param registrationName Name of the event that is used as key in the
+     *                         database.
+     */
+
+    public void deRegistration(String registrationName) {
+
+        ObjectDeletionNotificationXml dNotificationXml = new ObjectDeletionNotificationXml(ownKeyName,
+                popEvntNumberAsString(), InternalDateAndTime.valueOf(NETCONFTIME_CONVERTER.getTimeStamp()),
+                registrationName);
+
+        // Write first to prevent missing entries
+        databaseService.writeEventLog(dNotificationXml);
+
+        webSocketService.sendViaWebsockets(registrationName, dNotificationXml);
+
+    }
+
+    /**
+     * At a mountpoint a problem situation is indicated
+     *
+     * @param registrationName indicating object within SDN controller, normally the
+     *                         mountpointName
+     * @param problemName      that changed
+     * @param problemSeverity  of the problem according to NETCONF/YANG
+     */
+
+    public void onProblemNotification(String registrationName, String problemName, InternalSeverity problemSeverity) {
+        LOG.debug("Got event of type :: {} or {} or {}", ProblemNotification.class.getSimpleName(),
+                org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ProblemNotification.class
+                        .getSimpleName(),
+                org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ProblemNotification.class
+                        .getSimpleName());
+        // notification
+
+        ProblemNotificationXml notificationXml = new ProblemNotificationXml(ownKeyName, registrationName, problemName,
+                problemSeverity,
+                // popEvntNumberAsString(), InternalDateAndTime.TESTPATTERN );
+                popEvntNumberAsString(), InternalDateAndTime.valueOf(NETCONFTIME_CONVERTER.getTimeStamp()));
+
+        databaseService.writeFaultLog(notificationXml);
+        databaseService.updateFaultCurrent(notificationXml);
+
+        if (!maintenanceService.isONFObjectInMaintenance(registrationName, notificationXml.getObjectId(),
+                notificationXml.getProblem())) {
+            dcaeProvider.sendProblemNotification(ownKeyName, notificationXml);
+            if (aotsMProvider != null) {
+                aotsMProvider.sendProblemNotification(ownKeyName, notificationXml, false);// not a nealarm, its a
+            }
+        } // sdncontroller alarm
+        else {
+            LOG.debug("Notification will not be sent to external services. Device " + registrationName
+                    + " is in maintenance mode");
+        }
+
+        webSocketService.sendViaWebsockets(registrationName, notificationXml);
+    }
+
+    /**
+     * Called on exit to remove everything for a node from the current list.
+     *
+     * @param nodeName to remove all problems for
+     * @return Number of deleted objects
+     */
+    public int removeAllCurrentProblemsOfNode(String nodeName) {
+        return databaseService.clearFaultsCurrentOfNodeWithObjectId(ownKeyName, nodeName);
+    }
+
+    /*---------------------------------------------------------------
+     * Get/Set
+     */
+
+    /**
+     * @return the ownKeyName
+     */
+    public String getOwnKeyName() {
+        return ownKeyName;
+    }
+
+    /*---------------------------------------------------------------
+     * Private
+     */
+
+    private String popEvntNumberAsString() {
+        return String.valueOf(popEvntNumber());
+    }
+
+    private int popEvntNumber() {
+        return eventNumber++;
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/AttributeValueChangedNotificationXml.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/AttributeValueChangedNotificationXml.java
new file mode 100644
index 0000000..8ec5903
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/AttributeValueChangedNotificationXml.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalDateAndTime;
+
+@XmlRootElement(name = "AttributeValueChangedNotification")
+public class AttributeValueChangedNotificationXml extends MwtNotificationBase implements GetEventType {
+
+    private static String EVENTTYPE =  "AttributeValueChangedNotification";
+
+    @XmlElement(name = "attributeName")
+    private String attributeName;
+
+    @XmlElement(name = "newValue")
+    private String newValue;
+
+    public AttributeValueChangedNotificationXml() {
+
+    }
+
+    /**
+     * Normalized notification
+     * @param nodeName name of mountpoint
+     * @param counter of notification
+     * @param timeStamp from ne
+     * @param objectIdRef from ne
+     * @param attributeName from ne
+     * @param newValue from ne
+     */
+    public AttributeValueChangedNotificationXml(String nodeName, String counter, InternalDateAndTime timeStamp, String objectIdRef,
+            String attributeName, String newValue) {
+        super(nodeName, counter, timeStamp, objectIdRef);
+        this.attributeName = attributeName;
+        this.newValue = newValue;
+    }
+
+    public String getAttributeName() {
+        return attributeName;
+    }
+
+    public String getNewValue() {
+        return newValue;
+    }
+
+    @Override
+    public String getEventType() {
+        return EVENTTYPE;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/GetEventType.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/GetEventType.java
new file mode 100644
index 0000000..ba3e23c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/GetEventType.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml;
+
+/**
+ * @author herbert
+ *
+ */
+public interface GetEventType {
+    public String getEventType();
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/MwtNotificationBase.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/MwtNotificationBase.java
new file mode 100644
index 0000000..1496406
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/MwtNotificationBase.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.xml.bind.annotation.XmlElement;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalDateAndTime;
+
+public class MwtNotificationBase {
+
+    private static String EMPTY = "empty";
+
+    private String nodeName;
+    private String counter;
+    private String timeStamp;
+    private String objectId;
+
+    public MwtNotificationBase() {
+        // For Jaxb
+    }
+
+    public MwtNotificationBase(String nodeName, String counter, InternalDateAndTime timeStamp, String objectId) {
+        this.nodeName = nodeName;
+        this.counter = counter;
+        this.timeStamp = timeStamp.getValue();
+        this.objectId = objectId;
+        if (this.objectId == null) {
+            this.objectId = EMPTY;
+        }
+    }
+
+    @XmlElement(name = "nodeName")
+    public String getNodeName() {
+        return nodeName;
+    }
+
+    @XmlElement(name = "counter")
+    public String getCounter() {
+        return counter;
+    }
+
+    @XmlElement(name = "timeStamp")
+    public String getTimeStamp() {
+        return timeStamp;
+    }
+
+    @XmlElement(name = "objectId")
+    public String getObjectId() {
+        return objectId;
+    }
+
+    /**
+     * Type for the Database to document the the same name that is used in the websockets.
+     * @return String with type name of child class
+     */
+    @JsonProperty("type")
+    public String getType() {
+        return this.getClass().getSimpleName();
+    }
+
+    @Override
+    public String toString() {
+        return "MwtNotificationBase [getType()="+ getType() + ", nodeName=" + nodeName + ", counter=" + counter + ", timeStamp=" + timeStamp
+                + ", objectId=" + objectId + "]";
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/ObjectCreationNotificationXml.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/ObjectCreationNotificationXml.java
new file mode 100644
index 0000000..b404073
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/ObjectCreationNotificationXml.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalDateAndTime;
+
+@XmlRootElement(name = "ObjectCreationNotification")
+public class ObjectCreationNotificationXml extends MwtNotificationBase implements GetEventType {
+
+    private static String EVENTTYPE =  "ObjectCreationNotification";
+
+    public ObjectCreationNotificationXml() {
+
+    }
+
+    /**
+     * Normalized notification
+     * @param nodeName name of mountpoint or instance that owns the problem
+     * @param counter of notification
+     * @param timeStamp from ne
+     * @param objectIdRef from ne
+     */
+    public ObjectCreationNotificationXml(String nodeName, String counter, InternalDateAndTime timeStamp, String objectIdRef) {
+        super(nodeName, counter, timeStamp,  objectIdRef);
+    }
+
+    /*public ObjectCreationNotificationXml(String nodeName, org.opendaylight.yang.gen.v1.uri.onf.microwavemodel.notifications.rev160809.ObjectCreationNotification notification) {
+        super(nodeName, notification.getCounter().toString(), InternalDateAndTime.valueOf(notification.getTimeStamp()),
+                notification.getObjectIdRef().getValue());
+    }
+
+    public ObjectCreationNotificationXml(String nodeName, org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ObjectCreationNotification notification) {
+        super(nodeName, notification.getCounter().toString(), InternalDateAndTime.valueOf(notification.getTimeStamp()),
+                notification.getObjectIdRef().getValue());
+    }*/
+
+    @Override
+    public String getEventType() {
+        return EVENTTYPE;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/ObjectDeletionNotificationXml.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/ObjectDeletionNotificationXml.java
new file mode 100644
index 0000000..c61a94a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/ObjectDeletionNotificationXml.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalDateAndTime;
+
+@XmlRootElement(name = "ObjectDeletionNotification")
+public class ObjectDeletionNotificationXml extends MwtNotificationBase implements GetEventType {
+
+    private static String EVENTTYPE =  "ObjectDeletionNotification";
+
+    public ObjectDeletionNotificationXml() {
+
+    }
+
+    /**
+     * Normalized notification
+     * @param nodeName name of mountpoint or instance that owns the problem
+     * @param counter of notification
+     * @param timeStamp from ne
+     * @param objectIdRef from ne
+     */
+    public ObjectDeletionNotificationXml(String nodeName, String counter, InternalDateAndTime timeStamp, String objectIdRef) {
+        super(nodeName, counter, timeStamp,  objectIdRef);
+    }
+
+    /*
+    public ObjectDeletionNotificationXml(String nodeName, ObjectDeletionNotification notification) {
+        super(nodeName, notification.getCounter().toString(), InternalDateAndTime.valueOf(notification.getTimeStamp()),
+//                notification.getObjectId().getValue());
+                notification.getObjectIdRef().getValue());
+    }*/
+/*
+    public ObjectDeletionNotificationXml(String nodeName, org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ObjectDeletionNotification notification) {
+        super(nodeName, notification.getCounter().toString(), InternalDateAndTime.valueOf(notification.getTimeStamp()),
+//                notification.getObjectId().getValue());
+                notification.getObjectIdRef().getValue());
+    }
+*/
+    @Override
+    public String getEventType() {
+        return EVENTTYPE;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/ProblemNotificationXml.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/ProblemNotificationXml.java
new file mode 100644
index 0000000..282c1ba
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/ProblemNotificationXml.java
@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalDateAndTime;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalSeverity;
+
+@XmlRootElement(name = "ProblemNotification")
+public class ProblemNotificationXml extends MwtNotificationBase implements GetEventType {
+
+    private static String EVENTTYPE = "ProblemNotification";
+    private static final Pattern pattern = Pattern.compile(".*\\[layerProtocol=(.*)\\]");
+    /**
+     * The leading indication for notification or events that are not in the
+     * currentProblem data of the ONF Coremodel
+     */
+    private static final String NOCURRENTPROBLEMINDICATION = "#";
+
+    @XmlElement(name = "problem")
+    private String problem;
+
+    @XmlElement(name = "severity")
+    private InternalSeverity severity;
+
+    public ProblemNotificationXml() {
+
+    }
+
+    /**
+     * Generic Problem. All the parameters are of type Strings according to YANG
+     * specification.
+     *
+     * @param nodeName                Name of mountpoint
+     * @param uuId                    Name of Interface Pac
+     * @param problemNameString       Name of the problem
+     * @param problemSeverityString   Severitycode of the problem
+     * @param counterString           Counter from device
+     * @param internaltimeStampString Timestamp according to internal format.
+     */
+    public ProblemNotificationXml(String nodeName, String uuId, String problemNameString,
+            InternalSeverity problemSeverityString, String counterString, InternalDateAndTime internaltimeStampString) {
+        super(nodeName, counterString, internaltimeStampString, uuId);
+        this.problem = problemNameString;
+        this.severity = problemSeverityString;
+    }
+
+    public String getProblem() {
+        return problem;
+    }
+
+    public InternalSeverity getSeverity() {
+        return severity;
+    }
+
+    public boolean isNotManagedAsCurrentProblem() {
+        return problem.startsWith(NOCURRENTPROBLEMINDICATION);
+    }
+
+    /**
+     * Create a specific ES id for the current log.
+     *
+     * @return a string with the generated ES Id
+     */
+    @JsonIgnore
+    public String genSpecificEsId() {
+
+        String uuId;
+
+        Matcher matcher = pattern.matcher(getObjectId());
+        if (matcher.matches() && matcher.groupCount() == 1) {
+            uuId = matcher.group(1);
+        } else {
+            uuId = getObjectId();
+        }
+
+        StringBuffer strBuf = new StringBuffer();
+        strBuf.append(getNodeName());
+        strBuf.append("/");
+        strBuf.append(uuId);
+        strBuf.append("/");
+        strBuf.append(getProblem());
+        return strBuf.toString();
+    }
+
+    @Override
+    public String toString() {
+        return "ProblemNotificationXml [problem=" + problem + ", severity=" + severity + ", toString()="
+                + super.toString() + "]";
+    }
+
+    @Override
+    public String getEventType() {
+        return EVENTTYPE;
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClient.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClient.java
new file mode 100644
index 0000000..8cfd63d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClient.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml;
+
+/**
+ * Wrapper for forwarding websocket notifications to the websocket service, that is running as container.
+ * @author herbert
+ */
+public interface WebSocketServiceClient {
+
+    public <T extends MwtNotificationBase & GetEventType> void sendViaWebsockets(String nodeName, T notificationXml);
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientImpl.java
new file mode 100644
index 0000000..af1a32d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientImpl.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.listener.ODLEventListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * WrapperMock class for web-socket notifications to the web-socket service.
+ */
+public class WebSocketServiceClientImpl implements WebSocketServiceClient {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ODLEventListener.class);
+
+    public WebSocketServiceClientImpl() {
+    }
+
+    @Override
+    public <T extends MwtNotificationBase & GetEventType> void sendViaWebsockets(String nodeName, T notificationXml) {
+        LOG.info("Dummy to send websocket event {} for mountpoint {}", notificationXml.getClass().getSimpleName(), nodeName);
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientImpl2.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientImpl2.java
new file mode 100644
index 0000000..0cc83cf
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientImpl2.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml;
+
+import java.util.concurrent.Future;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.listener.ODLEventListener;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketEventInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketEventOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketmanagerService;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Wrapper for forwarding web-socket notifications to the web-socket service, that is running as
+ * bundle.
+ */
+public class WebSocketServiceClientImpl2 implements WebSocketServiceClient {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ODLEventListener.class);
+
+    private final WebsocketmanagerService websocketmanagerService;
+    private final XmlMapper xmlMapper;
+
+    /**
+     * Implementation of Websocket notification processor.
+     *
+     * @param rpcProviderRegistry to get MDSAL services.
+     */
+    public WebSocketServiceClientImpl2(RpcProviderRegistry rpcProviderRegistry) {
+        super();
+        this.websocketmanagerService = rpcProviderRegistry.getRpcService(WebsocketmanagerService.class);
+        this.xmlMapper = new XmlMapper();
+    }
+
+    @Override
+    public <T extends MwtNotificationBase & GetEventType> void sendViaWebsockets(String nodeName, T notificationXml) {
+        LOG.info("Send websocket event {} for mountpoint {}", notificationXml.getClass().getSimpleName(), nodeName);
+
+        try {
+            WebsocketEventInputBuilder wsBuilder = new WebsocketEventInputBuilder();
+            wsBuilder.setNodeName(nodeName);
+            wsBuilder.setEventType(notificationXml.getEventType());
+            wsBuilder.setXmlEvent(xmlMapper.getXmlString(notificationXml));
+            Future<RpcResult<WebsocketEventOutput>> result = websocketmanagerService.websocketEvent(wsBuilder.build());
+            LOG.info("Send websocket result: {}", result.get().getResult().getResponse());
+        } catch (Exception e) {
+            LOG.warn("Can not send websocket event {} for mountpoint {} {}", notificationXml.getClass().getSimpleName(),
+                    nodeName, e.toString());
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/XmlMapper.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/XmlMapper.java
new file mode 100644
index 0000000..897795a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/XmlMapper.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml;
+
+import java.io.StringWriter;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class XmlMapper {
+    private static final Logger LOG = LoggerFactory.getLogger(XmlMapper.class);
+
+    public String getXmlString(MwtNotificationBase base) {
+        String xml;
+        JAXBContext jaxbContext;
+        try {
+            jaxbContext = JAXBContext.newInstance(AttributeValueChangedNotificationXml.class,
+                    ObjectCreationNotificationXml.class, ObjectDeletionNotificationXml.class,
+                    ProblemNotificationXml.class);
+            Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
+            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+
+            StringWriter stringWriter = new StringWriter();
+            jaxbMarshaller.marshal(base, stringWriter);
+            xml = stringWriter.toString();
+        } catch (JAXBException e) {
+            LOG.warn("Problem in marshalling xml file {}", e);
+            xml = null;
+        }
+        return xml;
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/index/impl/IndexConfigService.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/index/impl/IndexConfigService.java
new file mode 100644
index 0000000..25e18eb
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/index/impl/IndexConfigService.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.index.impl;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseClientAbstract;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseNode;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.IndexClientBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Setup index mwtn in the database
+ * @author herbert
+ *
+ */
+public class IndexConfigService implements AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(IndexConfigService.class);
+
+    /** Index name to be used */
+    private static final String INDEX = "config";
+    /** Location of configuration data **/
+    private static final String MODELDATA = "/elasticsearch/index/config";
+
+    private final HtDatabaseClientAbstract client;
+
+    // --- Construct and initialize
+
+    public IndexConfigService(HtDatabaseNode database) throws Exception {
+        LOG.info("Create {} start", this.getClass().getSimpleName());
+
+        IndexClientBuilder clientBuilder = IndexClientBuilder.getBuilder(INDEX).setModelDataDirectory(MODELDATA);
+        client = clientBuilder.create(database);
+        clientBuilder.close();
+        LOG.info("Create {} finished. DB Service sucessfully started.", this.getClass().getSimpleName());
+    }
+
+    @Override
+    public void close() throws Exception {
+        client.close();
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/index/impl/IndexMwtnService.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/index/impl/IndexMwtnService.java
new file mode 100644
index 0000000..4a9ac98
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/index/impl/IndexMwtnService.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.index.impl;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseClientAbstract;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseNode;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.IndexClientBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Setup index mwtn in the database
+ * @author herbert
+ *
+ */
+public class IndexMwtnService implements AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(IndexMwtnService.class);
+
+    /** Index name to be used */
+    public static final String INDEX = "mwtn";
+    /** Location of mapping data **/
+    private static final String MAPPING = "/elasticsearch/index/mwtn/mwtnMapping.json";
+    /** Location of configuration data **/
+    private static final String MODELDATA = "/elasticsearch/index/mwtn/modelDescription";
+
+    private final HtDatabaseClientAbstract client;
+
+    // --- Construct and initialize
+
+    public IndexMwtnService(HtDatabaseNode database) throws Exception {
+        LOG.info("Create {} start", this.getClass().getSimpleName());
+
+        IndexClientBuilder clientBuilder = IndexClientBuilder.getBuilder(INDEX)
+                .setMappingSettingJsonFileName(MAPPING)
+                .setModelDataDirectory(MODELDATA);
+        client = clientBuilder.create(database);
+        clientBuilder.close();
+        LOG.info("Create {} finished. DB Service sucessfully started.", this.getClass().getSimpleName());
+    }
+
+    /**
+     * Get client to be used in other services
+     * @return client
+     */
+    public HtDatabaseClientAbstract getClient() {
+        return client;
+    }
+
+
+
+    @Override
+    public void close() throws Exception {
+        client.close();
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/index/impl/IndexUpdateService.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/index/impl/IndexUpdateService.java
new file mode 100644
index 0000000..db567f2
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/index/impl/IndexUpdateService.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.index.impl;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseNode;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseUpdateFile;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseWebAPIClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseUpdateFile.EsUpdateObject;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseUpdateFile.FileReadCallback;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class IndexUpdateService implements AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(IndexUpdateService.class);
+
+    private static final String FILENAME = "etc/elasticsearch_update.zip";
+
+    private final HtDatabaseWebAPIClient webClient;
+
+    private final boolean autoremove=true;
+
+    @SuppressWarnings("unused")
+    private ScheduledFuture<?> taskHandle;
+    private final ScheduledExecutorService scheduler;
+    @SuppressWarnings("unused")
+    private final HtDatabaseNode database;
+
+    private final FileReadCallback onReadUpdateFile = new FileReadCallback()
+    {
+        @Override
+        public void read(EsUpdateObject obj,String filename) {
+            try {
+                IndexUpdateService.this.webClient.sendRequest(obj.Uri, obj.Method, obj.Body);
+                LOG.info("run database update file {}", filename);
+            } catch (IOException e) {
+                LOG.warn("problem for request {}", obj.Uri);
+            }
+        }
+
+        @Override
+        public void onerror(String filename,IOException e) {
+            LOG.warn("problem reading content file {} : {}", filename, e.getMessage());
+        }
+
+    };
+    private final Runnable checkForUpdateTask = () -> {
+        File f=new File(FILENAME);
+        if(f.exists())
+        {
+            LOG.debug("found update file {}", f.getAbsolutePath());
+            try {
+                HtDatabaseUpdateFile updateFile=new HtDatabaseUpdateFile(FILENAME);
+                if(updateFile.readFiles(onReadUpdateFile))
+                {
+                    LOG.info("update successful");
+                }
+                updateFile.close();
+                if(IndexUpdateService.this.autoremove)
+                {
+                    boolean res = f.delete();
+                    LOG.debug("autodelete updatefile done {}", res);
+                }
+
+            } catch (IOException e) {
+                LOG.warn("problem with update file: {}", e.getMessage());
+            }
+        }
+    };
+
+
+
+    public IndexUpdateService(HtDatabaseNode database, String esNodeserverName, String esClusterName, String esNodeName) {
+        this.database = database;
+        this.webClient = new HtDatabaseWebAPIClient();
+        this.scheduler = Executors.newSingleThreadScheduledExecutor();
+    }
+    public void start()
+    {
+        this.taskHandle = this.scheduler.scheduleAtFixedRate(checkForUpdateTask, 0, 120, TimeUnit.SECONDS);
+    }
+    public void stop()
+    {
+        this.scheduler.shutdown();
+    }
+    @Override
+    public void close() throws Exception {
+        stop();
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/MaintenanceRPCServiceAPI.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/MaintenanceRPCServiceAPI.java
new file mode 100644
index 0000000..3687625
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/MaintenanceRPCServiceAPI.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance;
+
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetRequiredNetworkElementKeysOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeOutputBuilder;
+
+public interface MaintenanceRPCServiceAPI {
+
+    public GetRequiredNetworkElementKeysOutputBuilder getRequiredNetworkElementKeys();
+
+    public ShowRequiredNetworkElementOutputBuilder showRequiredNetworkElement(ShowRequiredNetworkElementInput input);
+
+    public GetMaintenanceModeOutputBuilder getMaintenanceMode(GetMaintenanceModeInput input);
+
+    public SetMaintenanceModeOutputBuilder setMaintenanceMode(SetMaintenanceModeInput input);
+
+    public TestMaintenanceModeOutputBuilder testMaintenanceMode(TestMaintenanceModeInput input);
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/MaintenanceService.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/MaintenanceService.java
new file mode 100644
index 0000000..e9aec41
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/MaintenanceService.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance;
+
+public interface MaintenanceService {
+
+	/**
+	 * Verify maintenance state of given object according to the filter settings.
+	 * The object is specified by the criteria provided in the parameters.
+	 * The data _id (uuid) is equal to the mountpointReference.
+	 * @param mountpointReference used as reference, to query the data from database.
+	 * @param objectIdRef first level id in onf core model, delivered by notification objectid
+	 * @param problem problem name of device, delivered in problem notification
+	 * @return boolean indication
+	 */
+	boolean isONFObjectInMaintenance(String mountpointReference, String objectIdRef, String problem);
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/database/types/EsMaintenanceFilter.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/database/types/EsMaintenanceFilter.java
new file mode 100644
index 0000000..46b4342
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/database/types/EsMaintenanceFilter.java
@@ -0,0 +1,227 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.database.types;
+
+import com.fasterxml.jackson.annotation.JsonGetter;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonSetter;
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
+import java.util.Collections;
+import java.util.Map;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.maintenance.mode.g.Filter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.maintenance.mode.g.filter.Definition;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * One filter element to describe a maintenance status for an object referenced by definition.
+ * TODO: Merge Filter and ES driven implementation
+ */
+public class EsMaintenanceFilter implements Filter {
+
+    private static final Logger LOG = LoggerFactory.getLogger(EsMaintenanceFilter.class);
+
+    private static ZoneId EsMaintenanceFilterTimeZone = ZoneId.of("UTC");
+    //private static DateTimeFormatter FORMAT = DateTimeFormatter.ISO_DATE_TIME;       // "1986-04-08T12:30:00"
+    private static DateTimeFormatter FORMAT = DateTimeFormatter.ISO_OFFSET_DATE_TIME;       // 2011-12-03T10:15:30+01:00
+    private static ZonedDateTime EMPTYDATETIME = ZonedDateTime.ofInstant(Instant.EPOCH, EsMaintenanceFilterTimeZone);
+    private static String EMPTY = "";
+
+    //yang tools
+    @JsonIgnore
+    private final Map<java.lang.Class<? extends Augmentation<Filter>>, Augmentation<Filter>> augmentation = Collections.emptyMap();
+
+    @JsonIgnore
+    private ZonedDateTime start = EMPTYDATETIME;
+    @JsonIgnore
+    private ZonedDateTime end = EMPTYDATETIME;
+
+    private EsMaintenanceFilterDefinition definition = new EsMaintenanceFilterDefinition();
+    private String description = EMPTY;
+
+    // For jackson
+    public EsMaintenanceFilter() {
+    }
+
+    public EsMaintenanceFilter(Filter filter) {
+        setStartAsString(filter.getStartDate());
+        setEndAsString(filter.getEndDate());
+        description = filter.getDescription();
+        definition = new EsMaintenanceFilterDefinition(filter.getDefinition());
+    }
+
+    /*------
+     * start
+     */
+    public ZonedDateTime getStart() {
+        return start;
+    }
+    @JsonGetter("start")
+    public String getStartAsString() {
+        return toString(start);
+    }
+    public void setStart(ZonedDateTime start) {
+        this.start = start;
+    }
+    @JsonSetter("start")
+    public void setStartAsString(String startAsString) {
+        this.start = valueOf(startAsString);
+    }
+
+    /*------
+     * end
+     */
+    public ZonedDateTime getEnd() {
+        return end;
+    }
+    @JsonGetter("end")
+    public String getEndAsString() {
+        return toString(end);
+    }
+    public void setEnd(ZonedDateTime end) {
+        this.end = end;
+    }
+    @JsonSetter("end")
+    public void setEndAsString(String endAsString) {
+        this.end = valueOf(endAsString);
+    }
+
+    /*-----------------
+     * other parameters
+     */
+
+    public EsMaintenanceFilterDefinition getDefinition2() {
+        return definition;
+    }
+    public void setDefinition(EsMaintenanceFilterDefinition definition) {
+        this.definition = definition;
+    }
+    @Override
+    public String getDescription() {
+        return description;
+    }
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    /**
+     * Get the actual time in the Filter time zone.
+     * @return actual Time
+     */
+    public static ZonedDateTime getNow() {
+        return ZonedDateTime.now(EsMaintenanceFilterTimeZone);
+    }
+
+
+    /**
+     * Verify if the filter is active for an object
+     * @param now point of time to verify
+     * @return if the object is covered by filter and now within point of time
+     */
+    public boolean isInMaintenance(String objectIdRef, String problem, ZonedDateTime now) {
+        return definition.appliesToObjectReference(objectIdRef, problem) && isInPeriod(start, end, now);
+    }
+
+    @Override
+    public String toString() {
+        return "EsMaintenanceFilter [start=" + start + ", end=" + end + ", definition=" + definition + ", description="
+                + description + "]";
+    }
+
+    /*---------------------------------------------
+     * YANG tools related functions for interface
+     */
+
+    @Override
+    public Class<? extends DataContainer> getImplementedInterface() {
+        return Filter.class;
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public <E extends Augmentation<Filter>> E augmentation(Class<E> augmentationType) {
+        return (E) augmentation.get(augmentationType);
+    }
+
+    @Override
+    public Definition getDefinition() {
+        return definition;
+    }
+
+    @Override
+    public String getStartDate() {
+        return getStartAsString();
+    }
+
+    @Override
+    public String getEndDate() {
+        return getEndAsString();
+    }
+
+    /*---------------------------------------------
+     * private static helper functions to verify
+     */
+
+    /**
+     * Compare the if probe is within the range of start and end.
+     * @param start of range
+     * @param end of range
+     * @param probe time to verify
+     * @return boolean result true if (start <= probe <= end)
+     */
+    public static boolean isInPeriod(ZonedDateTime start, ZonedDateTime end, ZonedDateTime probe) {
+          return start.compareTo(end) < 0 && start.compareTo(probe) <= 0 && end.compareTo(probe) >= 0;
+        }
+
+    /**
+     * Convert to time value to String
+     * @param ldt ZonedDateTime format
+     * @return String output
+     */
+    public static String toString(ZonedDateTime ldt) {
+        if(ldt==null) {
+            return "";
+        }
+        return ldt.format(FORMAT);
+    }
+
+    /**
+     * Convert String to time value
+     * @param zoneTimeString with time
+     * @return ZonedDateTime string
+     */
+    public static ZonedDateTime valueOf(String zoneTimeString) {
+        if (zoneTimeString == null || zoneTimeString.isEmpty()) {
+            LOG.warn("Null or empty zoneTimeString");
+            return EMPTYDATETIME;
+        }
+        try {
+            return ZonedDateTime.parse(zoneTimeString, FORMAT);
+        } catch (DateTimeParseException e) {
+            LOG.warn("Can not parse zoneTimeString '{}'",zoneTimeString);
+            return EMPTYDATETIME;
+        }
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/database/types/EsMaintenanceFilterDefinition.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/database/types/EsMaintenanceFilterDefinition.java
new file mode 100644
index 0000000..c548a98
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/database/types/EsMaintenanceFilterDefinition.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.database.types;
+
+import java.util.Collections;
+import java.util.Map;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.maintenance.mode.g.filter.Definition;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class EsMaintenanceFilterDefinition implements Definition {
+
+    private static final Logger LOG = LoggerFactory.getLogger(EsMaintenanceFilterDefinition.class);
+    private static final String ALL = "";
+
+    //yang tools
+    @JsonIgnore
+    private final Map<java.lang.Class<? extends Augmentation<Definition>>, Augmentation<Definition>> augmentation = Collections.emptyMap();
+
+    private String objectIdRef = ALL;
+    private String problem = ALL;
+
+    public EsMaintenanceFilterDefinition() {
+    }
+
+    public EsMaintenanceFilterDefinition(Definition definition) {
+        objectIdRef = definition.getObjectIdRef();
+        problem = definition.getProblem();
+    }
+
+    @Override
+    @JsonProperty("object-id-ref")
+    public String getObjectIdRef() {
+        return objectIdRef;
+    }
+
+    @JsonProperty("object-id-ref")
+    public void setObjectIdRef(String objectIdRef) {
+        this.objectIdRef = objectIdRef == null ? ALL : objectIdRef;
+    }
+
+    @Override
+    @JsonProperty("problem")
+    public String getProblem() {
+        return problem;
+    }
+
+    @JsonProperty("problem")
+    public void setProblem(String pProblem) {
+        this.problem = pProblem == null ? ALL : pProblem;
+    }
+
+    public boolean appliesToObjectReference(String pObjectIdRef, String pProblem) {
+        boolean res = (pObjectIdRef.isEmpty() || pObjectIdRef.contains(pObjectIdRef)) && (pProblem.isEmpty() || pProblem.contains(pProblem));
+        LOG.debug("Check result applies {}: {} {} against: {}",res, pObjectIdRef, pProblem, this);
+        return res;
+    }
+
+    @Override
+    public String toString() {
+        return "EsMaintenanceFilterDefinition [objectIdRef=" + objectIdRef + ", problem=" + problem + "]";
+    }
+
+    @Override
+    public Class<? extends DataContainer> getImplementedInterface() {
+        return Definition.class;
+    }
+
+    @Override
+    public <E extends Augmentation<Definition>> @Nullable E augmentation(Class<E> augmentationType) {
+        return null;
+    }
+
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/database/types/EsMaintenanceMode.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/database/types/EsMaintenanceMode.java
new file mode 100644
index 0000000..456c146
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/database/types/EsMaintenanceMode.java
@@ -0,0 +1,181 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.database.types;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import java.time.ZonedDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.EsObject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.MaintenanceModeG;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.maintenance.mode.g.Filter;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Database record entry for maintenance mode, as specified. Used for read operations Structure: _id
+ * : Contains the mountpoint name, must be specified before read. startTime: String representing
+ * Java LocalDateTime with absolute UTC Time endTime: String representing Java LocalDateTime with
+ * absolute UTC Time JSON Structure example { "_index": "mwtn_v1", "_type": "maintenancemode",
+ * "_id": "LumpiWave-Z3", "_score": 1, "_source": { "node": "LumpiWave-Z3", "filter": [ {
+ * "definition": { "object-id-ref": "", "problem": "" }, "description": "", "start":
+ * "2018-01-01T10:00+00:00", "end": "2018-10-10T10:00+00:00" }, { "definition": { "object-id-ref":
+ * "network-element", "problem": "power-alarm" }, "description": "", "start":
+ * "2018-01-01T10:00+00:00", "end": "2018-10-10T10:00+00:00" } ] } },
+ *
+ * Two filters for all element and one for network-element power-alarm
+ */
+
+public class EsMaintenanceMode extends EsObject implements MaintenanceModeG {
+
+    @SuppressWarnings("unused")
+    private static final Logger LOG = LoggerFactory.getLogger(EsMaintenanceMode.class);
+
+    public static final String ESDATATYPENAME = "maintenancemode";
+
+    private static final EsMaintenanceMode NOT_IN_MAINTENANCE = new EsMaintenanceMode("notinmaintenance");
+
+    private String node;
+
+    @JsonDeserialize(as = ArrayList.class)
+    private List<EsMaintenanceFilter> filter;
+
+    private boolean active;
+
+    // for jackson
+    public EsMaintenanceMode() {
+        this.active = false;
+        this.filter = new ArrayList<>();
+    }
+
+    public EsMaintenanceMode(String mountpoint) {
+        this();
+        this.setEsId(mountpoint);
+        this.node = mountpoint;
+    }
+
+    public EsMaintenanceMode(MaintenanceModeG maintenanceModeG) {
+        this.setEsId(maintenanceModeG.getMountpointName());
+        this.node = maintenanceModeG.getNodeName();
+        List<Filter> filters = maintenanceModeG.getFilter();
+        if (filter != null) {
+            for (Filter filterElement : filters) {
+                this.filter.add(new EsMaintenanceFilter(filterElement));
+            }
+        }
+    }
+
+
+    public String getNode() {
+        return node;
+    }
+
+    public void setNode(String node) {
+        this.node = node;
+    }
+
+    public List<EsMaintenanceFilter> getFilter2() {
+        return filter;
+    }
+
+    public void setActive(boolean a) {
+        this.active = a;
+    }
+
+    /**
+     * Replace list with new one.
+     *
+     * @param filterList new filter list
+     */
+    public void setFilter(List<EsMaintenanceFilter> filterList) {
+        this.filter = filterList;
+    }
+
+    /**
+     * Add one filter to internal list
+     *
+     * @param pFilter the Filter
+     */
+    public void addFilter(EsMaintenanceFilter pFilter) {
+        this.filter.add(pFilter);
+    }
+
+    /**
+     * Verify maintenance status
+     *
+     * @param objectIdRef NETCONF object id
+     * @param problem name that was provided
+     * @param now time to verify with
+     * @return true if in maintenance status
+     */
+    public boolean isONFObjectInMaintenance(String objectIdRef, String problem, ZonedDateTime now) {
+        if (!active) {
+            return false;
+        }
+        boolean res = false;
+        if (this != NOT_IN_MAINTENANCE) {
+            for (EsMaintenanceFilter oneFilter : filter) {
+                if (oneFilter.isInMaintenance(objectIdRef, problem, now)) {
+                    res = true;
+                    break;
+                }
+            }
+        }
+        return res;
+    }
+
+    /** Shortcut **/
+    public boolean isONFObjectInMaintenance(String objectIdRef, String problem) {
+        return isONFObjectInMaintenance(objectIdRef, problem, EsMaintenanceFilter.getNow());
+    }
+
+    @Override
+    public String toString() {
+        return "EsMaintenanceMode [node=" + node + ", filter=" + filter + ", active=" + active + "]";
+    }
+
+    public static EsMaintenanceMode getNotInMaintenance() {
+        return NOT_IN_MAINTENANCE;
+    }
+
+    /*---------------------------------------------
+     * yang tools related functions
+     */
+
+    @Override
+    public Class<? extends DataContainer> getImplementedInterface() {
+        return MaintenanceModeG.class;
+    }
+
+    @Override
+    public String getMountpointName() {
+        return this.getEsId();
+    }
+
+    @Override
+    public String getNodeName() {
+        return node;
+    }
+
+    @Override
+    public List<Filter> getFilter() {
+        return filter.isEmpty() ? null : new ArrayList<>(filter);
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/impl/MaintenanceServiceImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/impl/MaintenanceServiceImpl.java
new file mode 100644
index 0000000..1db3433
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/impl/MaintenanceServiceImpl.java
@@ -0,0 +1,269 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.impl;
+
+import java.time.ZonedDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import javax.annotation.Nonnull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.EsBaseRequireNetworkElement;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDataBaseReaderAndWriter;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseClientAbstract;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseNode;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.index.impl.IndexMwtnService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.MaintenanceRPCServiceAPI;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.MaintenanceService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.database.types.EsMaintenanceFilter;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.database.types.EsMaintenanceFilterDefinition;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.database.types.EsMaintenanceMode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetRequiredNetworkElementKeysOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.show.required.network.element.output.RequiredNetworkElementBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MaintenanceServiceImpl implements MaintenanceService, MaintenanceRPCServiceAPI, AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(MaintenanceServiceImpl.class);
+
+    /**
+     * Use the Client Index
+     */
+    private HtDataBaseReaderAndWriter<EsMaintenanceMode> maintenanceRW;
+    private HtDataBaseReaderAndWriter<EsBaseRequireNetworkElement> requiredNeRW;
+
+    public MaintenanceServiceImpl(HtDatabaseClientAbstract client) {
+
+        LOG.info("Create {} start", MaintenanceServiceImpl.class);
+
+        try {
+            // Create control structure
+            maintenanceRW = new HtDataBaseReaderAndWriter<>(client, EsMaintenanceMode.ESDATATYPENAME, EsMaintenanceMode.class);
+            requiredNeRW = new HtDataBaseReaderAndWriter<>(client, EsBaseRequireNetworkElement.ESDATATYPENAME, EsBaseRequireNetworkElement.class);
+
+        } catch (Exception e) {
+            LOG.error("Can not start database client. Exception: {}", e.getMessage());
+        }
+        LOG.info("Create {} finished. DB Service {} started.", MaintenanceServiceImpl.class,  client != null ? "sucessfully" : "not" );
+
+    }
+
+    public MaintenanceServiceImpl(HtDatabaseNode database) {
+        this(getDatabaseClient(database));
+    }
+
+    private static HtDatabaseClientAbstract getDatabaseClient(HtDatabaseNode database) {
+        return new HtDatabaseClientAbstract(IndexMwtnService.INDEX,database);
+    }
+
+    /**
+     * Get existing object for mountpoint to manage maintenance mode
+     * @return Object with configuration
+     */
+    private @Nonnull EsMaintenanceMode getMaintenance(String mountpointId)
+    {
+        EsMaintenanceMode deviceMaintenanceMode = null;
+        if (maintenanceRW != null) {
+            deviceMaintenanceMode = maintenanceRW.doRead(mountpointId);
+        }
+
+        return deviceMaintenanceMode == null ? EsMaintenanceMode.getNotInMaintenance() : deviceMaintenanceMode;
+    }
+    /**
+     * Check in required ne if entry exists for mountpointNodeName
+     * @param mountPointNodeName
+     * @return
+     */
+    private boolean isRequireNe(String mountPointNodeName) {
+        EsBaseRequireNetworkElement ne=null;
+        if( requiredNeRW!=null)
+        {
+            LOG.debug("searching for entry in required-networkelement for "+mountPointNodeName);
+            ne = requiredNeRW.doRead(mountPointNodeName);
+        } else {
+            LOG.warn("cannot read db. no db reader writer initialized");
+        }
+        return ne!=null;
+    }
+    public EsMaintenanceMode createIfNotExists(String mountpointId)
+    {
+        EsMaintenanceMode deviceMaintenanceMode = null;
+        if (maintenanceRW != null)
+        {
+             deviceMaintenanceMode = maintenanceRW.doRead(mountpointId);
+             if(deviceMaintenanceMode==null)
+             {
+                 LOG.debug("creating empty maintenance object in database");
+                 deviceMaintenanceMode=new EsMaintenanceMode(mountpointId);
+                 EsMaintenanceFilter filter = new EsMaintenanceFilter();
+                 filter.setDescription("");
+                 filter.setStart(null);
+                 filter.setEnd(null);
+                 EsMaintenanceFilterDefinition definition=new EsMaintenanceFilterDefinition();
+                 definition.setObjectIdRef("");
+                 definition.setProblem("");
+                 filter.setDefinition(definition);
+                 deviceMaintenanceMode.addFilter(filter );
+                 maintenanceRW.doWrite(deviceMaintenanceMode);
+             } else {
+                LOG.debug("maintenance object already exists in database");
+            }
+        } else {
+            LOG.warn("cannot create maintenance obj. db reader/writer is null");
+        }
+
+        return deviceMaintenanceMode;
+    }
+    public void deleteIfNotRequired(String mountPointNodeName) {
+
+        if(!this.isRequireNe(mountPointNodeName))
+        {
+            EsMaintenanceMode deviceMaintenanceMode = new EsMaintenanceMode(mountPointNodeName);
+            if (maintenanceRW != null)
+            {
+                LOG.debug("removing maintenance object in database for "+mountPointNodeName);
+                maintenanceRW.doRemove(deviceMaintenanceMode);
+            } else {
+                LOG.warn("cannot create maintenance obj. db reader/writer is null");
+            }
+        }
+
+    }
+
+
+
+    /*-------------------------------------------------
+     * Interface AutoClosable
+     */
+
+    @Override
+    public void close() throws Exception {
+    }
+
+    /*-------------------------------------------------
+     * Interface MaintenanceRPCServiceAPI
+     */
+
+    @Override
+    public GetRequiredNetworkElementKeysOutputBuilder getRequiredNetworkElementKeys() {
+        GetRequiredNetworkElementKeysOutputBuilder outputBuilder = new GetRequiredNetworkElementKeysOutputBuilder();
+        List<EsMaintenanceMode> all = maintenanceRW != null ? maintenanceRW.doReadAll() : new ArrayList<>();
+        List<String> mountpointList = new ArrayList<>();
+        for (EsMaintenanceMode oneOfAll : all) {
+            mountpointList.add(oneOfAll.getEsId());
+
+        }
+        outputBuilder.setMountpointNames(mountpointList);
+        return outputBuilder;
+    }
+
+    @Override
+    public ShowRequiredNetworkElementOutputBuilder showRequiredNetworkElement(ShowRequiredNetworkElementInput input) {
+        ShowRequiredNetworkElementOutputBuilder outputBuilder = new ShowRequiredNetworkElementOutputBuilder();
+        EsMaintenanceMode maintenanceMode = new EsMaintenanceMode(input.getMountpointName());
+        if (maintenanceRW != null) {
+            maintenanceMode = maintenanceRW.doRead(maintenanceMode);
+        }
+        if (maintenanceMode != null) {
+            RequiredNetworkElementBuilder valueBuilder = new RequiredNetworkElementBuilder();
+
+            valueBuilder.setMountpointName(maintenanceMode.getNode());
+            valueBuilder.setStatus(String.valueOf(maintenanceMode.isONFObjectInMaintenance("","")));
+            valueBuilder.setDescription("Pretty description here");
+            outputBuilder.setRequiredNetworkElement(valueBuilder.build());
+        } else {
+            LOG.warn("No info in database for {}",input.getMountpointName());
+        }
+        return outputBuilder;
+    }
+
+    @Override
+    public GetMaintenanceModeOutputBuilder getMaintenanceMode(GetMaintenanceModeInput input) {
+        EsMaintenanceMode maintenanceMode = null;
+        GetMaintenanceModeOutputBuilder outputBuilder;
+        if (maintenanceRW != null) {
+            maintenanceMode = maintenanceRW.doRead(input.getMountpointName());
+        }
+        if (maintenanceMode != null) {
+            outputBuilder = new GetMaintenanceModeOutputBuilder(maintenanceMode);
+        } else {
+            throw new IllegalArgumentException("No info in database for "+input.getMountpointName());
+        }
+        return outputBuilder;
+    }
+
+    @Override
+    public SetMaintenanceModeOutputBuilder setMaintenanceMode(SetMaintenanceModeInput input) {
+
+        SetMaintenanceModeOutputBuilder outputBuilder = new SetMaintenanceModeOutputBuilder();
+        if (maintenanceRW != null) {
+            EsMaintenanceMode m = new EsMaintenanceMode(input);
+            if (maintenanceRW.doWrite(m) == null) {
+                throw new IllegalArgumentException("Problem writing to database: "+input.getMountpointName());
+            }
+            outputBuilder = new SetMaintenanceModeOutputBuilder(m);
+            LOG.info("Wrote maintenance object {}", m.toString());
+        }
+        return outputBuilder;
+    }
+
+    @Override
+    public TestMaintenanceModeOutputBuilder testMaintenanceMode(TestMaintenanceModeInput input) {
+
+        StringBuffer resultString = new StringBuffer();
+
+        EsMaintenanceMode maintenanceMode = getMaintenance(input.getMountpointName());
+
+        TestMaintenanceModeOutputBuilder outputBuilder = new TestMaintenanceModeOutputBuilder(maintenanceMode);
+
+        ZonedDateTime now = EsMaintenanceFilter.valueOf(input.getTestDate());
+
+        resultString.append("In database table: ");
+        resultString.append(!(EsMaintenanceMode.getNotInMaintenance() == maintenanceMode));
+        resultString.append(" Maintenance active: ");
+        resultString.append(maintenanceMode.isONFObjectInMaintenance(input.getObjectIdRef(), input.getProblemName(), now));
+        resultString.append(" at Timestamp: ");
+        resultString.append(now);
+
+        outputBuilder.setResultString(resultString.toString());
+
+        return outputBuilder;
+    }
+
+    /*-------------------------------------------------
+     * Interface MaintenaceService
+     */
+
+    @Override
+    public boolean isONFObjectInMaintenance(String mountpointReference, String objectIdRef, String problem) {
+        EsMaintenanceMode maintenanceMode = getMaintenance(mountpointReference);
+        boolean res = maintenanceMode.isONFObjectInMaintenance(objectIdRef, problem);
+        LOG.debug("inMaintenance={} for mountpoint/id/problem:{} {} {} Definition: {}",res, mountpointReference, objectIdRef, problem, this );
+        return res;
+    }
+
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/PerformanceManagerImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/PerformanceManagerImpl.java
new file mode 100644
index 0000000..b4c5abd
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/PerformanceManagerImpl.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl;
+
+import javax.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCoreNetworkElementRepresentation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.service.MicrowaveHistoricalPerformanceWriterService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class PerformanceManagerImpl implements AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(PerformanceManagerImpl.class);
+
+    private @Nullable PerformanceManagerTask task;
+
+    public PerformanceManagerImpl(long seconds, MicrowaveHistoricalPerformanceWriterService databaseService) {
+
+        LOG.info("Construct begin {} with {} Seconds",PerformanceManagerImpl.class.getSimpleName(), seconds);
+
+        if (MicrowaveHistoricalPerformanceWriterService.isAvailable(databaseService)) {
+
+            LOG.info("Do start of PM task");
+            task = new PerformanceManagerTask(seconds, databaseService);
+            task.start();
+            LOG.info("PM task scheduled");
+
+        } else {
+            LOG.info("Database not available. Do not start PM task");
+        }
+
+        LOG.info("Construct end {}",PerformanceManagerImpl.class.getSimpleName());
+    }
+
+    @Override
+	public void close() {
+        LOG.info("Close {}", PerformanceManagerImpl.class.getSimpleName());
+        if (task != null) {
+            task.stop();
+        }
+    }
+
+    public void registration(String mountPointNodeName, ONFCoreNetworkElementRepresentation ne) {
+        LOG.debug("Register {}",mountPointNodeName);
+        if (task != null) {
+			task.registration(mountPointNodeName, ne);
+		}
+    }
+
+    public void deRegistration(String mountPointNodeName) {
+        LOG.debug("Deregister {}",mountPointNodeName);
+        if (task != null) {
+			task.deRegistration(mountPointNodeName);
+		}
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/PerformanceManagerTask.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/PerformanceManagerTask.java
new file mode 100644
index 0000000..ef2a0b8
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/PerformanceManagerTask.java
@@ -0,0 +1,238 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl;
+
+import java.util.Iterator;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCoreNetworkElementRepresentation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.AllPm;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.service.MicrowaveHistoricalPerformanceWriterService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class PerformanceManagerTask implements Runnable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(PerformanceManagerTask.class);
+    private static final String LOGMARKER = "PMTick";
+
+    private int tickCounter = 0;
+
+    private final ConcurrentHashMap<String, ONFCoreNetworkElementRepresentation> queue = new ConcurrentHashMap<>();
+    private final MicrowaveHistoricalPerformanceWriterService databaseService;
+    private final ScheduledExecutorService scheduler;
+    private final long seconds;
+
+    private ScheduledFuture<?> taskHandle = null;
+    private Iterator<ONFCoreNetworkElementRepresentation> neIterator = null;
+    private ONFCoreNetworkElementRepresentation actualNE = null;
+
+    /**
+     * Constructor of PM Task
+     * @param seconds seconds to call PM Task
+     * @param databaseService DB Service to load PM data to
+     */
+
+    public PerformanceManagerTask(long seconds, MicrowaveHistoricalPerformanceWriterService databaseService) {
+
+        LOG.debug("Init task {}", PerformanceManagerTask.class.getSimpleName());
+        this.seconds = seconds;
+        this.databaseService = databaseService;
+        this.scheduler = Executors.newSingleThreadScheduledExecutor();
+
+    }
+
+    /**
+     * Start PM Task
+     */
+    public void start() {
+        LOG.info("PM task created");
+        taskHandle = this.scheduler.scheduleAtFixedRate(this, 0, seconds, TimeUnit.SECONDS);
+        LOG.info("PM task scheduled");
+    }
+
+    /**
+     * Stop everything
+     */
+    public void stop() {
+        LOG.info("Stop {}", PerformanceManagerImpl.class.getSimpleName());
+        if (taskHandle != null) {
+            taskHandle.cancel(true);
+            try {
+                scheduler.awaitTermination(10, TimeUnit.SECONDS);
+             } catch (InterruptedException e) {
+                 LOG.debug("Schdule stopped.",e);
+                 // Restore interrupted state...
+                 Thread.currentThread().interrupt();
+             }
+        }
+    }
+
+    /**
+     * Add NE/Mountpoint to PM Processig
+     * @param mountPointNodeName to be added
+     * @param ne that is connected to the mountpoint
+     */
+    public void registration(String mountPointNodeName, ONFCoreNetworkElementRepresentation ne) {
+        queue.put(mountPointNodeName, ne);
+    }
+
+    /**
+     * Remove mountpoint/NE from PM process
+     * @param mountPointNodeName that has to be removed
+     */
+    public void deRegistration(String mountPointNodeName) {
+        LOG.debug("Deregister {}",mountPointNodeName);
+        ONFCoreNetworkElementRepresentation removedNE = queue.remove(mountPointNodeName);
+
+        if ( removedNE == null) {
+            LOG.warn("Couldn't delete {}",mountPointNodeName);
+        }
+    }
+
+
+    /*--------------------------------------------------------------
+     * Task to read PM data from NE
+     */
+
+    /**
+     * Task runner to read all performance data from Network Elements.
+     * Catch exceptions to make sure, that the Task is not stopped.
+     */
+    @Override
+    public void run() {
+
+        LOG.debug("{} start {} Start with mountpoint {}",LOGMARKER, tickCounter, actualNE == null ? "No NE" : actualNE.getMountPointNodeName());
+
+        //Proceed to next NE/Interface
+        getNextInterface();
+
+        LOG.debug("{} {} Next interface to handle {}", LOGMARKER, tickCounter,
+                actualNE == null ? "No NE/IF" : actualNE.getMountPointNodeName() + " " + actualNE.pmStatusToString());
+
+        if (actualNE != null) {
+            try {
+                LOG.debug("{} Start to read PM from NE ({})", LOGMARKER, tickCounter);
+                AllPm allPm = actualNE.getHistoricalPM();
+                LOG.debug("{} {} Got PM list. Start write to DB", LOGMARKER, tickCounter);
+                databaseService.writePM(allPm);
+                LOG.debug("{} {} PM List end.", LOGMARKER, tickCounter);
+            } catch (Exception e) {
+                LOG.warn("{} {} PM read/write failed. Write log entry {}", LOGMARKER, tickCounter, e);
+                String msg = e.getMessage();
+                if (msg == null || msg.isEmpty()) {
+                    if (e.getCause() != null) {
+                        msg = e.getCause().toString();
+                    }
+                    if (msg == null || msg.isEmpty()){
+                        msg = "No message or cause";
+                    }
+                }
+                databaseService.writePMLog(actualNE.getMountPointNodeName(), actualNE.pmStatusToString(), msg);
+            }
+        }
+
+        LOG.debug("{} end {}",LOGMARKER, tickCounter);
+        tickCounter++;
+    }
+
+    /**
+     * Reset queue to start from beginning
+     */
+    private void resetQueue() {
+        actualNE = null;
+        neIterator = null;
+    }
+
+    /**
+     * Get then next interface in the list.
+     * First try to find a next on the actual NE.
+     * If not available search next interface at a NE
+     * Special Situations to handle: Empty queue, NEs, but no interfaces
+     */
+    private void getNextInterface() {
+        boolean started = false;
+        int loopCounter = 0;
+
+        LOG.debug("{} {} getNextInterface enter. Queue size {} ", LOGMARKER, tickCounter, queue.size());
+
+        if (actualNE != null && !queue.containsValue(actualNE)) {
+            LOG.debug("{} {} NE Removed duringprocessing A",LOGMARKER, tickCounter);
+            resetQueue();
+        }
+
+        while (true) {
+
+            if (loopCounter++ >= 1000) {
+                LOG.error("{} {} Problem in PM iteration. endless condition reached", LOGMARKER, tickCounter);
+                resetQueue();
+                break;
+            }
+
+            LOG.debug("{} {} Loop ne {}:neiterator {}:Interfaceiterator:{} Loop:{}",
+                    LOGMARKER,
+                    tickCounter,
+                    actualNE == null? "null" : actualNE.getMountPointNodeName(),
+                    neIterator == null ? "null" : neIterator.hasNext(),
+                    actualNE == null ? "null" : actualNE.hasNext(),
+                    loopCounter);
+
+            if (actualNE != null && actualNE.hasNext()) {
+                // Yes, there is an interface, deliver back
+                LOG.debug("{} {} getNextInterface yes A",LOGMARKER, tickCounter);
+                actualNE.next();
+                break;
+
+            } else {
+                // No element in neInterfaceInterator .. get next NE and try
+                if (neIterator != null && neIterator.hasNext()) {
+                    // Set a new NE
+                    LOG.debug("{} {} Next NE A",LOGMARKER, tickCounter);
+                    actualNE = neIterator.next();
+                    actualNE.resetPMIterator();
+
+                } else {
+                    // Goto start condition 1) first entry 2) end of queue reached
+                    LOG.debug("{} {} Reset",LOGMARKER, tickCounter);
+                    resetQueue();
+
+                    if (queue.isEmpty()) {
+                        LOG.debug("{} {} no nextInterfac. queue empty",LOGMARKER, tickCounter);
+                        break;
+                    } else if (!started){
+                        LOG.debug("{} {} getNextInterface start condition. Get interator.",LOGMARKER, tickCounter);
+                        neIterator = queue.values().iterator();
+                        started = true;
+                    } else {
+                        LOG.debug("{} {} no nextInterface",LOGMARKER, tickCounter);
+                        break;
+                    }
+                }
+            }
+        } //while
+
+        if (actualNE != null && !queue.containsValue(actualNE)) {
+            LOG.debug("{} {} NE Removed duringprocessing B",LOGMARKER, tickCounter);
+            resetQueue();
+        }
+
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/service/MicrowaveHistoricalPerformanceWriterService.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/service/MicrowaveHistoricalPerformanceWriterService.java
new file mode 100644
index 0000000..4782f33
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/service/MicrowaveHistoricalPerformanceWriterService.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.service;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDataBaseReaderAndWriter;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseClientAbstract;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseNode;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.IndexClientBuilder;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.AllPm;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.NetconfTimeStamp;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types.EsHistoricalPerformance15Minutes;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types.EsHistoricalPerformance24Hours;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types.EsHistoricalPerformanceLogEntry;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MicrowaveHistoricalPerformanceWriterService {
+
+    private static final Logger LOG = LoggerFactory.getLogger(MicrowaveHistoricalPerformanceWriterService.class);
+    private static final String INDEX = "sdnperformance";
+    private static final String MAPPING = "/elasticsearch/index/sdnperformance/sdnperformanceMapping.json";
+    private static final NetconfTimeStamp NETCONFTIME_CONVERTER = NetconfTimeStamp.getConverter();
+
+
+    private HtDatabaseClientAbstract client;
+    private HtDataBaseReaderAndWriter<EsHistoricalPerformance15Minutes> historicalPerformance15mRW;
+    private HtDataBaseReaderAndWriter<EsHistoricalPerformance24Hours> historicalPerformance24hRW;
+    private HtDataBaseReaderAndWriter<EsHistoricalPerformanceLogEntry> historicalPerformanceLogRW;
+
+    public MicrowaveHistoricalPerformanceWriterService(HtDatabaseNode database) {
+
+        LOG.info("Create {} start", MicrowaveHistoricalPerformanceWriterService.class);
+
+        try {
+
+            IndexClientBuilder clientBuilder =
+                    IndexClientBuilder.getBuilder(INDEX).setMappingSettingJsonFileName(MAPPING);
+            client = clientBuilder.create(database);
+            clientBuilder.close();
+
+            historicalPerformance15mRW = new HtDataBaseReaderAndWriter<>(client,
+                    EsHistoricalPerformance15Minutes.ESDATATYPENAME, EsHistoricalPerformance15Minutes.class);
+            historicalPerformance24hRW = new HtDataBaseReaderAndWriter<>(client,
+                    EsHistoricalPerformance24Hours.ESDATATYPENAME, EsHistoricalPerformance24Hours.class);
+            historicalPerformanceLogRW = new HtDataBaseReaderAndWriter<>(client,
+                    EsHistoricalPerformanceLogEntry.ESDATATYPENAME, EsHistoricalPerformanceLogEntry.class);
+
+        } catch (Exception e) {
+            client = null;
+            LOG.error("Can not start database client. Exception: {}", e.getMessage());
+        }
+
+        LOG.info("Create {} finished. DB Service {} started.", MicrowaveHistoricalPerformanceWriterService.class,
+                client != null ? "sucessfully" : "not");
+    }
+
+
+    public void writePM(AllPm pm) {
+
+        LOG.debug("Write {} pm records", pm.size());
+
+        LOG.debug("Write 15m write to DB");
+        historicalPerformance15mRW.doWrite(pm.getPm15());
+        LOG.debug("Write 15m done, Write 24h write to DB");
+        historicalPerformance24hRW.doWrite(pm.getPm24());
+        LOG.debug("Write 24h done");
+
+    }
+
+    public void writePMLog(String mountpointName, String layerProtocolName, String msg) {
+
+        LOG.debug("Write PM Log: {}", msg);
+        EsHistoricalPerformanceLogEntry logEntry = new EsHistoricalPerformanceLogEntry(mountpointName,
+                layerProtocolName, NETCONFTIME_CONVERTER.getTimeStamp().getValue(), msg);
+        historicalPerformanceLogRW.doWrite(logEntry);
+        LOG.debug("Write PM Log done");
+
+    }
+
+
+    static public boolean isAvailable(MicrowaveHistoricalPerformanceWriterService s) {
+
+        if (s == null || s.client == null) {
+            return false;
+        }
+        return true;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/types/EsHistoricalPerformance15Minutes.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/types/EsHistoricalPerformance15Minutes.java
new file mode 100644
index 0000000..6754fce
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/types/EsHistoricalPerformance15Minutes.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types;
+
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.Lp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.OtnHistoryDataG;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class EsHistoricalPerformance15Minutes extends EsHistoricalPerformanceBase {
+
+    public static final String ESDATATYPENAME = "historicalperformance15min";
+
+    private static final Logger LOG = LoggerFactory.getLogger(EsHistoricalPerformance15Minutes.class);
+
+    public EsHistoricalPerformance15Minutes(String nodeName, Lp lp) {
+        super(nodeName, lp);
+    }
+
+    public <T extends OtnHistoryDataG> EsHistoricalPerformance15Minutes setHistoricalRecord15Minutes(OtnHistoryDataG record) {
+        if (record.getGranularityPeriod() != org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.GranularityPeriodType.Period15Min) {
+            LOG.warn("Granularity mismatch for {} expected {} found {}", getNodeName(),getUuidInterface(), org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.GranularityPeriodType.Period15Min, record.getGranularityPeriod());
+        }
+        set(record);
+        return this;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/types/EsHistoricalPerformance24Hours.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/types/EsHistoricalPerformance24Hours.java
new file mode 100644
index 0000000..03c6845
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/types/EsHistoricalPerformance24Hours.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types;
+
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.Lp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.OtnHistoryDataG;
+
+public class EsHistoricalPerformance24Hours extends EsHistoricalPerformanceBase {
+
+    public static final String ESDATATYPENAME = "historicalperformance24h";
+
+    public EsHistoricalPerformance24Hours(String nodeName, Lp lp) {
+        super(nodeName, lp);
+    }
+
+    public <T extends OtnHistoryDataG> EsHistoricalPerformance24Hours setHistoricalRecord24Hours(T record) {
+        set(record);
+        return this;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/types/EsHistoricalPerformanceBase.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/types/EsHistoricalPerformanceBase.java
new file mode 100644
index 0000000..5f8370f
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/types/EsHistoricalPerformanceBase.java
@@ -0,0 +1,165 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.EsObject;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.LinkIdentifyingObject;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.NetconfTimeStamp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.Lp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.OtnHistoryDataG;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.annotation.JsonGetter;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+public class EsHistoricalPerformanceBase extends EsObject {
+
+    private static final Logger LOG = LoggerFactory.getLogger(EsHistoricalPerformanceBase.class);
+    private static final NetconfTimeStamp NETCONFTIME_CONVERTER = NetconfTimeStamp.getConverter();
+
+    @JsonIgnore private final String nodeName;
+    @JsonIgnore private final String uuidInterface;
+    @JsonIgnore private final String layerProtocolName;
+
+    @JsonIgnore private String radioSignalId = null;  //Meaning of connection Id
+    @JsonIgnore private String timeStamp = null;
+    @JsonIgnore private Boolean suspectIntervalFlag = null;
+    @JsonIgnore private String granularityPeriod = null;  //Representation of GranularityPeriodType
+    @JsonIgnore private String scannerId = null;
+    @JsonIgnore private Object performanceData = null;
+
+
+    public EsHistoricalPerformanceBase(String nodeName, Lp actualInterface) {
+        this.nodeName = nodeName;
+        this.uuidInterface = actualInterface.getUuid().getValue();
+        this.layerProtocolName = actualInterface.getLayerProtocolName().getValue();
+
+    }
+
+    protected <T extends OtnHistoryDataG> void set(T record) {
+        if (record == null) {
+            LOG.warn("PM Record: null record. Can not handle");
+            return;
+        }
+
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("PM Record: class {} '{}' ", record.getClass().getSimpleName(), record);
+        }
+
+        timeStamp = NETCONFTIME_CONVERTER.getTimeStampFromNetconf(record.getPeriodEndTime().getValue());
+        suspectIntervalFlag = record.isSuspectIntervalFlag();
+        granularityPeriod = getYangGranularityPeriodString( record.getGranularityPeriod() );
+        scannerId = record.getHistoryDataId();
+
+        if (record instanceof LinkIdentifyingObject) {
+            radioSignalId = ((LinkIdentifyingObject) record).getSignalId();
+        }
+
+        performanceData = new EsPerformanceData(record);
+        setEsId(genSpecificEsId(record.getPeriodEndTime().getValue()));
+    }
+
+
+    @JsonGetter("node-name")
+    public String getNodeName() {
+        return nodeName;
+    }
+
+    @JsonGetter("uuid-interface")
+    public String getUuidInterface() {
+        return uuidInterface;
+    }
+
+    @JsonGetter("layer-protocol-name")
+    public String getLayerProtocolName() {
+        return layerProtocolName;
+    }
+
+    @JsonGetter("radio-signal-id")
+    public String getRadioSignalId() {
+        return radioSignalId;
+    }
+
+    @JsonGetter("time-stamp")
+    public String getTimeStamp() {
+        return timeStamp;
+    }
+
+    @JsonGetter("suspect-interval-flag")
+    public Boolean getSuspect() {
+        return suspectIntervalFlag;
+    }
+
+    @JsonGetter("granularity-period")
+    public String getGranularityPeriod() {
+        return granularityPeriod;
+    }
+
+    @JsonGetter("scanner-id")
+    public String getScannerId() {
+        return scannerId;
+    }
+
+    @JsonGetter("performance-data")
+    public Object getData() {
+        return performanceData;
+    }
+
+
+
+    //Adapt JSON Text
+    //@JsonGetter("granularityPeriod")
+
+    private static String getYangGranularityPeriodString(org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.GranularityPeriodType yangGanularityPeriod) {
+        switch(yangGanularityPeriod == null ? org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.GranularityPeriodType.Unknown : yangGanularityPeriod) {
+            case Period15Min:
+                return "PERIOD_15MIN";
+            case Period24Hours:
+                return "PERIOD_24HOURS";
+            default:
+                return "PERIOD_UNKOWN";
+        }
+    }
+
+    /**
+     * Create a specific ES id for the current log.
+     * @param time is the input.
+     * @return a string with the generated ES Id
+     */
+    protected String genSpecificEsId(String time) {
+
+        StringBuffer strBuf = new StringBuffer();
+        strBuf.append(nodeName);
+        strBuf.append("/");
+        strBuf.append(uuidInterface);
+        strBuf.append("/");
+        strBuf.append(time == null || time.isEmpty() ? "Empty" : time);
+
+        return strBuf.toString();
+    }
+
+    @Override
+    public String toString() {
+        return "EsHistoricalPerformanceBase [nodeName=" + nodeName + ", uuidInterface=" + uuidInterface
+                + ", layerProtocolName=" + layerProtocolName + ", radioSignalId=" + radioSignalId + ", timeStamp="
+                + timeStamp + ", suspectIntervalFlag=" + suspectIntervalFlag + ", granularityPeriod="
+                + granularityPeriod + ", scannerId=" + scannerId + ", performanceData=" + performanceData + "]";
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/types/EsHistoricalPerformanceLogEntry.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/types/EsHistoricalPerformanceLogEntry.java
new file mode 100644
index 0000000..ebbf8b4
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/types/EsHistoricalPerformanceLogEntry.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.EsObject;
+
+/**
+ *
+ * Event from Network to be recorded in the database
+ *
+ */
+
+public class EsHistoricalPerformanceLogEntry extends EsObject {
+
+    public static final String ESDATATYPENAME = "performancelog";
+
+    private String mountpoint;
+    private String interfaceIdx;
+    private String timeStamp;
+    private String logText;
+
+    /**
+     * Create Log entry for NE/Interfaceproblems during PM execution
+     * @param mountpoint Name of
+     * @param interfaceIdx Name of
+     * @param timeStamp Time and date of occurence
+     * @param logText to write
+     */
+    public EsHistoricalPerformanceLogEntry(String mountpoint, String interfaceIdx, String timeStamp, String logText) {
+        super();
+        this.mountpoint = mountpoint;
+        this.interfaceIdx = interfaceIdx;
+        this.timeStamp = timeStamp;
+        this.logText = logText;
+    }
+
+    /**
+     * For jackson purpose
+     */
+    EsHistoricalPerformanceLogEntry() {
+    }
+
+    /**
+     * @return the mountpoint
+     */
+    public String getMountpoint() {
+        return mountpoint;
+    }
+
+    /**
+     * @return the interfaceIdx
+     */
+    public String getInterfaceIdx() {
+        return interfaceIdx;
+    }
+
+    /**
+     * @return the timeStamp
+     */
+    public String getTimeStamp() {
+        return timeStamp;
+    }
+
+    /**
+     * @return the logText
+     */
+    public String getLogText() {
+        return logText;
+    }
+
+
+
+    public static String getEsdatatypename() {
+        return ESDATATYPENAME;
+    }
+
+ }
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/types/EsPerformanceData.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/types/EsPerformanceData.java
new file mode 100644
index 0000000..ef25f02
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/types/EsPerformanceData.java
@@ -0,0 +1,444 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types;
+
+import com.fasterxml.jackson.annotation.JsonGetter;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ExtendedAirInterfaceHistoricalPerformanceType12;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ExtendedAirInterfaceHistoricalPerformanceType1211;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ExtendedAirInterfaceHistoricalPerformanceType1211p;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.OtnHistoryDataG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.AirInterfaceHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.AirInterfacePerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ContainerHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ContainerPerformanceTypeG;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class EsPerformanceData {
+
+    @JsonIgnore
+    private static final Logger LOG = LoggerFactory.getLogger(EsPerformanceData.class);
+
+    @JsonIgnore
+    private AirInterfacePerformanceTypeG dataAirInterface12 = null;
+    @JsonIgnore
+    private ContainerPerformanceTypeG dataEthContainer12 = null;
+
+    @JsonIgnore
+    private org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.AirInterfacePerformanceTypeG dataAirInterface1211 = null;
+    @JsonIgnore
+    private org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ContainerPerformanceTypeG dataEthContainer1211 = null;
+
+    @JsonIgnore
+    private org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.AirInterfacePerformanceTypeG dataAirInterface1211p = null;
+    @JsonIgnore
+    private org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ContainerPerformanceTypeG dataEthContainer1211p = null;
+
+    public <T extends OtnHistoryDataG> EsPerformanceData(T otnHistoryData) {
+
+        if (otnHistoryData instanceof AirInterfaceHistoricalPerformanceTypeG) {
+            this.dataAirInterface12 = ((AirInterfaceHistoricalPerformanceTypeG) otnHistoryData).getPerformanceData();
+        } else if (otnHistoryData instanceof ContainerHistoricalPerformanceTypeG) {
+            this.dataEthContainer12 = ((ContainerHistoricalPerformanceTypeG) otnHistoryData).getPerformanceData();
+        } else if (otnHistoryData instanceof ExtendedAirInterfaceHistoricalPerformanceType12) {
+            this.dataAirInterface12 = ((ExtendedAirInterfaceHistoricalPerformanceType12) otnHistoryData)
+                    .getAirInterfaceHistoricalPerformanceType().getPerformanceData();
+        } else if (otnHistoryData instanceof org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.AirInterfaceHistoricalPerformanceTypeG) {
+            this.dataAirInterface1211 = ((org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.AirInterfaceHistoricalPerformanceTypeG) otnHistoryData)
+                    .getPerformanceData();
+        } else if (otnHistoryData instanceof org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ContainerHistoricalPerformanceTypeG) {
+            this.dataEthContainer1211 = ((org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ContainerHistoricalPerformanceTypeG) otnHistoryData)
+                    .getPerformanceData();
+        } else if (otnHistoryData instanceof ExtendedAirInterfaceHistoricalPerformanceType1211) {
+            this.dataAirInterface1211 = ((ExtendedAirInterfaceHistoricalPerformanceType1211) otnHistoryData)
+                    .getAirInterfaceHistoricalPerformanceType().getPerformanceData();
+        } else if (otnHistoryData instanceof org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.AirInterfaceHistoricalPerformanceTypeG) {
+            this.dataAirInterface1211p = ((org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.AirInterfaceHistoricalPerformanceTypeG) otnHistoryData)
+                    .getPerformanceData();
+        } else if (otnHistoryData instanceof org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ContainerHistoricalPerformanceTypeG) {
+            this.dataEthContainer1211p = ((org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ContainerHistoricalPerformanceTypeG) otnHistoryData)
+                    .getPerformanceData();
+        } else if (otnHistoryData instanceof ExtendedAirInterfaceHistoricalPerformanceType1211p) {
+            this.dataAirInterface1211p = ((ExtendedAirInterfaceHistoricalPerformanceType1211p) otnHistoryData)
+                    .getAirInterfaceHistoricalPerformanceType().getPerformanceData();
+        } else {
+            LOG.warn("Can not assign historical performance type {}", otnHistoryData.getClass().getName());
+        }
+    }
+
+    @JsonGetter("es")
+    public java.lang.Integer getEs() {
+        return dataAirInterface12 != null ? dataAirInterface12.getEs()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getEs()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getEs() : null;
+    }
+
+    @JsonGetter("ses")
+    java.lang.Integer getSes() {
+        return dataAirInterface12 != null ? dataAirInterface12.getSes()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getSes()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getSes() : null;
+    }
+
+    @JsonGetter("cses")
+    java.lang.Integer getCses() {
+        return dataAirInterface12 != null ? dataAirInterface12.getCses()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getCses()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getCses() : null;
+    }
+
+    @JsonGetter("unavailability")
+    java.lang.Integer getUnavailability() {
+        return dataAirInterface12 != null ? dataAirInterface12.getUnavailability()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getUnavailability()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getUnavailability() : null;
+    }
+
+    @JsonGetter("tx-level-min")
+    java.lang.Byte getTxLevelMin() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTxLevelMin()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTxLevelMin()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTxLevelMin() : null;
+    }
+
+    @JsonGetter("tx-level-max")
+    java.lang.Byte getTxLevelMax() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTxLevelMax()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTxLevelMax()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTxLevelMax() : null;
+    }
+
+    @JsonGetter("tx-level-avg")
+    java.lang.Byte getTxLevelAvg() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTxLevelAvg()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTxLevelAvg()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTxLevelAvg() : null;
+    }
+
+    @JsonGetter("rx-level-min")
+    java.lang.Byte getRxLevelMin() {
+        return dataAirInterface12 != null ? dataAirInterface12.getRxLevelMin()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getRxLevelMin()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getRxLevelMin() : null;
+    }
+
+    @JsonGetter("rx-level-max")
+    java.lang.Byte getRxLevelMax() {
+        return dataAirInterface12 != null ? dataAirInterface12.getRxLevelMax()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getRxLevelMax()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getRxLevelMax() : null;
+    }
+
+    @JsonGetter("rx-level-avg")
+    java.lang.Byte getRxLevelAvg() {
+        return dataAirInterface12 != null ? dataAirInterface12.getRxLevelAvg()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getRxLevelAvg()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getRxLevelAvg() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time2-states")
+    java.lang.Integer getTime2States() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime2States()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime2States()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTime2States() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time4-states-s")
+    java.lang.Integer getTime4StatesS() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime4StatesS()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime4StatesS()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTime4StatesS() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time4-states")
+    java.lang.Integer getTime4States() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime4States()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime4States()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTime4States() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time8-states")
+    java.lang.Integer getTime8States() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime8States()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime8States()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTime8States() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time16-states-s")
+    java.lang.Integer getTime16StatesS() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime16StatesS()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime16StatesS()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTime16StatesS() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time16-states")
+    java.lang.Integer getTime16States() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime16States()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime16States()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTime16States() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time32-states")
+    java.lang.Integer getTime32States() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime32States()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime32States()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTime32States() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time64-states")
+    java.lang.Integer getTime64States() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime64States()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime64States()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTime64States() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time128-states")
+    java.lang.Integer getTime128States() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime128States()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime128States()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTime128States() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time256-states")
+    java.lang.Integer getTime256States() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime256States()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime256States()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTime256States() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time512-states")
+    java.lang.Integer getTime512States() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime512States()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime512States()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTime512States() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time512-states-l")
+    java.lang.Integer getTime512StatesL() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime512StatesL()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime512StatesL()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTime512StatesL() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time1024-states")
+    java.lang.Integer getTime1024States() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime1024States()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime1024States()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTime1024States() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time1024-states-l")
+    java.lang.Integer getTime1024StatesL() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime1024StatesL()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime1024StatesL()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTime1024StatesL() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time2048-states")
+    java.lang.Integer getTime2048States() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime2048States()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime2048States()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTime2048States() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time2048-states-l")
+    java.lang.Integer getTime2048StatesL() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime2048StatesL()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime2048StatesL()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTime2048StatesL() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time4096-states")
+    java.lang.Integer getTime4096States() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime4096States()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime4096States()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTime4096States() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time4096-states-l")
+    java.lang.Integer getTime4096StatesL() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime4096StatesL()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime4096StatesL()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTime4096StatesL() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time8192-states")
+    java.lang.Integer getTime8192States() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime8192States()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime8192States()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTime8192States() : null;
+    }
+
+    @SuppressWarnings("deprecation")
+    @JsonGetter("time8192-states-l")
+    java.lang.Integer getTime8192StatesL() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTime8192StatesL()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getTime8192StatesL()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getEs() : null;
+    }
+
+    @JsonGetter("snir-min")
+    java.lang.Byte getSnirMin() {
+        return dataAirInterface12 != null ? dataAirInterface12.getSnirMin()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getSnirMin()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getSnirMin() : null;
+    }
+
+    @JsonGetter("snir-max")
+    java.lang.Byte getSnirMax() {
+        return dataAirInterface12 != null ? dataAirInterface12.getSnirMax()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getSnirMax()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getSnirMax() : null;
+    }
+
+    @JsonGetter("snir-avg")
+    java.lang.Byte getSnirAvg() {
+        return dataAirInterface12 != null ? dataAirInterface12.getSnirAvg()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getSnirAvg()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getSnirAvg() : null;
+    }
+
+    @JsonGetter("xpd-min")
+    java.lang.Byte getXpdMin() {
+        return dataAirInterface12 != null ? dataAirInterface12.getXpdMin()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getXpdMin()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getXpdMin() : null;
+    }
+
+    @JsonGetter("xpd-max")
+    java.lang.Byte getXpdMax() {
+        return dataAirInterface12 != null ? dataAirInterface12.getXpdMax()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getXpdMax()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getXpdMax() : null;
+    }
+
+    @JsonGetter("xpd-avg")
+    java.lang.Byte getXpdAvg() {
+        return dataAirInterface12 != null ? dataAirInterface12.getXpdAvg()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getXpdAvg()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getXpdAvg() : null;
+    }
+
+    @JsonGetter("rf-temp-min")
+    java.lang.Byte getRfTempMin() {
+        return dataAirInterface12 != null ? dataAirInterface12.getRfTempMin()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getRfTempMin()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getRfTempMin() : null;
+    }
+
+    @JsonGetter("rf-temp-max")
+    java.lang.Byte getRfTempMax() {
+        return dataAirInterface12 != null ? dataAirInterface12.getRfTempMax()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getRfTempMax()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getRfTempMax() : null;
+    }
+
+    @JsonGetter("rf-temp-avg")
+    java.lang.Byte getRfTempAvg() {
+        return dataAirInterface12 != null ? dataAirInterface12.getRfTempAvg()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getRfTempAvg()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getRfTempAvg() : null;
+    }
+
+    @JsonGetter("defect-blocks-sum")
+    java.lang.Short getDefectBlocksSum() {
+        return dataAirInterface12 != null ? dataAirInterface12.getDefectBlocksSum()
+                : dataAirInterface1211 != null ? dataAirInterface1211.getDefectBlocksSum()
+                        : dataAirInterface1211p != null ? dataAirInterface1211p.getDefectBlocksSum() : null;
+    }
+
+    @JsonGetter("time-period")
+    java.lang.Integer getTimePeriod() {
+        return dataAirInterface12 != null ? dataAirInterface12.getTimePeriod()
+                : dataEthContainer12 != null ? dataEthContainer12.getTimePeriod()
+                        : dataAirInterface1211 != null ? dataAirInterface1211.getTimePeriod()
+                                : dataEthContainer1211 != null ? dataEthContainer1211.getTimePeriod()
+                                        : dataAirInterface1211p != null ? dataAirInterface1211p.getTimePeriod()
+                                                : dataEthContainer1211p != null ? dataEthContainer1211p.getTimePeriod()
+                                                        : null;
+    }
+
+    @JsonGetter("tx-ethernet-bytes-max-s")
+    java.lang.Integer getTxEthernetBytesMaxS() {
+        return dataEthContainer12 != null ? dataEthContainer12.getTxEthernetBytesMaxS()
+                : dataEthContainer1211 != null ? dataEthContainer1211.getTxEthernetBytesMaxS()
+                        : dataEthContainer1211p != null ? dataEthContainer1211p.getTxEthernetBytesMaxS() : null;
+    }
+
+    @JsonGetter("tx-ethernet-bytes-max-m")
+    java.lang.Long getTxEthernetBytesMaxM() {
+        return dataEthContainer12 != null ? dataEthContainer12.getTxEthernetBytesMaxM()
+                : dataEthContainer1211 != null ? dataEthContainer1211.getTxEthernetBytesMaxM()
+                        : dataEthContainer1211p != null ? dataEthContainer1211p.getTxEthernetBytesMaxM() : null;
+    }
+
+    @JsonGetter("tx-ethernet-bytes-sum")
+    java.lang.Long getTxEthernetBytesSum() {
+        return dataEthContainer12 != null ? dataEthContainer12.getTxEthernetBytesSum()
+                : dataEthContainer1211 != null ? dataEthContainer1211.getTxEthernetBytesSum()
+                        : dataEthContainer1211p != null ? dataEthContainer1211p.getTxEthernetBytesSum() : null;
+    }
+
+    @Override
+    public String toString() {
+        return "EsPerformanceData [getEs()=" + getEs() + ", getSes()=" + getSes() + ", getCses()=" + getCses()
+                + ", getUnavailability()=" + getUnavailability() + ", getTxLevelMin()=" + getTxLevelMin()
+                + ", getTxLevelMax()=" + getTxLevelMax() + ", getTxLevelAvg()=" + getTxLevelAvg() + ", getRxLevelMin()="
+                + getRxLevelMin() + ", getRxLevelMax()=" + getRxLevelMax() + ", getRxLevelAvg()=" + getRxLevelAvg()
+                + ", getTime2States()=" + getTime2States() + ", getTime4StatesS()=" + getTime4StatesS()
+                + ", getTime4States()=" + getTime4States() + ", getTime8States()=" + getTime8States()
+                + ", getTime16StatesS()=" + getTime16StatesS() + ", getTime16States()=" + getTime16States()
+                + ", getTime32States()=" + getTime32States() + ", getTime64States()=" + getTime64States()
+                + ", getTime128States()=" + getTime128States() + ", getTime256States()=" + getTime256States()
+                + ", getTime512States()=" + getTime512States() + ", getTime512StatesL()=" + getTime512StatesL()
+                + ", getTime1024States()=" + getTime1024States() + ", getTime1024StatesL()=" + getTime1024StatesL()
+                + ", getTime2048States()=" + getTime2048States() + ", getTime2048StatesL()=" + getTime2048StatesL()
+                + ", getTime4096States()=" + getTime4096States() + ", getTime4096StatesL()=" + getTime4096StatesL()
+                + ", getTime8192States()=" + getTime8192States() + ", getTime8192StatesL()=" + getTime8192StatesL()
+                + ", getSnirMin()=" + getSnirMin() + ", getSnirMax()=" + getSnirMax() + ", getSnirAvg()=" + getSnirAvg()
+                + ", getXpdMin()=" + getXpdMin() + ", getXpdMax()=" + getXpdMax() + ", getXpdAvg()=" + getXpdAvg()
+                + ", getRfTempMin()=" + getRfTempMin() + ", getRfTempMax()=" + getRfTempMax() + ", getRfTempAvg()="
+                + getRfTempAvg() + ", getDefectBlocksSum()=" + getDefectBlocksSum() + ", getTimePeriod()="
+                + getTimePeriod() + ", getTxEthernetBytesMaxS()=" + getTxEthernetBytesMaxS()
+                + ", getTxEthernetBytesMaxM()=" + getTxEthernetBytesMaxM() + ", getTxEthernetBytesSum()="
+                + getTxEthernetBytesSum() + "]";
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/GeoLocation.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/GeoLocation.java
new file mode 100644
index 0000000..1838c33
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/GeoLocation.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.ptp.impl;
+
+/**
+ * Path list with logical-termination-point list
+ "path" : [{
+  "path-id": "4d778388-41c8-11e7-a919-92ebcb67fe33",
+  "path-name": "NE-10-ClockIdentity",
+  "layer-protocol-name": "PTP",
+  "directionality": "unidirectional",
+  "logical-termination-point": [{
+    "ltp-reference":"yep",
+    "physical-port-reference": "shelf:1-slot:1-Card-port:5",
+    "node-reference":"NE-10",
+    "site-reference": "site-a",
+    "site-name": "GUI-Label",
+    "geo-location": {
+       "longitude": "54.123456",
+       "latitude": "13.123456"
+    }]
+  }]
+
+ * @author herbert
+ */
+
+public class GeoLocation {
+    String longitude;
+    String latitude;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/LogicalTerminationPoint.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/LogicalTerminationPoint.java
new file mode 100644
index 0000000..6efd3f9
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/LogicalTerminationPoint.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.ptp.impl;
+
+/**
+ * Path list with logical-termination-point list
+ "path" : [{
+  "path-id": "4d778388-41c8-11e7-a919-92ebcb67fe33",
+  "path-name": "NE-10-ClockIdentity",
+  "layer-protocol-name": "PTP",
+  "directionality": "unidirectional",
+  "logical-termination-point": [{
+    "ltp-reference":"yep",
+    "physical-port-reference": "shelf:1-slot:1-Card-port:5",
+    "node-reference":"NE-10",
+    "site-reference": "site-a",
+    "site-name": "GUI-Label",
+    "geo-location": {
+       "longitude": "54.123456",
+       "latitude": "13.123456"
+    }]
+  }]
+
+
+ * @author herbert
+ *
+ */
+public class LogicalTerminationPoint {
+
+    String ltpReference;
+    String physicalPortReference;
+    String nodeReference;
+    String siteReference;
+    String siteName;
+    GeoLocation geoLocation;
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/Path.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/Path.java
new file mode 100644
index 0000000..60a236d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/Path.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.ptp.impl;
+
+import java.util.List;
+
+/**
+ * Path list with logical-termination-point list
+ "path" : [{
+  "path-id": "4d778388-41c8-11e7-a919-92ebcb67fe33",
+  "path-name": "NE-10-ClockIdentity",
+  "layer-protocol-name": "PTP",
+  "directionality": "unidirectional",
+  "logical-termination-point": [{
+    "ltp-reference":"yep",
+    "physical-port-reference": "shelf:1-slot:1-Card-port:5",
+    "node-reference":"NE-10",
+    "site-reference": "site-a",
+    "site-name": "GUI-Label",
+    "geo-location": {
+       "longitude": "54.123456",
+       "latitude": "13.123456"
+    }]
+  }]
+ * @author herbert
+ *
+ */
+public class Path {
+
+    String pathId;
+    String pathName;
+    String layperProtocolName;
+    String directionality;
+    List<LogicalTerminationPoint> logicalTerminationPoints;
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/PtpManagerImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/PtpManagerImpl.java
new file mode 100644
index 0000000..3bb1693
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/PtpManagerImpl.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+/**
+ * 
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.ptp.impl;
+
+/**
+ * @author herbert
+ *
+ */
+public class PtpManagerImpl {
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/elasticsearch.yml b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/elasticsearch.yml
new file mode 100644
index 0000000..896d516
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/elasticsearch.yml
@@ -0,0 +1,103 @@
+# ======================== Elasticsearch Configuration =========================
+#
+# NOTE: Elasticsearch comes with reasonable defaults for most settings.
+#       Before you set out to tweak and tune the configuration, make sure you
+#       understand what are you trying to accomplish and the consequences.
+#
+# The primary way of configuring a node is via this file. This template lists
+# the most important settings you may want to configure for a production cluster.
+#
+# Please see the documentation for further information on configuration options:
+# <http://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html>
+#
+# ---------------------------------- Cluster -----------------------------------
+#
+# Use a descriptive name for your cluster:
+#
+cluster.name: $clustername
+#
+# ------------------------------------ Node ------------------------------------
+#
+# Use a descriptive name for the node:
+#
+node.name: $nodename
+#
+# Add custom attributes to the node:
+#
+# node.rack: r1
+#
+# ----------------------------------- Paths ------------------------------------
+#
+# Path to directory where to store the data (separate multiple locations by comma):
+#
+# path.data: /path/to/data
+path.data: etc
+path.home: data
+path.plugins: etc/elasticsearch-plugins
+#
+# Path to log files:
+#
+# path.logs: /path/to/logs
+#
+# ----------------------------------- Memory -----------------------------------
+#
+# Lock the memory on startup:
+#
+# bootstrap.mlockall: true
+#
+# Make sure that the `ES_HEAP_SIZE` environment variable is set to about half the memory
+# available on the system and that the owner of the process is allowed to use this limit.
+#
+# Elasticsearch performs poorly when the system is swapping the memory.
+#
+# ---------------------------------- Network -----------------------------------
+#
+# Set the bind address to a specific IP (IPv4 or IPv6):
+#
+# network.host: 192.168.0.1
+network.bind_host: 0.0.0.0
+network.publish_host: $hostname
+#
+# Set a custom port for HTTP:
+#
+# http.port: 9200
+#
+# For more information, see the documentation at:
+# <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html>
+#
+# --------------------------------- Discovery ----------------------------------
+#
+# Pass an initial list of hosts to perform discovery when new node is started:
+# The default list of hosts is ["127.0.0.1", "[::1]"]
+#
+# discovery.zen.ping.unicast.hosts: ["host1", "host2"]
+#
+# Prevent the "split brain" by configuring the majority of nodes (total number of nodes / 2 + 1):
+#
+# discovery.zen.minimum_master_nodes: 3
+#
+# For more information, see the documentation at:
+# <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery.html>
+#
+# ---------------------------------- Gateway -----------------------------------
+#
+# Block initial recovery after a full cluster restart until N nodes are started:
+#
+# gateway.recover_after_nodes: 3
+#
+# For more information, see the documentation at:
+# <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-gateway.html>
+#
+# ---------------------------------- Various -----------------------------------
+#
+# Disable starting multiple nodes on a single system:
+#
+# node.max_local_storage_nodes: 1
+#
+# Require explicit names when deleting indices:
+#
+# action.destructive_requires_name: true
+
+# Required for Kibana 4.x support
+index.max_result_window: 2147483647
+#transport.tcp.port: 9301
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/config/opendaylight.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/config/opendaylight.json
new file mode 100644
index 0000000..2c93d86
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/config/opendaylight.json
@@ -0,0 +1,21 @@
+{
+	"sdn-controller" : {
+		"dlux" : {
+            "ip-version" : "ipv4",
+			"host" : "localhost",
+            "port" : 8181,
+            "transport-protocol" : "http",
+            "username" : "admin",
+            "password" : "admin"
+		},
+		"main" : {
+            "ip-version" : "ipv4",
+			"host" : "localhost",
+            "port" : 8181,
+            "transport-protocol" : "http",
+            "username" : "admin",
+            "password" : "admin"
+		}
+	}
+}
+
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/CoreModel-ForMicrowave.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/CoreModel-ForMicrowave.json
new file mode 100644
index 0000000..596584e
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/CoreModel-ForMicrowave.json
@@ -0,0 +1,751 @@
+{
+	"schema-information": {
+		"ForwardingDomain": {
+			"id": "ForwardingDomain",
+			"uml-id": "_oGql-FLNEeO75dO39GbF8Q",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"The ForwardingDomain (FD) object class models the topological component which represents the opportunity to enable forwarding (of specific transport characteristic information at one or more protocol layers) between points represented by the LTP in the model. The FD object provides the context for instructing the formation, adjustment and removal of FCs and hence offers the potential to enable forwarding. The LTPs available are those defined at the boundary of the FD. At a lowere level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs) and the FD representing the switch matrix can be further partitioned."
+			]
+		},
+		"layerProtocolNameList": {
+			"id": "layerProtocolNameList",
+			"uml-id": "_oGqmAlLNEeO75dO39GbF8Q",
+			"uml-type": "ownedAttribute",
+			"type": "_P-Hp8MD4EeSoNOrYOfaryg",
+			"order-number": 1,
+			"is-read-only": false,
+			"description": [
+				"One or more protocol layers at which the FD represents the opportunity to enable forwarding between LTP that bound it."
+			]
+		},
+		"_lowerLevelFdRefList": {
+			"id": "_lowerLevelFdRefList",
+			"uml-id": "_oGqmBVLNEeO75dO39GbF8Q",
+			"uml-type": "ownedAttribute",
+			"type": "_oGql-FLNEeO75dO39GbF8Q",
+			"order-number": 2,
+			"is-read-only": false,
+			"description": [
+				"The FD object class supports a recursive aggregation relationship (HigherLevelFdEncompassesLowerLevelFds) such that the internal construction of an FD can be exposed as multiple lower level FDs and associated Links (partitioning). The aggregated FDs and Links form an interconnected topology that provides and describes the capability of the aggregating FD. Note that the model actually represents aggregation of lower level FDs into higher level FDs as views rather than FD partition, and supports multiple views. Aggregation allow reallocation of capacity from lower level FDs to different higher level FDs as if the network is reorganized (as the association is aggregation not composition)."
+			]
+		},
+		"_fcRefList": {
+			"id": "_fcRefList",
+			"uml-id": "_oGql_1LNEeO75dO39GbF8Q",
+			"uml-type": "ownedAttribute",
+			"type": "_oGqmC1LNEeO75dO39GbF8Q",
+			"order-number": 3,
+			"is-read-only": false,
+			"description": [
+				"An FD contains one or more FCs. A contained FC connects LTPs that bound the FD."
+			]
+		},
+		"ForwardingConstruct": {
+			"id": "ForwardingConstruct",
+			"uml-id": "_oGqmC1LNEeO75dO39GbF8Q",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs at a particular specific layerProtocol. Like the LTP the FC supports any transport protocol including all circuit and packet forms. It is used to effect forwarding of transport characteristic (layer protocol) information. An FC can be in only one FD. The ForwardingConstruct is a Forwarding entity. At a low level of the recursion, a FC represents a cross-connection within an NE. It may also represent a fragment of a cross-connection under certain circumstances. The FC object can be used to represent many different structures including point-to-point (P2P), point-to-multipoint (P2MP), rooted-multipoint (RMP) and multipoint-to-multipoint (MP2MP) bridge and selector structure for linear, ring or mesh protection schemes."
+			]
+		},
+		"_lowerLevelFcRefList": {
+			"id": "_lowerLevelFcRefList",
+			"uml-id": "_i7UzkFYfEeOVGaP4lO41SQ",
+			"uml-type": "ownedAttribute",
+			"type": "_oGqmC1LNEeO75dO39GbF8Q",
+			"order-number": 2,
+			"is-read-only": false,
+			"description": [
+				"An FC object supports a recursive aggregation relationship such that the internal construction of an FC can be exposed as multiple lower level FC objects (partitioning). Aggregation is used as for the FD to allow changes in hierarchy."
+			]
+		},
+		"_fcPortList": {
+			"id": "_fcPortList",
+			"uml-id": "_gqUk0FYgEeOVGaP4lO41SQ",
+			"uml-type": "ownedAttribute",
+			"type": "_b_lUAFYgEeOVGaP4lO41SQ",
+			"order-number": 3,
+			"is-read-only": false,
+			"description": [
+				"The association of the FC to LTPs is made via FcPorts (essentially the ports of the FC)."
+			]
+		},
+		"_fcSwitchList": {
+			"id": "_fcSwitchList",
+			"uml-id": "_d_droFYhEeOVGaP4lO41SQ",
+			"uml-type": "ownedAttribute",
+			"type": "_a97NQFYhEeOVGaP4lO41SQ",
+			"order-number": 4,
+			"is-read-only": false,
+			"description": [
+				"If an FC exposes protection (having two FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects. The arrangement of switches for a particular instance is described by a referenced FcSpec"
+			]
+		},
+		"forwardingDirection": {
+			"id": "forwardingDirection",
+			"uml-id": "_9_yMUEDAEeWQeOKbNUpP9A",
+			"uml-type": "ownedAttribute",
+			"type": "_dV67AEC8EeWxhL2B6Peg6A",
+			"order-number": 5,
+			"is-read-only": false,
+			"description": [
+				"The directionality of the ForwardingConstruct. Is applicable to simple ForwardingConstructs where all FcPorts are BIDIRECTIONAL (the ForwardingConstruct will be BIDIRECTIONAL) or UNIDIRECTIONAL (the ForwardingConstruct will be UNIDIRECTIONAL). Is not present in more complex cases."
+			]
+		},
+		"NetworkElement": {
+			"id": "NetworkElement",
+			"uml-id": "_oGqnr1LNEeO75dO39GbF8Q",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"The Network Element (NE) object class represents a network element (traditional NE) in the data plane. A data plane network element is essentially a consolidation of capabilities that can be viewed and controlled through a  single  management-control port. In the direct interface from an SDN controller to a network element in the data plane, the NetworkElement object defines the scope of control for the resources within the network element For example internal transfer of user information between the external terminations (ports of the NE), encapsulation, multiplexing/demultiplexing, and OAM functions, etc. The NetworkElement provides the scope of the naming space for identifying objects representing the resources within the data plane network element. NE is really a product bundling or some view of management scope, management access, session. The NE is not directly part of topology but brings meaning to the FD context and the LTP context (and hence the links)."
+			]
+		},
+		"_fdRefList": {
+			"id": "_fdRefList",
+			"uml-id": "_oGqnslLNEeO75dO39GbF8Q",
+			"uml-type": "ownedAttribute",
+			"type": "_oGql-FLNEeO75dO39GbF8Q",
+			"order-number": 1,
+			"is-read-only": false,
+			"description": [
+				"Represents the FD that is completely within the boundary of the NE. At a low level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs) and the FD representing the switch matrix can be further partitioned. Where an FD is referenced by the NeEncompassesFd association, any FDs that it encompasses (i.e., that are associated with it by HigherLevelFdEncompassesLowerLevelFds), must also be encompassed by the NE and hence must have the NeEncompassesFd association."
+			]
+		},
+		"FcPort": {
+			"id": "FcPort",
+			"uml-id": "_b_lUAFYgEeOVGaP4lO41SQ",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"The association of the FC to LTPs is made via FcPorts. The FcPort object class models the access to the FC function. The traffic forwarding between the associated FcPorts of the FC depends upon the type of FC and may be associated with FcSwitch object instances. In cases where there is resilience the FcPort may convey the resilience role of the access to the FC. It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point. The FcPort replaces the Protection Unit of a traditional protection model. The ForwadingConstruct can be considered as a component and the FcPort as a Port on that component"
+			]
+		},
+		"role": {
+			"id": "role",
+			"uml-id": "_Ykm6QFeGEeOVGaP4lO41SQ",
+			"uml-type": "ownedAttribute",
+			"type": "_DUU_sGZ_EeWrX_JIGzXlSg",
+			"order-number": 2,
+			"is-read-only": false,
+			"description": [
+				"Each FcPort of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."
+			]
+		},
+		"fcPortDirection": {
+			"id": "fcPortDirection",
+			"uml-id": "_1HbEgEDAEeWQeOKbNUpP9A",
+			"uml-type": "ownedAttribute",
+			"type": "_2WpC8EC7EeWxhL2B6Peg6A",
+			"order-number": 3,
+			"is-read-only": false,
+			"description": [
+				"The orientation of defined flow at the FcPort."
+			]
+		},
+		"LayerProtocol": {
+			"id": "LayerProtocol",
+			"uml-id": "_gROecFYXEeOVGaP4lO41SQ",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Each transport layer is represented by a LayerProtocol (LP) instance. The LayerProtocol instances it can be used for controlling termination and monitoring functionality. It can also be used for controlling the adaptation (i.e. encapsulation and/or multiplexing of client signal), tandem connection monitoring, traffic conditioning and/or shaping functionality at an intermediate point along a connection. Where the client - server relationship is fixed 1:1 and immutable, the layers can be encapsulated in a single LTP instance. Where the is a n:1 relationship between client and server, the layers must be split over two separate instances of LTP."
+			]
+		},
+		"configuredClientCapacity": {
+			"id": "configuredClientCapacity",
+			"uml-id": "_CUJD4BicEeSh8KVgZCMyDw",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 2,
+			"is-read-only": false,
+			"description": [
+				"Provides a summarized view of the client capacity that is configurable for use. Note the cleint LTP association should provide all necessary detail hence this attribute is questionable."
+			]
+		},
+		"lpDirection": {
+			"id": "lpDirection",
+			"uml-id": "_GuuSYEDBEeWQeOKbNUpP9A",
+			"uml-type": "ownedAttribute",
+			"type": "_RWILYEDAEeWQeOKbNUpP9A",
+			"order-number": 3,
+			"is-read-only": false,
+			"description": [
+				"The overall directionality of the LP. - A BIDIRECTIONAL LP will have some SINK and/or SOURCE flowss. - A SINK LP can only contain elements with SINK flows or CONTRA_DIRECTION_SOURCE flows - A SOURCE LP can only contain SOURCE flows or CONTRA_DIRECTION_SINK flows"
+			]
+		},
+		"terminationState": {
+			"id": "terminationState",
+			"uml-id": "_p2YfoGeEEeWmgIwAIZlYKQ",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 4,
+			"is-read-only": false,
+			"description": [
+				"Indicates whether the layer is terminated and if so how."
+			]
+		},
+		"LogicalTerminationPoint": {
+			"id": "LogicalTerminationPoint",
+			"uml-id": "_eEpDMFX4EeOVGaP4lO41SQ",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. The structure of LTP supports all transport protocols including circuit and packet forms."
+			]
+		},
+		"_serverLtpRefList": {
+			"id": "_serverLtpRefList",
+			"uml-id": "_D4N9IFX5EeOVGaP4lO41SQ",
+			"uml-type": "ownedAttribute",
+			"type": "_eEpDMFX4EeOVGaP4lO41SQ",
+			"order-number": 1,
+			"is-read-only": false,
+			"description": [
+				"References contained LTPs representing servers of this LTP in an inverse multiplexing configuration (e.g. VCAT)."
+			]
+		},
+		"_clientLtpRefList": {
+			"id": "_clientLtpRefList",
+			"uml-id": "_3Y4zAFYWEeOVGaP4lO41SQ",
+			"uml-type": "ownedAttribute",
+			"type": "_eEpDMFX4EeOVGaP4lO41SQ",
+			"order-number": 2,
+			"is-read-only": false,
+			"description": [
+				"References contained LTPs representing client traffic of this LTP for normal cases of multiplexing."
+			]
+		},
+		"_lpList": {
+			"id": "_lpList",
+			"uml-id": "_lvFOQFYXEeOVGaP4lO41SQ",
+			"uml-type": "ownedAttribute",
+			"type": "_gROecFYXEeOVGaP4lO41SQ",
+			"order-number": 3,
+			"is-read-only": false,
+			"description": [
+				"Ordered list of LayerProtocols that this LTP is comprised of where the first entry in the list is the lowest server layer (e.g. physical)"
+			]
+		},
+		"_connectedLtpRef": {
+			"id": "_connectedLtpRef",
+			"uml-id": "_CHM6YFYYEeOVGaP4lO41SQ",
+			"uml-type": "ownedAttribute",
+			"type": "_eEpDMFX4EeOVGaP4lO41SQ",
+			"order-number": 4,
+			"is-read-only": false,
+			"description": [
+				"Applicable in a simple context where two LTPs are associated via a non-adjustable enabled forwarding. Reduces clutter removing the need for two additional LTPs and an FC with a pair of FcPorts."
+			]
+		},
+		"_peerLtpRef": {
+			"id": "_peerLtpRef",
+			"uml-id": "_TkuhMFYYEeOVGaP4lO41SQ",
+			"uml-type": "ownedAttribute",
+			"type": "_eEpDMFX4EeOVGaP4lO41SQ",
+			"order-number": 5,
+			"is-read-only": false,
+			"description": [
+				"References contained LTPs representing the reversal of orientation of flow where two LTPs are associated via a non-adjustable enabled forwarding and where the referenced LTP is fully dependent on the this LTP."
+			]
+		},
+		"physicalPortReference": {
+			"id": "physicalPortReference",
+			"uml-id": "_RLDi4BieEeSh8KVgZCMyDw",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 6,
+			"is-read-only": false,
+			"description": [
+				"One or more text labels for the unmodelled physical port associated with the LTP. In many cases there is no associated physical port"
+			]
+		},
+		"_ltpRefList": {
+			"id": "_ltpRefList",
+			"uml-id": "_vq1NIBigEeSh8KVgZCMyDw",
+			"uml-type": "ownedAttribute",
+			"type": "_eEpDMFX4EeOVGaP4lO41SQ",
+			"order-number": 7,
+			"is-read-only": false,
+			"description": [
+				"References one or more LTPs in other views that represent this LTP. The referencing LTP is the rovider of capability."
+			]
+		},
+		"ltpDirection": {
+			"id": "ltpDirection",
+			"uml-id": "_S811EEDBEeWQeOKbNUpP9A",
+			"uml-type": "ownedAttribute",
+			"type": "_RWILYEDAEeWQeOKbNUpP9A",
+			"order-number": 8,
+			"is-read-only": false,
+			"description": [
+				"The overall directionality of the LTP. - A BIDIRECTIONAL LTP must have at least some LPs that are BIDIRECTIONAL but may also have some SINK and/or SOURCE LPs. - A SINK LTP can only contain SINK LPs - A SOURCE LTP can only contain SOURCE LPs"
+			]
+		},
+		"FcSwitch": {
+			"id": "FcSwitch",
+			"uml-id": "_a97NQFYhEeOVGaP4lO41SQ",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"The FcSwitch object class models the switched forwarding of traffic (traffic flow) between FcPorts and is present where there is protection functionality in the FC. If an FC exposes protection (having two FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects to represent the alternative flow choices visible at the edge of the FC. The FC switch represents and defines a protection switch structure encapsulated in the FC. Essentially performs the functoion of the Protection Group in a traditional model. Associates to 2 or more FcPorts each playing the role of a Protection Unit. One or more protection FcPorts (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) FcPorts where eith protection or working can feed one or more protected FcPort. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 ane 1:1).. May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state."
+			]
+		},
+		"holdOffTime": {
+			"id": "holdOffTime",
+			"uml-id": "_oGqn6FLNEeO75dO39GbF8Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 1,
+			"is-read-only": false,
+			"description": [
+				"This attribute indicates the time, in seconds, between declaration of unacceptable quality of signal on the currently selected FcPort, and the initialization of the protection switching algorithm."
+			]
+		},
+		"waitToRestoreTime": {
+			"id": "waitToRestoreTime",
+			"uml-id": "_oGqn5lLNEeO75dO39GbF8Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 2,
+			"is-read-only": false,
+			"description": [
+				"If the protection system is revertive, this attribute specifies the amount of time, in seconds, to wait after the preferred FcPort returns to an acceptable state of operaion (e.g a fault has cleared) before restoring traffic to that preferred FcPort."
+			]
+		},
+		"protType": {
+			"id": "protType",
+			"uml-id": "_oGqn6lLNEeO75dO39GbF8Q",
+			"uml-type": "ownedAttribute",
+			"type": "_c3Hu8Gb3EeWrX_JIGzXlSg",
+			"order-number": 3,
+			"is-read-only": false,
+			"description": [
+				"Indicates the protection scheme that is used for the ProtectionGroup."
+			]
+		},
+		"operType": {
+			"id": "operType",
+			"uml-id": "_oGqn41LNEeO75dO39GbF8Q",
+			"uml-type": "ownedAttribute",
+			"type": "_oGqjf1LNEeO75dO39GbF8Q",
+			"order-number": 4,
+			"is-read-only": false,
+			"description": [
+				"This attribute whether or not the protection scheme is revertive or non-revertive."
+			]
+		},
+		"_selectedFcPortRefList": {
+			"id": "_selectedFcPortRefList",
+			"uml-id": "_2PdiYI8lEeOw_ste-s6RrA",
+			"uml-type": "ownedAttribute",
+			"type": "_b_lUAFYgEeOVGaP4lO41SQ",
+			"order-number": 5,
+			"is-read-only": false,
+			"description": [
+				"Indicates which points are selected by the switch."
+			]
+		},
+		"Name": {
+			"id": "Name",
+			"uml-id": "_BUcVEI2tEeO38ZmbECnvbg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Name: A property of an entity with a value that is unique in some namespace but may change during the life of the entity. A name carries no semantics with respect to the purpose of the entity."
+			]
+		},
+		"nameList": {
+			"id": "nameList",
+			"uml-id": "_ajjMYI2uEeO38ZmbECnvbg",
+			"uml-type": "ownedAttribute",
+			"type": "_y7oy8I3tEeO38ZmbECnvbg",
+			"order-number": 1,
+			"is-read-only": false,
+			"is-key": 1,
+			"description": [
+				"List of names."
+			]
+		},
+		"GlobalClass": {
+			"id": "GlobalClass",
+			"uml-id": "_iVJ1kI2wEeO38ZmbECnvbg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Represents a type of thing (an Entity) that has instances which can exist in their own right (independently of any others). Entity: Has identity, defined boundary, properties, functionality and lifecycle in a global context. (consider in the context of an Object Class: (usage) The representation of a thing that may be an entity or an inseparable Entity Feature)"
+			]
+		},
+		"LocalClass": {
+			"id": "LocalClass",
+			"uml-id": "_k5nWYI2wEeO38ZmbECnvbg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"A LocalClass represents a Feature of an Entity. It is inseparable from a GlobalClass but is a distinct feature of that GlobalClass such that the instances of LocalClass are able to have associations to other instances.. Feature of an Entity: An inseparable, externally distinguishable part of an entity. The mandatory LocalId of the LocalClass instance is unique in the context of the GlobalClass from which it is inseparable. (consider in the context of an Object Class: (usage) The representation of a thing that may be an entity or an inseparable feature of an entity)"
+			]
+		},
+		"localIdList": {
+			"id": "localIdList",
+			"uml-id": "_RMJegI22EeO38ZmbECnvbg",
+			"uml-type": "ownedAttribute",
+			"type": "_y7oy8I3tEeO38ZmbECnvbg",
+			"order-number": 1,
+			"is-read-only": false,
+			"description": [
+				"An identifier that is unique in the context of some scope that is less than the global scope. (consider in the context of Identifier: A property of an entity/role with a value that is unique within an identifier space, where the identifier space is itself unique, and immutable. The identifier therefore represents the identity of the entity/role. An identifier carries no semantics with respect to the purpose of the entity.)"
+			]
+		},
+		"Label": {
+			"id": "Label",
+			"uml-id": "_u0HQoI2wEeO38ZmbECnvbg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"A property of an entity with a value that is not expected to be unique and is allowed to change. A label carries no semantics with respect to the purpose of the entity and has no effect on the entity behavior or state."
+			]
+		},
+		"labelList": {
+			"id": "labelList",
+			"uml-id": "_olrqYI2uEeO38ZmbECnvbg",
+			"uml-type": "ownedAttribute",
+			"type": "_y7oy8I3tEeO38ZmbECnvbg",
+			"order-number": 1,
+			"is-read-only": false,
+			"description": [
+				"List of labels."
+			]
+		},
+		"Extension": {
+			"id": "Extension",
+			"uml-id": "_bCi74I22EeO38ZmbECnvbg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Extension provides an opportunity to define properties not declared in the class that extend the class enabling a realization with simple ad-hoc extension of standard classes to be conformant."
+			]
+		},
+		"extensionList": {
+			"id": "extensionList",
+			"uml-id": "_uQqu4I28EeO38ZmbECnvbg",
+			"uml-type": "ownedAttribute",
+			"type": "_y7oy8I3tEeO38ZmbECnvbg",
+			"order-number": 1,
+			"is-read-only": false,
+			"description": [
+				"List of simple name-value extentions"
+			]
+		},
+		"UniversalIdAuthority": {
+			"id": "UniversalIdAuthority",
+			"uml-id": "_StA-4I23EeO38ZmbECnvbg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Represents the authority that controls the allocation of UUIDs."
+			]
+		},
+		"NameAndValueAuthority": {
+			"id": "NameAndValueAuthority",
+			"uml-id": "_ulDtsI3AEeO38ZmbECnvbg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Represents the authority that controls the legal valuse for the names and values of a name/value attribute."
+			]
+		},
+		"uuid": {
+			"id": "uuid",
+			"uml-id": "_U1tnkI31EeO38ZmbECnvbg",
+			"uml-type": "ownedAttribute",
+			"type": "_SU3Q4I30EeO38ZmbECnvbg",
+			"order-number": 0,
+			"is-read-only": false,
+			"description": [
+				"The UUID for the NameValueAuthority."
+			]
+		},
+		"ConditionalPackage": {
+			"id": "ConditionalPackage",
+			"uml-id": "_-ZWVQJP0EeOqfpp-ZJSmaA",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"The base class for conditional packages."
+			]
+		},
+		"State_Pac": {
+			"id": "State_Pac",
+			"uml-id": "_RG6VILEtEeSZUdYfPSdgew",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Provides general state attributes."
+			]
+		},
+		"operationalState": {
+			"id": "operationalState",
+			"uml-id": "_dO6owLEtEeSZUdYfPSdgew",
+			"uml-type": "ownedAttribute",
+			"type": "_lNclkLEtEeSZUdYfPSdgew",
+			"order-number": 1,
+			"is-read-only": true,
+			"description": [
+				"The operational state is used to indicate whether or not the resource is installed and working"
+			]
+		},
+		"administrativeControl": {
+			"id": "administrativeControl",
+			"uml-id": "_7gqwALEtEeSZUdYfPSdgew",
+			"uml-type": "ownedAttribute",
+			"type": "_-xPeALEvEeSZUdYfPSdgew",
+			"order-number": 2,
+			"is-read-only": false,
+			"description": [
+				"The administrativeControl state provides control of the availability of specific resources without modification to the provisioning of those resources. The value is the current control target. The actual administrativeState may or may not be at target."
+			]
+		},
+		"administrativeState": {
+			"id": "administrativeState",
+			"uml-id": "_AjGvILEuEeSZUdYfPSdgew",
+			"uml-type": "ownedAttribute",
+			"type": "_KSKOYLEuEeSZUdYfPSdgew",
+			"order-number": 3,
+			"is-read-only": true,
+			"description": [
+				"Shows whether or not the client has permission to use or has a prohibition against using the resource. The administrative state expresses usage permissions for specific resources without modification to the provisioning of those resources."
+			]
+		},
+		"lifecycleState": {
+			"id": "lifecycleState",
+			"uml-id": "_PzqZ0GgiEeWmgIwAIZlYKQ",
+			"uml-type": "ownedAttribute",
+			"type": "_YSsboGgiEeWmgIwAIZlYKQ",
+			"order-number": 4,
+			"is-read-only": false,
+			"description": [
+				"Used to track the planned deployment, allocation to clients and withdrawal of resources."
+			]
+		},
+		"LayerProtocolName": {
+			"id": "LayerProtocolName",
+			"uml-id": "_P-Hp8MD4EeSoNOrYOfaryg",
+			"uml-type": "uml:DataType",
+			"description": [
+				"Provides a controlled list of layer protocol names and indicates the naming authority. Note that it is expected that attributes will be added to this structure to convey the naming authority name, the name of the layer protocol using a human readable string and any particular standard reference. Layer protocol names include: - Layer 1 (L1): OTU, ODU - Layer 2 (L2): Carrier Grade Ethernet (ETY, ETH), MPLS-TP (MT)"
+			]
+		},
+		"PortRole": {
+			"id": "PortRole",
+			"uml-id": "_DUU_sGZ_EeWrX_JIGzXlSg",
+			"uml-type": "uml:DataType",
+			"description": [
+				"The role of a port in the context of the function of the forwarding entity that it bounds"
+			]
+		},
+		"ProtectionType": {
+			"id": "ProtectionType",
+			"uml-id": "_c3Hu8Gb3EeWrX_JIGzXlSg",
+			"uml-type": "uml:DataType",
+			"description": [
+				"Identifies the type of rotection of an FcSwitch."
+			]
+		},
+		"DateAndTime": {
+			"id": "DateAndTime",
+			"uml-id": "_oGqi1lLNEeO75dO39GbF8Q",
+			"uml-type": "uml:DataType",
+			"description": [
+				"This primitive type defines the date and time according to the following structure:  yyyyMMddhhmmss.s[Z|{+|-}HHMm]  where: yyyy  0000 .. 9999  year MM  01 .. 12  month dd  01 .. 31  day hh  00 .. 23  hour mm  00 .. 59  minute ss  00 .. 59  second s  .0 .. .9  tenth of second (set to  .0  if EMS or NE cannot support this granularity) Z  Z  indicates UTC (rather than local time) {+|-}  +  or  -  delta from UTC HH  00 .. 23  time zone difference in hours Mm  00 .. 59  time zone difference in minutes."
+			]
+		},
+		"NameAndValue": {
+			"id": "NameAndValue",
+			"uml-id": "_y7oy8I3tEeO38ZmbECnvbg",
+			"uml-type": "uml:DataType",
+			"description": [
+				"A scoped name-value pair"
+			]
+		},
+		"valueName": {
+			"id": "valueName",
+			"uml-id": "_77PyQI3tEeO38ZmbECnvbg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 1,
+			"is-read-only": false,
+			"is-key": 1,
+			"description": [
+				"The name of the value. The value need not have a name."
+			]
+		},
+		"UniversalId": {
+			"id": "UniversalId",
+			"uml-id": "_SU3Q4I30EeO38ZmbECnvbg",
+			"uml-type": "uml:DataType",
+			"description": [
+				"The univeral ID value where the mechanism for generation is defned by some authority not directly referenced in the structure."
+			]
+		},
+		"value": {
+			"id": "value",
+			"uml-id": "_cbx2gI30EeO38ZmbECnvbg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 1,
+			"is-read-only": false,
+			"description": [
+				"The specific value of the universal id"
+			]
+		},
+		"_oGqjf1LNEeO75dO39GbF8Q": {
+			"id": "OperType",
+			"uml-id": "_oGqjf1LNEeO75dO39GbF8Q",
+			"enum": [
+				"REVERTIVE",
+				"NON-REVERTIVE"
+			],
+			"is-read-only": false,
+			"description": [
+				"The operation type associated with the protection mechanism (either non-revertive or revertive)."
+			]
+		},
+		"_2WpC8EC7EeWxhL2B6Peg6A": {
+			"id": "PortDirection",
+			"uml-id": "_2WpC8EC7EeWxhL2B6Peg6A",
+			"enum": [
+				"BIDIRECTIONAL",
+				"INPUT",
+				"OUTPUT",
+				"UNIDENTIFIED_OR_UNKNOWN"
+			],
+			"is-read-only": false,
+			"description": [
+				"The orientation of flow at the Port of a Forwarding entity"
+			]
+		},
+		"_dV67AEC8EeWxhL2B6Peg6A": {
+			"id": "ForwardingDirection",
+			"uml-id": "_dV67AEC8EeWxhL2B6Peg6A",
+			"enum": [
+				"BIDIRECTIONAL",
+				"UNIDIRECTIONAL",
+				"UNDEFINED_OR_UNKNOWN"
+			],
+			"is-read-only": false,
+			"description": [
+				"The directionality of a Forwarding entity."
+			]
+		},
+		"_RWILYEDAEeWQeOKbNUpP9A": {
+			"id": "TerminationDirection",
+			"uml-id": "_RWILYEDAEeWQeOKbNUpP9A",
+			"enum": [
+				"BIDIRECTIONAL",
+				"SINK",
+				"SOURCE",
+				"UNDEFINED_OR_UNKNOWN"
+			],
+			"is-read-only": false,
+			"description": [
+				"The directionality of a termination entity"
+			]
+		},
+		"_T5GykEDNEeWQeOKbNUpP9A": {
+			"id": "ExtendedTerminationDirection",
+			"uml-id": "_T5GykEDNEeWQeOKbNUpP9A",
+			"enum": [
+				"CONTRA_DIRECTION_SINK",
+				"CONTRA_DIRECTION_SOURCE"
+			],
+			"is-read-only": false,
+			"description": [
+				"Extended to include contra-direction considerations. Only applies to LP and elements of LP not to LTP??"
+			]
+		},
+		"_6anG8GeEEeWmgIwAIZlYKQ": {
+			"id": "TerminationState",
+			"uml-id": "_6anG8GeEEeWmgIwAIZlYKQ",
+			"enum": [
+				"LP_CAN_NEVER_TERMINATE",
+				"LT_NOT_TERMINATED",
+				"TERMINATED_SERVER_TO_CLIENT_FLOW",
+				"TERMINATED_CLIENT_TO_SERVER_FLOW",
+				"TERMINATED_BIDIRECTIONAL",
+				"LT_PERMENANTLY_TERMINATED",
+				"TERMINATION_STATE_UNKNOWN"
+			],
+			"is-read-only": false,
+			"description": [
+				"Provides support for the range of behaviours and specific states that an LP can take with respect to termination of the signal. Indicates to what degree the LayerTermination is terminated."
+			]
+		},
+		"_lNclkLEtEeSZUdYfPSdgew": {
+			"id": "OperationalState",
+			"uml-id": "_lNclkLEtEeSZUdYfPSdgew",
+			"enum": [
+				"DISABLED",
+				"ENABLED"
+			],
+			"is-read-only": false,
+			"description": [
+				"The possible values of the operationalState."
+			]
+		},
+		"_KSKOYLEuEeSZUdYfPSdgew": {
+			"id": "AdministrativeState",
+			"uml-id": "_KSKOYLEuEeSZUdYfPSdgew",
+			"enum": [
+				"LOCKED",
+				"UNLOCKED"
+			],
+			"is-read-only": false,
+			"description": [
+				"The possible values of the administrativeState."
+			]
+		},
+		"_-xPeALEvEeSZUdYfPSdgew": {
+			"id": "AdministrativeControl",
+			"uml-id": "_-xPeALEvEeSZUdYfPSdgew",
+			"enum": [
+				"UNLOCK",
+				"LOCK_PASSIVE",
+				"LOCK_ACTIVE",
+				"LOCK_IMMEDIATE"
+			],
+			"is-read-only": false,
+			"description": [
+				"The possible values of the current target administrative state."
+			]
+		},
+		"_McyhcGgeEeWmgIwAIZlYKQ": {
+			"id": "ExtendedAdminState",
+			"uml-id": "_McyhcGgeEeWmgIwAIZlYKQ",
+			"enum": [
+				"SHUTTING_DOWN_ACTIVE",
+				"SHUTTING_DOWN_PASSIVE"
+			],
+			"is-read-only": false,
+			"description": [
+				"Possible extentions to AdministrativeState"
+			]
+		},
+		"_YSsboGgiEeWmgIwAIZlYKQ": {
+			"id": "LifecycleState",
+			"uml-id": "_YSsboGgiEeWmgIwAIZlYKQ",
+			"enum": [
+				"PLANNED",
+				"POTENTIAL",
+				"INSTALLED",
+				"PENDING_REMOVAL"
+			],
+			"is-read-only": false,
+			"description": [
+				"The possible values of the lifecycleState."
+			]
+		}
+	}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/G.874.1-ForMicrowave.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/G.874.1-ForMicrowave.json
new file mode 100644
index 0000000..5c5daa7
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/G.874.1-ForMicrowave.json
@@ -0,0 +1,546 @@
+{
+	"schema-information": {
+		"OTN_CurrentData": {
+			"id": "OTN_CurrentData",
+			"uml-id": "_OxyHAOGJEeGhaeLtr7IxXg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"This object class is an abstract class from which the OTN layer-specific CurrentData object classes are inherited. This object class is a subclass of the Q.822 CurrentData object class, which in turn is a subclass of X.739 Scanner object class. It inherits the following attributes: scannerId, operationalState, granularityPeriod, administrativeState, suspectIntervalFlag, elapsedTime, observedObjectClass, and observedObjectInstance."
+			]
+		},
+		"timestamp": {
+			"id": "timestamp",
+			"uml-id": "_bGwfoOGJEeGhaeLtr7IxXg",
+			"uml-type": "ownedAttribute",
+			"type": "_X-HZUNwbEeGoneTbGt8X0A",
+			"order-number": 1,
+			"is-read-only": false,
+			"description": [
+				"The timestamp associated with when the current data was collected."
+			]
+		},
+		"OTN_HistoryData": {
+			"id": "OTN_HistoryData",
+			"uml-id": "_dQ2mYOGOEeGhaeLtr7IxXg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"This object class is an abstract class from which the OTN layer-specific HistoryData object classes are inherited."
+			]
+		},
+		"«Q.822»-CurrentData": {
+			"id": "«Q.822»-CurrentData",
+			"uml-id": "_M8IDMceIEeSfd5vyUJsimg",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"suspectIntervalFlag": {
+			"id": "suspectIntervalFlag",
+			"uml-id": "_M8IDNceIEeSfd5vyUJsimg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 1,
+			"is-read-only": false,
+			"description": [
+				"This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are:- Suspect data were detected by the actual resource doing data collection.- Transition of the administrativeState attribute to/from the 'lock' state.- Transition of the operationalState to/from the 'disabled' state.- Scheduler setting that inhibits the collection function.- The performance counters were reset during the interval.- The currentData (or subclass) object instance was created during the monitoring period."
+			]
+		},
+		"elapsedTime": {
+			"id": "elapsedTime",
+			"uml-id": "_M8IDOMeIEeSfd5vyUJsimg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 2,
+			"is-read-only": false
+		},
+		"«Q.822»-HistoryData": {
+			"id": "«Q.822»-HistoryData",
+			"uml-id": "_M8IDVMeIEeSfd5vyUJsimg",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"historyDataId": {
+			"id": "historyDataId",
+			"uml-id": "_M8IDWMeIEeSfd5vyUJsimg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 1,
+			"is-read-only": false,
+			"is-key": 1
+		},
+		"periodEndTime": {
+			"id": "periodEndTime",
+			"uml-id": "_M8IDWceIEeSfd5vyUJsimg",
+			"uml-type": "ownedAttribute",
+			"type": "../OnfModel-CoreModel/CoreModel.uml#_oGqi1lLNEeO75dO39GbF8Q",
+			"order-number": 2,
+			"is-read-only": false
+		},
+		"«X.739»-Scanner": {
+			"id": "«X.739»-Scanner",
+			"uml-id": "_7wb90ceIEeSfd5vyUJsimg",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"scannerId": {
+			"id": "scannerId",
+			"uml-id": "_7wb91ceIEeSfd5vyUJsimg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 1,
+			"is-read-only": false,
+			"is-key": 1
+		},
+		"granularityPeriod": {
+			"id": "granularityPeriod",
+			"uml-id": "_M8IDWseIEeSfd5vyUJsimg",
+			"uml-type": "ownedAttribute",
+			"type": "_Y6WUEEamEeabNPX3o7rjtw",
+			"order-number": 2,
+			"is-read-only": false
+		},
+		"administrativeState": {
+			"id": "administrativeState",
+			"uml-id": "_7wb92seIEeSfd5vyUJsimg",
+			"uml-type": "ownedAttribute",
+			"type": "../OnfModel-CoreModel/CoreModel.uml#_KSKOYLEuEeSZUdYfPSdgew",
+			"order-number": 3,
+			"is-read-only": false
+		},
+		"«X.721»-Top": {
+			"id": "«X.721»-Top",
+			"uml-id": "_BMJ0EceTEeS6-cawxfHpnA",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"This is the top level of managed object class hierarchy and every other managed object class is a specialization of either this generic class (top) or a specialization of subclass of top. The parameter miscellaneousError is to be used when a processing failure has occurred and the error condition encountered does not match any of object's defined specific error types."
+			]
+		},
+		"objectClass": {
+			"id": "objectClass",
+			"uml-id": "_BMJ0FceTEeS6-cawxfHpnA",
+			"uml-type": "ownedAttribute",
+			"type": "_ltGzFMeUEeS6-cawxfHpnA",
+			"order-number": 1,
+			"is-read-only": false,
+			"description": [
+				"ObjectClass ::= CHOICE{ globalForm [0] OBJECT IDENTIFIER, localForm [1] INTEGER}"
+			]
+		},
+		"nameBinding": {
+			"id": "nameBinding",
+			"uml-id": "_BMJ0F8eTEeS6-cawxfHpnA",
+			"uml-type": "ownedAttribute",
+			"type": "_ltGzFMeUEeS6-cawxfHpnA",
+			"order-number": 2,
+			"is-read-only": false
+		},
+		"DateAndTime": {
+			"id": "DateAndTime",
+			"uml-id": "_X-HZUNwbEeGoneTbGt8X0A",
+			"uml-type": "uml:DataType",
+			"description": [
+				"This primitive type defines the date and time according to the following structure:  yyyyMMddhhmmss.s[Z|{+|-}HHMm]  where: yyyy  0000 .. 9999  year MM  01 .. 12  month dd  01 .. 31  day hh  00 .. 23  hour mm  00 .. 59  minute ss  00 .. 59  second s  .0 .. .9  tenth of second (set to  .0  if EMS or NE cannot support this granularity) Z  Z  indicates UTC (rather than local time) {+|-}  +  or  -  delta from UTC HH  00 .. 23  time zone difference in hours Mm  00 .. 59  time zone difference in minutes."
+			]
+		},
+		"_5G6YQOo-EeCjNNLZCc6mew": {
+			"id": "Directionality",
+			"uml-id": "_5G6YQOo-EeCjNNLZCc6mew",
+			"enum": [
+				"SINK",
+				"SOURCE",
+				"BIDIRECTIONAL"
+			],
+			"is-read-only": false,
+			"description": [
+				"The enumeration with the options for directionality of the termination point."
+			]
+		},
+		"_rU8aMOpfEeCjNNLZCc6mew": {
+			"id": "GccAccess",
+			"uml-id": "_rU8aMOpfEeCjNNLZCc6mew",
+			"enum": [
+				"GCC1",
+				"GCC2",
+				"GCC1_AND_GCC2"
+			],
+			"is-read-only": false,
+			"description": [
+				"This enumeration indicates the GCC access represented by the entity."
+			]
+		},
+		"_W7-1oOpiEeCjNNLZCc6mew": {
+			"id": "OperationalState",
+			"uml-id": "_W7-1oOpiEeCjNNLZCc6mew",
+			"enum": [
+				"ENABLED",
+				"DISABLED"
+			],
+			"is-read-only": false,
+			"description": [
+				"The list of valid operational states for the connection."
+			]
+		},
+		"_g0zCsOsDEeCjNNLZCc6mew": {
+			"id": "OperType",
+			"uml-id": "_g0zCsOsDEeCjNNLZCc6mew",
+			"enum": [
+				"REVERTIVE",
+				"NON-REVERTIVE"
+			],
+			"is-read-only": [
+				"The operation type associated with the protection mechanism (either non-revertive or revertive)."
+			]
+		},
+		"_Jl09gOsKEeCjNNLZCc6mew": {
+			"id": "ExtCmdOperation",
+			"uml-id": "_Jl09gOsKEeCjNNLZCc6mew",
+			"enum": [
+				"EXERCISE",
+				"MANUAL_SWITCH",
+				"FORCED_SWITCH",
+				"LOCKOUT",
+				"RELEASE_OF_MANUAL_SWITCH",
+				"RELEASE_OF_FORCED_SWITCH",
+				"RELEASE_OF_LOCKOUT"
+			],
+			"is-read-only": false,
+			"description": [
+				"This enumeration contains the options for the actions that instruct the protection system for performing specific protection switching operations."
+			]
+		},
+		"_bwxBQOw5EeCjNNLZCc6mew": {
+			"id": "AdministrativeState",
+			"uml-id": "_bwxBQOw5EeCjNNLZCc6mew",
+			"enum": [
+				"UNLOCKED",
+				"LOCKED",
+				"SHUTTING_DOWN"
+			],
+			"is-read-only": false,
+			"description": [
+				"For more information on Administrative State, See ITU-T Recs. X.731 and M.3100."
+			]
+		},
+		"_ChQ5oOw-EeCjNNLZCc6mew": {
+			"id": "OCTk_NimKBitRate",
+			"uml-id": "_ChQ5oOw-EeCjNNLZCc6mew",
+			"enum": [
+				"2.5_G",
+				"10_G",
+				"40_G",
+				"100_G"
+			],
+			"is-read-only": false,
+			"description": [
+				"Provides an enumeration with the meaning of each  k  value."
+			]
+		},
+		"_ZBtyUOw_EeCjNNLZCc6mew": {
+			"id": "TimDetMo",
+			"uml-id": "_ZBtyUOw_EeCjNNLZCc6mew",
+			"enum": [
+				"DAPI",
+				"SAPI",
+				"BOTH"
+			],
+			"is-read-only": false,
+			"description": [
+				"List of modes for trace identifier mismatch detection."
+			]
+		},
+		"_HF864OxAEeCjNNLZCc6mew": {
+			"id": "OCTk_NimProblemList",
+			"uml-id": "_HF864OxAEeCjNNLZCc6mew",
+			"enum": [
+				"LOS_P",
+				"OCI",
+				"SSF_P",
+				"SSF_O",
+				"SSF",
+				"TIM",
+				"DEG",
+				"BDI"
+			],
+			"is-read-only": false,
+			"description": [
+				"The valid list of problems for the entity."
+			]
+		},
+		"_WPoNoO3eEeCjNNLZCc6mew": {
+			"id": "TcmMonitoring",
+			"uml-id": "_WPoNoO3eEeCjNNLZCc6mew",
+			"enum": [
+				"INTRUSIVE",
+				"NON-INTRUSIVE"
+			],
+			"is-read-only": false,
+			"description": [
+				"Monitoring types for the tandem connection monitoring function."
+			]
+		},
+		"_OI-7wO6QEeCjNNLZCc6mew": {
+			"id": "TcmMode",
+			"uml-id": "_OI-7wO6QEeCjNNLZCc6mew",
+			"enum": [
+				"OPERATIONAL",
+				"TRANSPARENT",
+				"MONITOR"
+			],
+			"is-read-only": false,
+			"description": [
+				"List of value modes for the sink side of the tandem connection monitoring function."
+			]
+		},
+		"_ZnM8cO6ZEeCjNNLZCc6mew": {
+			"id": "OPSMnk_TtpKBitRate",
+			"uml-id": "_ZnM8cO6ZEeCjNNLZCc6mew",
+			"enum": [
+				"40_G",
+				"100_G"
+			],
+			"is-read-only": false,
+			"description": [
+				"Provides an enumeration with the meaning of each  k  value."
+			]
+		},
+		"_pV-F8O6aEeCjNNLZCc6mew": {
+			"id": "OPSMnk_TtpProblemList",
+			"uml-id": "_pV-F8O6aEeCjNNLZCc6mew",
+			"enum": [
+				"LOS",
+				"LOL"
+			],
+			"is-read-only": false,
+			"description": [
+				"The valid list of problems for the entity."
+			]
+		},
+		"_QW1SYO6bEeCjNNLZCc6mew": {
+			"id": "OPSn_TtpProblemList",
+			"uml-id": "_QW1SYO6bEeCjNNLZCc6mew",
+			"enum": [
+				"LOS"
+			],
+			"is-read-only": false,
+			"description": [
+				"The valid list of problems for the entity."
+			]
+		},
+		"_o-oukO6bEeCjNNLZCc6mew": {
+			"id": "OTM-n_KBitRates",
+			"uml-id": "_o-oukO6bEeCjNNLZCc6mew",
+			"enum": [
+				"2.5_G",
+				"10_G",
+				"40_G",
+				"2.5_10_G",
+				"10_40_G",
+				"2.5_10_40_G"
+			],
+			"is-read-only": false,
+			"description": [
+				"Provides an enumeration with the meaning of each  k  value."
+			]
+		},
+		"_KRCG4O6dEeCjNNLZCc6mew": {
+			"id": "DomainInterface",
+			"uml-id": "_KRCG4O6dEeCjNNLZCc6mew",
+			"enum": [
+				"INTRA_DOMAIN",
+				"INTER_DOMAIN"
+			],
+			"is-read-only": false,
+			"description": [
+				"This enumeration provides the options for the interface associated with OTMn."
+			]
+		},
+		"_EOPyIO6qEeCjNNLZCc6mew": {
+			"id": "OTM-n_OpticalReach",
+			"uml-id": "_EOPyIO6qEeCjNNLZCc6mew",
+			"enum": [
+				"INTRA_OFFICE",
+				"SHORTHAUL",
+				"LONGHAUL"
+			],
+			"is-read-only": false,
+			"description": [
+				"The valid options for reach of the optical cable."
+			]
+		},
+		"_6Bt3QO6qEeCjNNLZCc6mew": {
+			"id": "AprStatus",
+			"uml-id": "_6Bt3QO6qEeCjNNLZCc6mew",
+			"enum": [
+				"ON",
+				"OFF"
+			],
+			"is-read-only": false,
+			"description": [
+				"The enumeration of the options for the Automatic Power Reduction Status."
+			]
+		},
+		"_FLzNQO6vEeCjNNLZCc6mew": {
+			"id": "OTSn_TtpProblemList",
+			"uml-id": "_FLzNQO6vEeCjNNLZCc6mew",
+			"enum": [
+				"BDI_P",
+				"BDI_O",
+				"BDI",
+				"TIM",
+				"LOS_P",
+				"LOS_O",
+				"LOS"
+			],
+			"is-read-only": false,
+			"description": [
+				"The valid list of problems for the entity."
+			]
+		},
+		"_NAElYO6wEeCjNNLZCc6mew": {
+			"id": "OTUk_CtpAdaptation",
+			"uml-id": "_NAElYO6wEeCjNNLZCc6mew",
+			"enum": [
+				"REGULAR",
+				"NONE",
+				"VENDOR_SPECIFIC",
+				"FUNCTIONALLY_STANDARDIZED"
+			],
+			"is-read-only": false,
+			"description": [
+				"The adaptation options for OTUk_ConnectionTermationPoints."
+			]
+		},
+		"_wgRHcO6wEeCjNNLZCc6mew": {
+			"id": "OTUk_CtpKBitRate",
+			"uml-id": "_wgRHcO6wEeCjNNLZCc6mew",
+			"enum": [
+				"2.5_G",
+				"10_G",
+				"40_G",
+				"100_G"
+			],
+			"is-read-only": false,
+			"description": [
+				"Provides an enumeration with the meaning of each  k  value."
+			]
+		},
+		"_6Y_gEO6wEeCjNNLZCc6mew": {
+			"id": "OTUk_CtpProblemList",
+			"uml-id": "_6Y_gEO6wEeCjNNLZCc6mew",
+			"enum": [
+				"LOF",
+				"AIS",
+				"LOM"
+			],
+			"is-read-only": false,
+			"description": [
+				"The valid list of problems for the entity."
+			]
+		},
+		"_xHNWMO6xEeCjNNLZCc6mew": {
+			"id": "OTUk_TtpProblemList",
+			"uml-id": "_xHNWMO6xEeCjNNLZCc6mew",
+			"enum": [
+				"TIM",
+				"DEG",
+				"BDI",
+				"SSF"
+			],
+			"is-read-only": false,
+			"description": [
+				"The valid list of problems for the entity."
+			]
+		},
+		"_KRQ3MK8KEeG_zYhfU3oMYg": {
+			"id": "MonitoredDirection",
+			"uml-id": "_KRQ3MK8KEeG_zYhfU3oMYg",
+			"enum": [
+				"SINK",
+				"SOURCE"
+			],
+			"is-read-only": false,
+			"description": [
+				"The enumeration with the options for directionality for nonintrusive monitoring."
+			]
+		},
+		"_qBme4LuYEeGeqZLpdvU3BA": {
+			"id": "DegThrType",
+			"uml-id": "_qBme4LuYEeGeqZLpdvU3BA",
+			"enum": [
+				"PERCENTAGE",
+				"NUMBER_ERRORED_BLOCKS"
+			],
+			"is-read-only": false,
+			"description": [
+				"<p>The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer.</p>"
+			]
+		},
+		"_Parz8NwAEeGoneTbGt8X0A": {
+			"id": "LinkType",
+			"uml-id": "_Parz8NwAEeGoneTbGt8X0A",
+			"enum": [
+				"DWDM",
+				"CWDM",
+				"NO_WDM"
+			],
+			"is-read-only": false
+		},
+		"_V1TuANwAEeGoneTbGt8X0A": {
+			"id": "ApplicationIdentifierType",
+			"uml-id": "_V1TuANwAEeGoneTbGt8X0A",
+			"enum": [
+				"STANDARD",
+				"PROPRIETARY"
+			],
+			"is-read-only": false
+		},
+		"_yt7S4PzgEeG3u-aQKIiCtg": {
+			"id": "ApsChannel",
+			"uml-id": "_yt7S4PzgEeG3u-aQKIiCtg",
+			"enum": [
+				"PATH",
+				"TCM1",
+				"TCM2",
+				"TCM3",
+				"TCM4",
+				"TCM5",
+				"TCM6",
+				"SECTION"
+			],
+			"is-read-only": false
+		},
+		"_LG3yQOVVEeKyU85eduW_rA": {
+			"id": "DelayMeasurementRole",
+			"uml-id": "_LG3yQOVVEeKyU85eduW_rA",
+			"enum": [
+				"CONTROLLER",
+				"RESPONDER"
+			],
+			"is-read-only": false
+		},
+		"_7fy9sJSCEeOLxKCUIYtzCg": {
+			"id": "ResizeOperationType",
+			"uml-id": "_7fy9sJSCEeOLxKCUIYtzCg",
+			"enum": [
+				"INCREASE_BW",
+				"DECREASE_BW"
+			],
+			"is-read-only": false
+		},
+		"_Y6WUEEamEeabNPX3o7rjtw": {
+			"id": "GranularityPeriodType",
+			"uml-id": "_Y6WUEEamEeabNPX3o7rjtw",
+			"enum": [
+				"UNKNOWN",
+				"PERIOD_15MIN",
+				"PERIOD_24HOURS"
+			],
+			"is-read-only": false,
+			"description": [
+				"The enumeration with the options for granularity period of the performance data."
+			]
+		}
+	}
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-AirInterface.yin.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-AirInterface.yin.json
new file mode 100755
index 0000000..2aeb80f
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-AirInterface.yin.json
@@ -0,0 +1,45 @@
+{
+	"module": {
+		"name": "MicrowaveModel-ObjectClasses-AirInterface",
+		"MicrowaveModel-ObjectClasses-AirInterface": {
+			"MW_AirInterface_Pac": {
+				"type": "list",
+				"key": "layerProtocol",
+				"airInterfaceCapability": {
+					"name": "airInterfaceCapability",
+					"local-name": "capability",
+					"type": "container"
+				},
+				"airInterfaceConfiguration": {
+					"name": "airInterfaceConfiguration",
+					"local-name": "configuration",
+					"type": "container"
+				},
+				"airInterfaceStatus": {
+					"name": "airInterfaceStatus",
+					"local-name": "status",
+					"type": "container"
+				},
+				"airInterfaceCurrentProblems": {
+					"name": "airInterfaceCurrentProblems",
+					"local-name": "current-problems",
+					"type": "container"
+				},
+				"airInterfaceCurrentPerformance": {
+					"name": "airInterfaceCurrentPerformance",
+					"local-name": "current-performance",
+					"type": "container"
+				},
+				"airInterfaceHistoricalPerformances": {
+					"name": "airInterfaceHistoricalPerformances",
+					"local-name": "historical-performances",
+					"type": "container"
+				}
+			},
+			"CoChannelGroup": {
+				"type": "list",
+				"key": "coChannelGroupId"
+			}
+		}
+	}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-EthernetContainer.yin.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-EthernetContainer.yin.json
new file mode 100755
index 0000000..2af4d50
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-EthernetContainer.yin.json
@@ -0,0 +1,41 @@
+{
+	"module": {
+		"name": "MicrowaveModel-ObjectClasses-EthernetContainer",
+		"MicrowaveModel-ObjectClasses-EthernetContainer": {
+			"MW_EthernetContainer_Pac": {
+				"type": "list",
+				"key": "layerProtocol",
+				"ethernetContainerCapability": {
+					"name": "ethernetContainerCapability",
+					"local-name": "capability",
+					"type": "container"
+				},
+				"ethernetContainerConfiguration": {
+					"name": "ethernetContainerConfiguration",
+					"local-name": "configuration",
+					"type": "container"
+				},
+				"ethernetContainerStatus": {
+					"name": "ethernetContainerStatus",
+					"local-name": "status",
+					"type": "container"
+				},
+				"ethernetContainerCurrentProblems": {
+					"name": "ethernetContainerCurrentProblems",
+					"local-name": "current-problems",
+					"type": "container"
+				},
+				"ethernetContainerCurrentPerformance": {
+					"name": "ethernetContainerCurrentPerformance",
+					"local-name": "current-performance",
+					"type": "container"
+				},
+				"ethernetContainerHistoricalPerformances": {
+					"name": "ethernetContainerHistoricalPerformances",
+					"local-name": "historical-performances",
+					"type": "container"
+				}
+			}
+		}
+	}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-PureEthernetStructure.yin.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-PureEthernetStructure.yin.json
new file mode 100755
index 0000000..20726f8
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-PureEthernetStructure.yin.json
@@ -0,0 +1,41 @@
+{
+	"module": {
+		"name": "MicrowaveModel-ObjectClasses-PureEthernetStructure",
+		"MicrowaveModel-ObjectClasses-PureEthernetStructure": {
+			"MW_PureEthernetStructure_Pac": {
+				"type": "list",
+				"key": "layerProtocol",
+				"pureEthernetStructureCapability": {
+					"name": "pureEthernetStructureCapability",
+					"local-name": "capability",
+					"type": "container"
+				},
+				"pureEthernetStructureConfiguration": {
+					"name": "pureEthernetStructureConfiguration",
+					"local-name": "configuration",
+					"type": "container"
+				},
+				"pureEthernetStructureStatus": {
+					"name": "pureEthernetStructureStatus",
+					"local-name": "status",
+					"type": "container"
+				},
+				"pureEthernetStructureCurrentProblems": {
+					"name": "pureEthernetStructureCurrentProblems",
+					"local-name": "current-problems",
+					"type": "container"
+				},
+				"pureEthernetStructureCurrentPerformance": {
+					"name": "pureEthernetStructureCurrentPerformance",
+					"local-name": "current-performance",
+					"type": "container"
+				},
+				"pureEthernetStructureHistoricalPerformances": {
+					"name": "pureEthernetStructureHistoricalPerformances",
+					"local-name": "historical-performances",
+					"type": "container"
+				}
+			}
+		}
+	}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel.json
new file mode 100644
index 0000000..34d0503
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel.json
@@ -0,0 +1,2940 @@
+{
+	"schema-information": {
+		"MW_AirInterface_Pac": {
+			"id": "MW_AirInterface_Pac",
+			"uml-id": "__1kQ0Hf4EeW-M8kopGJqEA",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"LTP(MWPS-TTP)"
+			]
+		},
+		"airInterfaceCapability": {
+			"id": "airInterfaceCapability",
+			"uml-id": "_Dr1uMIekEeWaZYk7gpuOtw",
+			"uml-type": "ownedAttribute",
+			"type": "_-LlKoIejEeWaZYk7gpuOtw",
+			"order-number": 2,
+			"is-read-only": true
+		},
+		"airInterfaceConfiguration": {
+			"id": "airInterfaceConfiguration",
+			"uml-id": "_AEmSAIe1EeWnUdmvl3PBkw",
+			"uml-type": "ownedAttribute",
+			"type": "_KOcsUIe0EeWnUdmvl3PBkw",
+			"order-number": 3,
+			"is-read-only": false
+		},
+		"airInterfaceStatus": {
+			"id": "airInterfaceStatus",
+			"uml-id": "_Vp35cnmgEeWsUsDOj_Trdg",
+			"uml-type": "ownedAttribute",
+			"type": "_iCTioHmIEeWRAfnL3fvovg",
+			"order-number": 4,
+			"is-read-only": true
+		},
+		"airInterfaceCurrentProblems": {
+			"id": "airInterfaceCurrentProblems",
+			"uml-id": "_ZeRYInmgEeWsUsDOj_Trdg",
+			"uml-type": "ownedAttribute",
+			"type": "_UF8VcHmIEeWRAfnL3fvovg",
+			"order-number": 5,
+			"is-read-only": true
+		},
+		"airInterfaceCurrentPerformance": {
+			"id": "airInterfaceCurrentPerformance",
+			"uml-id": "_65_4M6S6EeWyu_jasKgNwA",
+			"uml-type": "ownedAttribute",
+			"type": "_CX-iIKS6EeWyu_jasKgNwA",
+			"order-number": 6,
+			"is-read-only": true
+		},
+		"airInterfaceHistoricalPerformances": {
+			"id": "airInterfaceHistoricalPerformances",
+			"uml-id": "__8icYJHfEeWKxoYCXp1XkQ",
+			"uml-type": "ownedAttribute",
+			"type": "_fChNMHmHEeWRAfnL3fvovg",
+			"order-number": 7,
+			"is-read-only": true
+		},
+		"AirInterfaceCapability": {
+			"id": "AirInterfaceCapability",
+			"uml-id": "_-LlKoIejEeWaZYk7gpuOtw",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Describes the 'analog' capabilities of modem and transmitter of the microwave device. Value ranges of attributes are not independently (e.g. min. and max. transmit power depends on modulation). Legal combinations of values are expressed in transmissionModeTypes."
+			]
+		},
+		"typeOfEquipment": {
+			"id": "typeOfEquipment",
+			"uml-id": "_gK4jMJUBEeWIaZzoaYJ6_A",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 1,
+			"is-read-only": true,
+			"description": [
+				"This parameter indicates the equipment type. Instead of uploading the complete set of capabilities, capabilities of the same equipment type could be reused. Should be unique for a combination of modem, radio and their respective firmware."
+			]
+		},
+		"txFrequencyMin": {
+			"id": "txFrequencyMin",
+			"uml-id": "_90Xe0HfcEeW-h9gN8LYm4Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 2,
+			"is-read-only": true,
+			"unit": "kHz",
+			"description": [
+				"Value of the minimum transmit frequency tunable at the air interface."
+			]
+		},
+		"txFrequencyMax": {
+			"id": "txFrequencyMax",
+			"uml-id": "_-1ztsHfcEeW-h9gN8LYm4Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 3,
+			"is-read-only": true,
+			"unit": "kHz",
+			"description": [
+				"Value of the maximum transmit frequency tunable at the air interface."
+			]
+		},
+		"rxFrequencyMin": {
+			"id": "rxFrequencyMin",
+			"uml-id": "_BLqx0HfdEeW-h9gN8LYm4Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 4,
+			"is-read-only": true,
+			"unit": "kHz",
+			"description": [
+				"Value of the minimum receive frequency tunable at the air interface."
+			]
+		},
+		"rxFrequencyMax": {
+			"id": "rxFrequencyMax",
+			"uml-id": "_CSBV4HfdEeW-h9gN8LYm4Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 5,
+			"is-read-only": true,
+			"unit": "kHz",
+			"description": [
+				"Value of the maximum receive frequency tunable at the air interface."
+			]
+		},
+		"adaptiveModulationIsAvail": {
+			"id": "adaptiveModulationIsAvail",
+			"uml-id": "_ClmuUHffEeW-h9gN8LYm4Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 6,
+			"is-read-only": true,
+			"description": [
+				"In case the device is capable of adaptive modulation, this field shall contain a 'true'."
+			]
+		},
+		"mimoIsAvail": {
+			"id": "mimoIsAvail",
+			"uml-id": "_qXBrkH2eEeWaPP5xsIT8pQ",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 7,
+			"is-read-only": true,
+			"description": [
+				"In case the device is capable of MIMO, this field shall contain a 'true'."
+			]
+		},
+		"mimoChannels": {
+			"id": "mimoChannels",
+			"uml-id": "_qysT4H2eEeWaPP5xsIT8pQ",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 8,
+			"is-read-only": true,
+			"unit": "channels",
+			"description": [
+				"Maximum number (n) of spatial multiplexing streams that can be conveyed by an n x n MIMO configuration."
+			]
+		},
+		"alicIsAvail": {
+			"id": "alicIsAvail",
+			"uml-id": "_a3HgMIL9EeWMcJAvkeTn2w",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 9,
+			"is-read-only": true,
+			"description": [
+				"In case the microwave radio is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), this field shall contain a 'true'."
+			]
+		},
+		"atpcIsAvail": {
+			"id": "atpcIsAvail",
+			"uml-id": "_iRRtgHftEeW-h9gN8LYm4Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 10,
+			"is-read-only": true,
+			"description": [
+				"In case the microwave radio is capable of ATPC, this field shall contain a 'true'."
+			]
+		},
+		"atpcRange": {
+			"id": "atpcRange",
+			"uml-id": "_ErwNYHfdEeW-h9gN8LYm4Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 11,
+			"is-read-only": true,
+			"unit": "dB",
+			"description": [
+				"Extent of the ATPC range."
+			]
+		},
+		"loopBackIsAvail": {
+			"id": "loopBackIsAvail",
+			"uml-id": "_UxjEkIMHEeWMcJAvkeTn2w",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 13,
+			"is-read-only": true,
+			"description": [
+				"In case the radio is capable of looping back header information of the air interface, this field shall contain a 'true'."
+			]
+		},
+		"maintenanceTimerRange": {
+			"id": "maintenanceTimerRange",
+			"uml-id": "_I1FYsMWZEeW3xsRKtpCLuA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 14,
+			"is-read-only": true,
+			"unit": "s",
+			"description": [
+				"Available time periods for maintenance configurations (e.g. the loop back of microwave header information) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360')."
+			]
+		},
+		"supportedChannelPlanList": {
+			"id": "supportedChannelPlanList",
+			"uml-id": "_zUKUgPXVEeW9zIqh2WHHww",
+			"uml-type": "ownedAttribute",
+			"type": "_oQf6IPXSEeW9zIqh2WHHww",
+			"order-number": 16,
+			"is-read-only": true,
+			"description": [
+				"List of channel spacing that are supported by the device."
+			]
+		},
+		"AirInterfaceConfiguration": {
+			"id": "AirInterfaceConfiguration",
+			"uml-id": "_KOcsUIe0EeWnUdmvl3PBkw",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Configuration of the radio link."
+			]
+		},
+		"airInterfaceName": {
+			"id": "airInterfaceName",
+			"uml-id": "_XMDggIL5EeWMcJAvkeTn2w",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 1,
+			"is-read-only": false,
+			"description": [
+				"Operator specific microwave link ID (often used for coding area, type of element and sequential number)."
+			]
+		},
+		"radioSignalID": {
+			"id": "radioSignalID",
+			"uml-id": "_QY9KoHf5EeW-M8kopGJqEA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 2,
+			"is-read-only": false,
+			"description": [
+				"The value zero might be used to make the microwave to disable the link ID check."
+			]
+		},
+		"txFrequency": {
+			"id": "txFrequency",
+			"uml-id": "_UNE8gHf5EeW-M8kopGJqEA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 3,
+			"is-read-only": false,
+			"unit": "kHz",
+			"description": [
+				"Center frequency of the transmit channel. The values to be configured have to exactly match the values listed in the international agreement referenced in channelPlanID. In case of automated selection of the transmit frequency this field shall describe the lowest center frequency selectable."
+			]
+		},
+		"rxFrequency": {
+			"id": "rxFrequency",
+			"uml-id": "_W7ayEHf5EeW-M8kopGJqEA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 4,
+			"is-read-only": false,
+			"unit": "kHz",
+			"description": [
+				"Center frequency of the receive channel."
+			]
+		},
+		"txChannelBandwidth": {
+			"id": "txChannelBandwidth",
+			"uml-id": "_bhAdIHf5EeW-M8kopGJqEA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 5,
+			"is-read-only": false,
+			"unit": "kHz",
+			"description": [
+				"Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"
+			]
+		},
+		"rxChannelBandwidth": {
+			"id": "rxChannelBandwidth",
+			"uml-id": "_eKIbgHf5EeW-M8kopGJqEA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 6,
+			"is-read-only": false,
+			"unit": "kHz",
+			"description": [
+				"Bandwidth of the receive channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"
+			]
+		},
+		"polarization": {
+			"id": "polarization",
+			"uml-id": "_bVebEI99EeWFluv9KLLl5A",
+			"uml-type": "ownedAttribute",
+			"type": "_e85NsI99EeWFluv9KLLl5A",
+			"order-number": 7,
+			"is-read-only": false,
+			"description": [
+				"Allows documenting the polarization of the air interface."
+			]
+		},
+		"powerIsOn": {
+			"id": "powerIsOn",
+			"uml-id": "_p4eR8Hf5EeW-M8kopGJqEA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 8,
+			"is-read-only": false,
+			"description": [
+				"Power ON. Activation of the entire radio in a split mount configuration shall be expressed as a 'true'."
+			]
+		},
+		"transmitterIsOn": {
+			"id": "transmitterIsOn",
+			"uml-id": "_uYVvgHf5EeW-M8kopGJqEA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 9,
+			"is-read-only": false,
+			"description": [
+				"Activation of the transmitter inside the radio shall be expressed as a 'true'."
+			]
+		},
+		"receiverIsOn": {
+			"id": "receiverIsOn",
+			"uml-id": "_q_XcwEgnEeathrAE0htMiA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 10,
+			"is-read-only": false,
+			"description": [
+				"Maintenance Feature"
+			]
+		},
+		"txPower": {
+			"id": "txPower",
+			"uml-id": "_ZEXmIHf6EeW-M8kopGJqEA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 11,
+			"is-read-only": false,
+			"unit": "dBm",
+			"description": [
+				"Transmit power to be configured on the microwave link. Signed Byte is required. The actually operated transmit power might be lower depending on adaptive modulation and ATPC."
+			]
+		},
+		"adaptiveModulationIsOn": {
+			"id": "adaptiveModulationIsOn",
+			"uml-id": "_0jhfYHf5EeW-M8kopGJqEA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 12,
+			"is-read-only": false,
+			"description": [
+				"Adaptive Modulation. Activation of adaptive modulation shall be expressed as a 'true'."
+			]
+		},
+		"modulationMin": {
+			"id": "modulationMin",
+			"uml-id": "_dM_BUHf6EeW-M8kopGJqEA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
+			"order-number": 13,
+			"is-read-only": false,
+			"unit": "symbols",
+			"description": [
+				"Minimum modulation to be configured (in case adaptive modulation is not used, this value represents also the fixed modulation). The modulation scheme shall be described by the number of symbols (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."
+			]
+		},
+		"modulationMax": {
+			"id": "modulationMax",
+			"uml-id": "_gAHQQHf6EeW-M8kopGJqEA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
+			"order-number": 14,
+			"is-read-only": false,
+			"unit": "symbols",
+			"description": [
+				"Maximum modulation to be configured. The value of this field is only relevant, if Adaptive Modulation has been activated. The modulation scheme shall be described by the number of symbols (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."
+			]
+		},
+		"xpicIsOn": {
+			"id": "xpicIsOn",
+			"uml-id": "_4hi0IHf5EeW-M8kopGJqEA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 15,
+			"is-read-only": false,
+			"description": [
+				"Activation of Cross Polarization Interference Cancelation shall be expressed as a 'true'. In case XPIC is not available for the current combination of channel bandwidth and modulation or the hardware in general, this parameter shall always be set to 'false'."
+			]
+		},
+		"mimoIsOn": {
+			"id": "mimoIsOn",
+			"uml-id": "_7t4fIH2dEeWaPP5xsIT8pQ",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 16,
+			"is-read-only": false,
+			"description": [
+				"Activation of Multiple Input Multiple Output (MIMO) shall be expressed as a 'true'."
+			]
+		},
+		"alicIsOn": {
+			"id": "alicIsOn",
+			"uml-id": "_FmWHMHf6EeW-M8kopGJqEA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 17,
+			"is-read-only": false,
+			"description": [
+				"Activation of Adjacent Link Interference Cancelation (ALIC) shall be expressed as a 'true'."
+			]
+		},
+		"atpcIsOn": {
+			"id": "atpcIsOn",
+			"uml-id": "_9Hz0oHf5EeW-M8kopGJqEA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 18,
+			"is-read-only": false,
+			"description": [
+				"ATPC. Activation of Automated Transmit Power Control shall be expressed as a 'true'."
+			]
+		},
+		"atpcThreshUpper": {
+			"id": "atpcThreshUpper",
+			"uml-id": "_pR7yMHgAEeW-M8kopGJqEA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
+			"order-number": 19,
+			"is-read-only": false,
+			"unit": "dBm",
+			"description": [
+				"If the receive level is higher than the upper threshold value, the transmitter is notified to decrease transmit power."
+			]
+		},
+		"atpcThreshLower": {
+			"id": "atpcThreshLower",
+			"uml-id": "_sIlPMHgAEeW-M8kopGJqEA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
+			"order-number": 20,
+			"is-read-only": false,
+			"unit": "dBm",
+			"description": [
+				"If the receive level is lower than the lower threshold value, the transmitter is notified to increase transmit power."
+			]
+		},
+		"autoFreqSelectIsOn": {
+			"id": "autoFreqSelectIsOn",
+			"uml-id": "_dG5VAIL-EeWMcJAvkeTn2w",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 21,
+			"is-read-only": false,
+			"description": [
+				"Activation of automatically selecting the transmit frequency in unlicensed bands shall be expressed as a 'true'."
+			]
+		},
+		"autoFreqSelectRange": {
+			"id": "autoFreqSelectRange",
+			"uml-id": "_yH9XMIMCEeWMcJAvkeTn2w",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 22,
+			"is-read-only": false,
+			"unit": "channels",
+			"description": [
+				"Number of transmit channels (starting at the center frequency defined in txFrequency and with channel bandwidth according to txChannelBandwidth) that define the range within the transmit frequency can automatically been chosen."
+			]
+		},
+		"modulationIsOn": {
+			"id": "modulationIsOn",
+			"uml-id": "_kxXzwIMGEeWMcJAvkeTn2w",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 23,
+			"is-read-only": false,
+			"description": [
+				"Maintenance Feature"
+			]
+		},
+		"loopBackIsOn": {
+			"id": "loopBackIsOn",
+			"uml-id": "_PyRvsHf6EeW-M8kopGJqEA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 26,
+			"is-read-only": false,
+			"description": [
+				"Maintenance Feature"
+			]
+		},
+		"maintenanceTimer": {
+			"id": "maintenanceTimer",
+			"uml-id": "_7-oTwCd5EeaJA6AVLNrv_w",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 27,
+			"is-read-only": false,
+			"unit": "s",
+			"description": [
+				"Time of existence of any maintenance configuration (e.g. the loop back of microwave header information). Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange."
+			]
+		},
+		"AirInterfaceStatus": {
+			"id": "AirInterfaceStatus",
+			"uml-id": "_iCTioHmIEeWRAfnL3fvovg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Measurements of current values on the air interface and operational status of the device."
+			]
+		},
+		"txFrequencyCur": {
+			"id": "txFrequencyCur",
+			"uml-id": "_YZq7gK4tEeWXs6m-9H3KvA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 1,
+			"is-read-only": true,
+			"unit": "kHz",
+			"description": [
+				"Center frequency of the currently operated transmit channel."
+			]
+		},
+		"rxFrequencyCur": {
+			"id": "rxFrequencyCur",
+			"uml-id": "_33IdUIL-EeWMcJAvkeTn2w",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 2,
+			"is-read-only": true,
+			"unit": "kHz",
+			"description": [
+				"Center frequency of the currently operated receive channel."
+			]
+		},
+		"txLevelCur": {
+			"id": "txLevelCur",
+			"uml-id": "_L3B5wHgIEeWfutScSwFT9A",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 3,
+			"is-read-only": true,
+			"unit": "dBm",
+			"description": [
+				"Current transmit level."
+			]
+		},
+		"rxLevelCur": {
+			"id": "rxLevelCur",
+			"uml-id": "_OHN9AHizEeWfutScSwFT9A",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 4,
+			"is-read-only": true,
+			"unit": "dBm",
+			"description": [
+				"Current receive level."
+			]
+		},
+		"modulationCur": {
+			"id": "modulationCur",
+			"uml-id": "_RBMa0HizEeWfutScSwFT9A",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
+			"order-number": 5,
+			"is-read-only": true,
+			"unit": "symbols",
+			"description": [
+				"Currently operated modulation on transmit path. The modulation scheme shall be described by the number of symbols (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."
+			]
+		},
+		"informationRateCur": {
+			"id": "informationRateCur",
+			"uml-id": "_UYyBsHizEeWfutScSwFT9A",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 6,
+			"is-read-only": true,
+			"unit": "%",
+			"description": [
+				"Information rate of the currently operated coding scheme."
+			]
+		},
+		"xpdCur": {
+			"id": "xpdCur",
+			"uml-id": "_Z7NvgHizEeWfutScSwFT9A",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 8,
+			"is-read-only": true,
+			"unit": "dB",
+			"description": [
+				"Currently measured cross polarization discrimination."
+			]
+		},
+		"rfTempCur": {
+			"id": "rfTempCur",
+			"uml-id": "_d6wuQHizEeWfutScSwFT9A",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 9,
+			"is-read-only": true,
+			"unit": "Celsius",
+			"description": [
+				"Current temperature (in degree Celsius) of the radio module inside the outdoor unit."
+			]
+		},
+		"radioPowerIsUp": {
+			"id": "radioPowerIsUp",
+			"uml-id": "_sFKXcHizEeWfutScSwFT9A",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 11,
+			"is-read-only": true,
+			"description": [
+				"If the radio unit has power and is switched on, this shall be expressed as a 'true'."
+			]
+		},
+		"linkIsUp": {
+			"id": "linkIsUp",
+			"uml-id": "_5JBPUHizEeWfutScSwFT9A",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 12,
+			"is-read-only": true,
+			"description": [
+				"If connection is established to the remote site with the same linkID, this shall be expressed as a 'true'."
+			]
+		},
+		"xpicIsUp": {
+			"id": "xpicIsUp",
+			"uml-id": "_ESRbsHi0EeWfutScSwFT9A",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 13,
+			"is-read-only": true,
+			"description": [
+				"If XPIC is currently actually working (not just configured), this shall be expressed as a 'true'."
+			]
+		},
+		"mimoIsUp": {
+			"id": "mimoIsUp",
+			"uml-id": "_DVaQwIL6EeWMcJAvkeTn2w",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 14,
+			"is-read-only": true,
+			"description": [
+				"If MIMO is currently actually working (not just configured), this shall be expressed as a 'true'."
+			]
+		},
+		"alicIsUp": {
+			"id": "alicIsUp",
+			"uml-id": "_Hte-UHi0EeWfutScSwFT9A",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 15,
+			"is-read-only": true,
+			"description": [
+				"If Adjacent Link Interference Cancelation (ALIC) is currently actually working (not just configured), this shall be expressed as a 'true'."
+			]
+		},
+		"atpcIsUp": {
+			"id": "atpcIsUp",
+			"uml-id": "_VimCgMjNEeWYRsWW_rqpgw",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 16,
+			"is-read-only": true,
+			"description": [
+				"If ATPC is currently actually working (not just configured), this shall be expressed as a 'true'."
+			]
+		},
+		"autoFreqSelectIsUp": {
+			"id": "autoFreqSelectIsUp",
+			"uml-id": "_-PXKsIL-EeWMcJAvkeTn2w",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 17,
+			"is-read-only": true,
+			"description": [
+				"If automated frequency selection is currently actually working (not just configured), this shall be expressed as a 'true'."
+			]
+		},
+		"loopBackIsUp": {
+			"id": "loopBackIsUp",
+			"uml-id": "_S9prAHi0EeWfutScSwFT9A",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 18,
+			"is-read-only": true,
+			"description": [
+				"If loop back of the air interface header is currently active (not just configured), this shall be expressed as a 'true'."
+			]
+		},
+		"localEndPointId": {
+			"id": "localEndPointId",
+			"uml-id": "_pEsgcFQHEeaCXY7nSBqs6w",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 19,
+			"is-read-only": true,
+			"description": [
+				"The value of the localEndPointId is a vendor specific identifier of the air interface, used by the node to discover a microwave radio link."
+			]
+		},
+		"remoteEndPointId": {
+			"id": "remoteEndPointId",
+			"uml-id": "_r3cU4FQHEeaCXY7nSBqs6w",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 20,
+			"is-read-only": true,
+			"description": [
+				"The value of the remoteEndPointId is a vendor specific identifier or the airinterface at the remote side, used to by the node to discover a microwave radio link."
+			]
+		},
+		"AirInterfaceCurrentProblems": {
+			"id": "AirInterfaceCurrentProblems",
+			"uml-id": "_UF8VcHmIEeWRAfnL3fvovg",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"AirInterfaceCurrentPerformance": {
+			"id": "AirInterfaceCurrentPerformance",
+			"uml-id": "_CX-iIKS6EeWyu_jasKgNwA",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Aggregated performance information of the air interface at a particular moment."
+			]
+		},
+		"AirInterfaceHistoricalPerformances": {
+			"id": "AirInterfaceHistoricalPerformances",
+			"uml-id": "_fChNMHmHEeWRAfnL3fvovg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Aggregated performance information of the air interface for a pre-defined measurement interval."
+			]
+		},
+		"CoChannelGroup": {
+			"id": "CoChannelGroup",
+			"uml-id": "_XBs2YJQrEeWOu_cDl8dd7w",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Required for configuring XPIC, MIMO and ALIC."
+			]
+		},
+		"coChannelGroupId": {
+			"id": "coChannelGroupId",
+			"uml-id": "_pIjBgEy7EeaRytIQfQ43Wg",
+			"uml-type": "ownedAttribute",
+			"type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg",
+			"order-number": 1,
+			"is-read-only": false,
+			"is-key": 1
+		},
+		"airInterfaceList": {
+			"id": "airInterfaceList",
+			"uml-id": "_tIadUCJeEeaCUo1MUtSuEg",
+			"uml-type": "ownedAttribute",
+			"type": "../OnfModel-CoreModel/CoreModel.uml#_eEpDMFX4EeOVGaP4lO41SQ",
+			"order-number": 2,
+			"is-read-only": false,
+			"description": [
+				"List of air interfaces, which are part of the co-channel (XPIC, MIMO, ALIC) group."
+			]
+		},
+		"sortOfCoChannelGroup": {
+			"id": "sortOfCoChannelGroup",
+			"uml-id": "_ZrjZcJRrEeWIaZzoaYJ6_A",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 3,
+			"is-read-only": false,
+			"description": [
+				"Type of group of air interfaces with the same transmit and receive frequency. The values shall be chosen from the following _list:'XPIC', 'MIMO', 'ALIC';"
+			]
+		},
+		"MW_AirInterfaceHsbEndPoint_Pac": {
+			"id": "MW_AirInterfaceHsbEndPoint_Pac",
+			"uml-id": "_CXKgMJRbEeWMYJZn43K_Aw",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"The EndPoint (EP) object class models the access to the FC function. Each EndPoint instance has a role (e.g., working, protection, protected, hub, spoke, leaf, root, etc.) with respect to the FC function. The association of the FC to LTPs is made via EndPoints (essentially the ports of the FC) where each EndPoint (EP) of the FC has a role in the context of the FC. The traffic forwarding between the associated End PointsEPs of the FC depends upon the type of FC and may be associated with FCSwitch object instances. In cases where there is protection conveys the protecting role of the access to the FC. The EP replaces the Protection Unit of a traditional protection model. It represents a protected (resilient/reliable) point or a protecting (unreliable working or protection) point."
+			]
+		},
+		"role": {
+			"id": "role",
+			"uml-id": "_CXKgNpRbEeWMYJZn43K_Aw",
+			"uml-type": "ownedAttribute",
+			"type": "_01_dYJReEeWxIPEwZQ_gmw",
+			"order-number": 1,
+			"is-read-only": false
+		},
+		"endpoint": {
+			"id": "endpoint",
+			"uml-id": "_dglVQLYgEeWOio-Gg6Q2sw",
+			"uml-type": "ownedAttribute",
+			"type": "../OnfModel-CoreModel/CoreModel.uml#_b_lUAFYgEeOVGaP4lO41SQ",
+			"order-number": 2,
+			"is-read-only": false,
+			"is-key": 1
+		},
+		"MW_AirInterfaceHsbFcSwitch_Pac": {
+			"id": "MW_AirInterfaceHsbFcSwitch_Pac",
+			"uml-id": "_CXNjgJRbEeWMYJZn43K_Aw",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Represents and defines a protection switch structure encapsulated in the forwarding construct. Essentially performs the function of Protection Group. Associates to 2 or more Endpoints each playing the role of a Protection Unit. One or more protection EndPoints (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) Endpoints where either protection or working can feed one or more protected Endpoint. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 ane 1:1). May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state."
+			]
+		},
+		"protType": {
+			"id": "protType",
+			"uml-id": "_CXNjiJRbEeWMYJZn43K_Aw",
+			"uml-type": "ownedAttribute",
+			"type": "_DaB5IJRgEeWxIPEwZQ_gmw",
+			"order-number": 1,
+			"is-read-only": false,
+			"description": [
+				"Indicates the protection scheme that is used for the ProtectionGroup."
+			]
+		},
+		"airInterfaceHsbConfigurationIsFaultySeverity": {
+			"id": "airInterfaceHsbConfigurationIsFaultySeverity",
+			"uml-id": "_80BlAJ2gEeWSuvrh9KcclQ",
+			"uml-type": "ownedAttribute",
+			"type": "_eIml0JH1EeWUdbnmmNiTAA",
+			"order-number": 2,
+			"is-read-only": false,
+			"description": [
+				"The level of severity of an airInterfaceHsbConfigurationIsFaulty alarm shall be chosen from an enumeration."
+			]
+		},
+		"airInterfaceHsbIsPartlyDownSeverity": {
+			"id": "airInterfaceHsbIsPartlyDownSeverity",
+			"uml-id": "_r382sJ2mEeWSuvrh9KcclQ",
+			"uml-type": "ownedAttribute",
+			"type": "_eIml0JH1EeWUdbnmmNiTAA",
+			"order-number": 3,
+			"is-read-only": false,
+			"description": [
+				"The level of severity for one link out of the HSB configuration being down shall be chosen from an enumeration."
+			]
+		},
+		"airInterfaceHsbIsDownSeverity": {
+			"id": "airInterfaceHsbIsDownSeverity",
+			"uml-id": "_sRGWgJ2mEeWSuvrh9KcclQ",
+			"uml-type": "ownedAttribute",
+			"type": "_eIml0JH1EeWUdbnmmNiTAA",
+			"order-number": 4,
+			"is-read-only": false,
+			"description": [
+				"The level of severity of the total HSB configuration being down shall be chosen from an enumeration."
+			]
+		},
+		"fcswitch": {
+			"id": "fcswitch",
+			"uml-id": "_FS83ILYhEeWOio-Gg6Q2sw",
+			"uml-type": "ownedAttribute",
+			"type": "../OnfModel-CoreModel/CoreModel.uml#_a97NQFYhEeOVGaP4lO41SQ",
+			"order-number": 5,
+			"is-read-only": false,
+			"is-key": 1
+		},
+		"MW_AirInterfaceDiversity_Pac": {
+			"id": "MW_AirInterfaceDiversity_Pac",
+			"uml-id": "_WbgFcHgFEeWfutScSwFT9A",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"LTP(MWS-CTP-xD)"
+			]
+		},
+		"airInterfaceDiversityCapability": {
+			"id": "airInterfaceDiversityCapability",
+			"uml-id": "_mQ_9YJICEeWUdbnmmNiTAA",
+			"uml-type": "ownedAttribute",
+			"type": "_vxH2wIekEeWaZYk7gpuOtw",
+			"order-number": 2,
+			"is-read-only": true
+		},
+		"airInterfaceDiversityConfiguration": {
+			"id": "airInterfaceDiversityConfiguration",
+			"uml-id": "_wXazw5ICEeWUdbnmmNiTAA",
+			"uml-type": "ownedAttribute",
+			"type": "_43RTMIe1EeWnUdmvl3PBkw",
+			"order-number": 3,
+			"is-read-only": false
+		},
+		"airInterfaceDiversityCurrentProblems": {
+			"id": "airInterfaceDiversityCurrentProblems",
+			"uml-id": "_zA4JU5ICEeWUdbnmmNiTAA",
+			"uml-type": "ownedAttribute",
+			"type": "_CAvhEHvtEeWzooKF5kx0aw",
+			"order-number": 5,
+			"is-read-only": true
+		},
+		"airInterfaceDiversityCurrentPerformance": {
+			"id": "airInterfaceDiversityCurrentPerformance",
+			"uml-id": "_XpGjA6jDEeWlgMiFXLmCIQ",
+			"uml-type": "ownedAttribute",
+			"type": "_GIsAQKjDEeWlgMiFXLmCIQ",
+			"order-number": 6,
+			"is-read-only": true
+		},
+		"airInterfaceDiversityHistoricalPerformances": {
+			"id": "airInterfaceDiversityHistoricalPerformances",
+			"uml-id": "_z8F0Y5ICEeWUdbnmmNiTAA",
+			"uml-type": "ownedAttribute",
+			"type": "_8IIu8HvsEeWzooKF5kx0aw",
+			"order-number": 7,
+			"is-read-only": true
+		},
+		"AirInterfaceDiversityCapability": {
+			"id": "AirInterfaceDiversityCapability",
+			"uml-id": "_vxH2wIekEeWaZYk7gpuOtw",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Describes the capabilities in implementing different types of air interface diversity."
+			]
+		},
+		"availableKindsOfDiversity": {
+			"id": "availableKindsOfDiversity",
+			"uml-id": "_luAGENyVEeW-SfXlFFFI0Q",
+			"uml-type": "ownedAttribute",
+			"type": "_pTliINyUEeW-SfXlFFFI0Q",
+			"order-number": 1,
+			"is-read-only": true,
+			"description": [
+				"Available types of diversity to be listed."
+			]
+		},
+		"AirInterfaceDiversityConfiguration": {
+			"id": "AirInterfaceDiversityConfiguration",
+			"uml-id": "_43RTMIe1EeWnUdmvl3PBkw",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"airInterfaceDiversity": {
+			"id": "airInterfaceDiversity",
+			"uml-id": "_hynTIHi_EeWfutScSwFT9A",
+			"uml-type": "ownedAttribute",
+			"type": "_pTliINyUEeW-SfXlFFFI0Q",
+			"order-number": 1,
+			"is-read-only": false,
+			"description": [
+				"Type of air interface diversity configured at the link."
+			]
+		},
+		"airInterfaceLtpList": {
+			"id": "airInterfaceLtpList",
+			"uml-id": "_xRMKgNyXEeW-SfXlFFFI0Q",
+			"uml-type": "ownedAttribute",
+			"type": "../OnfModel-CoreModel/CoreModel.uml#_eEpDMFX4EeOVGaP4lO41SQ",
+			"order-number": 2,
+			"is-read-only": false,
+			"description": [
+				"_multiplicity:2-ThisAirInterfaceDiversity::AirInterfaceDiversityConfiguration::airInterfaceDiversity::diversityType::numberOfAirInterfacesMax"
+			]
+		},
+		"AirInterfaceDiversityStatus": {
+			"id": "AirInterfaceDiversityStatus",
+			"uml-id": "_-O9RgHvsEeWzooKF5kx0aw",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"snirCur": {
+			"id": "snirCur",
+			"uml-id": "_B7G0AEzvEeaRytIQfQ43Wg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 1,
+			"is-read-only": true,
+			"unit": "dB",
+			"description": [
+				"Currently measured signal to (noise+interference) ratio of the combined signals."
+			]
+		},
+		"airInterfaceDiversityStatus": {
+			"id": "airInterfaceDiversityStatus",
+			"uml-id": "_EKZYcJOXEeWz-6sqLzUedw",
+			"uml-type": "ownedAttribute",
+			"type": "_DUJs8JOXEeWz-6sqLzUedw",
+			"order-number": 2,
+			"is-read-only": true,
+			"description": [
+				"Status of the air interface bundle."
+			]
+		},
+		"AirInterfaceDiversityCurrentProblems": {
+			"id": "AirInterfaceDiversityCurrentProblems",
+			"uml-id": "_CAvhEHvtEeWzooKF5kx0aw",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"AirInterfaceDiversityCurrentPerformance": {
+			"id": "AirInterfaceDiversityCurrentPerformance",
+			"uml-id": "_GIsAQKjDEeWlgMiFXLmCIQ",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Aggregated performance information of the air interface diversity configuration at a particular moment."
+			]
+		},
+		"AirInterfaceDiversityHistoricalPerformances": {
+			"id": "AirInterfaceDiversityHistoricalPerformances",
+			"uml-id": "_8IIu8HvsEeWzooKF5kx0aw",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Aggregated performance information of the air interface diversity configuration for a pre-defined measurement interval."
+			]
+		},
+		"MW_PureEthernetStructure_Pac": {
+			"id": "MW_PureEthernetStructure_Pac",
+			"uml-id": "__OTQ0UaeEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"The pureEthernetStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting Ethernet traffic only."
+			]
+		},
+		"pureEthernetStructureCapability": {
+			"id": "pureEthernetStructureCapability",
+			"uml-id": "_dJcm0VAfEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "__OTQ4EaeEeas2eqI3oKNtg",
+			"order-number": 2,
+			"is-read-only": true
+		},
+		"pureEthernetStructureConfiguration": {
+			"id": "pureEthernetStructureConfiguration",
+			"uml-id": "_kHaeglAfEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "__OTQ8UaeEeas2eqI3oKNtg",
+			"order-number": 3,
+			"is-read-only": false
+		},
+		"pureEthernetStructureStatus": {
+			"id": "pureEthernetStructureStatus",
+			"uml-id": "_lsNSEFAfEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "__OTQ_UaeEeas2eqI3oKNtg",
+			"order-number": 4,
+			"is-read-only": true
+		},
+		"pureEthernetStructureCurrentProblems": {
+			"id": "pureEthernetStructureCurrentProblems",
+			"uml-id": "_nCtK8lAfEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "__OTRCUaeEeas2eqI3oKNtg",
+			"order-number": 5,
+			"is-read-only": true
+		},
+		"pureEthernetStructureCurrentPerformance": {
+			"id": "pureEthernetStructureCurrentPerformance",
+			"uml-id": "_ocuR4VAfEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "__OTRD0aeEeas2eqI3oKNtg",
+			"order-number": 6,
+			"is-read-only": true
+		},
+		"pureEthernetStructureHistoricalPerformances": {
+			"id": "pureEthernetStructureHistoricalPerformances",
+			"uml-id": "_Xb6U4FAiEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "__OTRE0aeEeas2eqI3oKNtg",
+			"order-number": 7,
+			"is-read-only": true
+		},
+		"PureEthernetStructureCapability": {
+			"id": "PureEthernetStructureCapability",
+			"uml-id": "__OTQ4EaeEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"No TDM transport."
+			]
+		},
+		"PureEthernetStructureConfiguration": {
+			"id": "PureEthernetStructureConfiguration",
+			"uml-id": "__OTQ8UaeEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"PureEthernetStructureStatus": {
+			"id": "PureEthernetStructureStatus",
+			"uml-id": "__OTQ_UaeEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"PureEthernetStructureCurrentProblems": {
+			"id": "PureEthernetStructureCurrentProblems",
+			"uml-id": "__OTRCUaeEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"PureEthernetStructureCurrentPerformance": {
+			"id": "PureEthernetStructureCurrentPerformance",
+			"uml-id": "__OTRD0aeEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment."
+			]
+		},
+		"PureEthernetStructureHistoricalPerformances": {
+			"id": "PureEthernetStructureHistoricalPerformances",
+			"uml-id": "__OTRE0aeEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval."
+			]
+		},
+		"MW_HybridMwStructure_Pac": {
+			"id": "MW_HybridMwStructure_Pac",
+			"uml-id": "_Bzxo0UagEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"The HybridMwStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM and Ethernet traffic."
+			]
+		},
+		"hybridMwStructureCapability": {
+			"id": "hybridMwStructureCapability",
+			"uml-id": "_2nQhIFAjEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "_Bzxo4EagEeas2eqI3oKNtg",
+			"order-number": 2,
+			"is-read-only": true
+		},
+		"hybridMwStructureConfiguration": {
+			"id": "hybridMwStructureConfiguration",
+			"uml-id": "_3-63oVAjEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "_Bzxo8UagEeas2eqI3oKNtg",
+			"order-number": 3,
+			"is-read-only": false
+		},
+		"hybridMwStructureStatus": {
+			"id": "hybridMwStructureStatus",
+			"uml-id": "_5fWvolAjEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "_Bzxo_UagEeas2eqI3oKNtg",
+			"order-number": 4,
+			"is-read-only": true
+		},
+		"hybridMwStructureCurrentProblems": {
+			"id": "hybridMwStructureCurrentProblems",
+			"uml-id": "_6ZbLMlAjEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "_BzxpCUagEeas2eqI3oKNtg",
+			"order-number": 5,
+			"is-read-only": true
+		},
+		"hybridMwStructureCurrentPerformance": {
+			"id": "hybridMwStructureCurrentPerformance",
+			"uml-id": "_7FMFAFAjEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "_BzxpD0agEeas2eqI3oKNtg",
+			"order-number": 6,
+			"is-read-only": true
+		},
+		"hybridMwStructureHistoricalPerformances": {
+			"id": "hybridMwStructureHistoricalPerformances",
+			"uml-id": "_8CWQ0VAjEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "_BzxpE0agEeas2eqI3oKNtg",
+			"order-number": 7,
+			"is-read-only": true
+		},
+		"HybridMwStructureCapability": {
+			"id": "HybridMwStructureCapability",
+			"uml-id": "_Bzxo4EagEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"TDM transport is available."
+			]
+		},
+		"structureId": {
+			"id": "structureId",
+			"uml-id": "_Bzxo5EagEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg",
+			"order-number": 1,
+			"is-read-only": true,
+			"is-key": 1,
+			"description": [
+				"Identifies the Structure for bundling and container."
+			]
+		},
+		"supportedTdmStructureTypesList": {
+			"id": "supportedTdmStructureTypesList",
+			"uml-id": "_tA-uQEduEeax2rWez10Siw",
+			"uml-type": "ownedAttribute",
+			"type": "_jRAQsEdoEeax2rWez10Siw",
+			"order-number": 2,
+			"is-read-only": true,
+			"description": [
+				"Lists the TDM frame types that are supported."
+			]
+		},
+		"HybridMwStructureConfiguration": {
+			"id": "HybridMwStructureConfiguration",
+			"uml-id": "_Bzxo8UagEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"structureType": {
+			"id": "structureType",
+			"uml-id": "_cduh4EdvEeax2rWez10Siw",
+			"uml-type": "ownedAttribute",
+			"type": "_jRAQsEdoEeax2rWez10Siw",
+			"order-number": 1,
+			"is-read-only": false,
+			"description": [
+				"TDM frame to be applied."
+			]
+		},
+		"numberOfTdmSegmentsToBeReserved": {
+			"id": "numberOfTdmSegmentsToBeReserved",
+			"uml-id": "_Bzxo9EagEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
+			"order-number": 2,
+			"is-read-only": false,
+			"description": [
+				"Allows to configure the number of segments reserved for TDM frames of the type specified in HybridMwStructure::HybridMwStructureConfiguration::structureType"
+			]
+		},
+		"HybridMwStructureStatus": {
+			"id": "HybridMwStructureStatus",
+			"uml-id": "_Bzxo_UagEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"segmentStatusList": {
+			"id": "segmentStatusList",
+			"uml-id": "_BzxpAEagEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "_KwZVcMUCEeW3xsRKtpCLuA",
+			"order-number": 1,
+			"is-read-only": true,
+			"description": [
+				"Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1"
+			]
+		},
+		"HybridMwStructureCurrentProblems": {
+			"id": "HybridMwStructureCurrentProblems",
+			"uml-id": "_BzxpCUagEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"HybridMwStructureCurrentPerformance": {
+			"id": "HybridMwStructureCurrentPerformance",
+			"uml-id": "_BzxpD0agEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Aggregated performance information of the structure of a hybrid microwave at a particular moment."
+			]
+		},
+		"HybridMwStructureHistoricalPerformances": {
+			"id": "HybridMwStructureHistoricalPerformances",
+			"uml-id": "_BzxpE0agEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval."
+			]
+		},
+		"MW_EthernetContainer_Pac": {
+			"id": "MW_EthernetContainer_Pac",
+			"uml-id": "_4uEBgUafEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"LTP(Client)"
+			]
+		},
+		"ethernetContainerCapability": {
+			"id": "ethernetContainerCapability",
+			"uml-id": "_vWwdEVAlEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "_4uEBmEafEeas2eqI3oKNtg",
+			"order-number": 2,
+			"is-read-only": true
+		},
+		"ethernetContainerConfiguration": {
+			"id": "ethernetContainerConfiguration",
+			"uml-id": "_v8JCEFAlEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "_4uEBwUafEeas2eqI3oKNtg",
+			"order-number": 3,
+			"is-read-only": false
+		},
+		"ethernetContainerStatus": {
+			"id": "ethernetContainerStatus",
+			"uml-id": "_wvtNAVAlEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "_4uECAUafEeas2eqI3oKNtg",
+			"order-number": 4,
+			"is-read-only": true
+		},
+		"ethernetContainerCurrentProblems": {
+			"id": "ethernetContainerCurrentProblems",
+			"uml-id": "_xUWyMlAlEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "_4uECDUafEeas2eqI3oKNtg",
+			"order-number": 5,
+			"is-read-only": true
+		},
+		"ethernetContainerCurrentPerformance": {
+			"id": "ethernetContainerCurrentPerformance",
+			"uml-id": "_x7K6kFAlEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "_4uECE0afEeas2eqI3oKNtg",
+			"order-number": 6,
+			"is-read-only": true
+		},
+		"ethernetContainerHistoricalPerformances": {
+			"id": "ethernetContainerHistoricalPerformances",
+			"uml-id": "_ynDJIFAlEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "_4uECF0afEeas2eqI3oKNtg",
+			"order-number": 7,
+			"is-read-only": true
+		},
+		"EthernetContainerCapability": {
+			"id": "EthernetContainerCapability",
+			"uml-id": "_4uEBmEafEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"bundlingIsAvail": {
+			"id": "bundlingIsAvail",
+			"uml-id": "_96g-oEanEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 1,
+			"is-read-only": true,
+			"description": [
+				"This attribute has to be set on 'true', if the device allows combining resources from several air interfaces for transporting this Ethernet container."
+			]
+		},
+		"packetCompressionIsAvail": {
+			"id": "packetCompressionIsAvail",
+			"uml-id": "_4uEBp0afEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 2,
+			"is-read-only": true,
+			"description": [
+				"In case packet compression can be activated, but not configured to a certain type, packetCompressionAvail shall be set on 'true', but none of the compression level specific booleans."
+			]
+		},
+		"layer2CompressionIsAvail": {
+			"id": "layer2CompressionIsAvail",
+			"uml-id": "_4uEBqkafEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 3,
+			"is-read-only": true,
+			"description": [
+				"Packet compression on layer 2 available at the device."
+			]
+		},
+		"vlanCompressionIsAvail": {
+			"id": "vlanCompressionIsAvail",
+			"uml-id": "_4uEBrUafEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 4,
+			"is-read-only": true,
+			"description": [
+				"Packet compression on VLAN layer available at the device."
+			]
+		},
+		"qInQCompressionIsAvail": {
+			"id": "qInQCompressionIsAvail",
+			"uml-id": "_4uEBsEafEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 5,
+			"is-read-only": true,
+			"description": [
+				"Packet compression on layer of a second VLAN available at the device."
+			]
+		},
+		"mplsCompressionIsAvail": {
+			"id": "mplsCompressionIsAvail",
+			"uml-id": "_4uEBs0afEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 6,
+			"is-read-only": true,
+			"description": [
+				"Packet compression on mpls layer available at the device."
+			]
+		},
+		"ipv4CompressionIsAvail": {
+			"id": "ipv4CompressionIsAvail",
+			"uml-id": "_4uEBtkafEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 7,
+			"is-read-only": true,
+			"description": [
+				"Packet compression on layer 3 for IPv4 available at the device."
+			]
+		},
+		"ipv6CompressionIsAvail": {
+			"id": "ipv6CompressionIsAvail",
+			"uml-id": "_4uEBuUafEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 8,
+			"is-read-only": true,
+			"description": [
+				"Packet compression on layer 3 for IPv6 available at the device."
+			]
+		},
+		"layer4CompressionIsAvail": {
+			"id": "layer4CompressionIsAvail",
+			"uml-id": "_4uEBvEafEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 9,
+			"is-read-only": true,
+			"description": [
+				"Packet compression on layer 4 (TCP and UDP header) available at the device."
+			]
+		},
+		"encryptionIsAvail": {
+			"id": "encryptionIsAvail",
+			"uml-id": "_4uPM8E58EeaCk6G-lyG1OQ",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 10,
+			"is-read-only": true,
+			"description": [
+				"Shall be marked 'true', if Ethernet payload encryption is available."
+			]
+		},
+		"EthernetContainerConfiguration": {
+			"id": "EthernetContainerConfiguration",
+			"uml-id": "_4uEBwUafEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"segmentsIDList": {
+			"id": "segmentsIDList",
+			"uml-id": "_4uEBy0afEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "_Nd1F4MKuEeWwLJhHQlOGSQ",
+			"order-number": 2,
+			"is-read-only": false,
+			"description": [
+				"Lists the segments used for transporting this Ethernet container. In case EthernetContainer::ContainerCapability::bundlingIsAvail==0, all TypeDefinitions::segmentIdType::structureId must be identical in the list."
+			]
+		},
+		"packetCompressionIsOn": {
+			"id": "packetCompressionIsOn",
+			"uml-id": "_4uEB1UafEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 3,
+			"is-read-only": false,
+			"description": [
+				"In case packet compression is activated, but no type is activated, it is assumed that the device chooses the optimum."
+			]
+		},
+		"layer2CompressionIsOn": {
+			"id": "layer2CompressionIsOn",
+			"uml-id": "_4uEB2kafEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 4,
+			"is-read-only": false,
+			"description": [
+				"Packet compression on layer 2 configured at the device."
+			]
+		},
+		"vlanCompressionIsOn": {
+			"id": "vlanCompressionIsOn",
+			"uml-id": "_4uEB30afEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 5,
+			"is-read-only": false,
+			"description": [
+				"Packet compression on VLAN layer configured at the device."
+			]
+		},
+		"qInQCompressionIsOn": {
+			"id": "qInQCompressionIsOn",
+			"uml-id": "_4uEB5EafEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 6,
+			"is-read-only": false,
+			"description": [
+				"Packet compression on layer of a second VLAN configured at the device."
+			]
+		},
+		"mplsCompressionIsOn": {
+			"id": "mplsCompressionIsOn",
+			"uml-id": "_4uEB6UafEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 7,
+			"is-read-only": false,
+			"description": [
+				"Packet compression on MPLS layer configured at the device."
+			]
+		},
+		"ipv4CompressionIsOn": {
+			"id": "ipv4CompressionIsOn",
+			"uml-id": "_4uEB7kafEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 8,
+			"is-read-only": false,
+			"description": [
+				"Packet compression on layer 3 for IPv4 configured at the device."
+			]
+		},
+		"ipv6CompressionIsOn": {
+			"id": "ipv6CompressionIsOn",
+			"uml-id": "_4uEB80afEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 9,
+			"is-read-only": false,
+			"description": [
+				"Packet compression on layer 3 for IPv6 configured at the device."
+			]
+		},
+		"layer4CompressionIsOn": {
+			"id": "layer4CompressionIsOn",
+			"uml-id": "_4uEB-EafEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 10,
+			"is-read-only": false,
+			"description": [
+				"Packet compression on layer 4 (TCP and UDP header) configured at the device."
+			]
+		},
+		"encryptionIsOn": {
+			"id": "encryptionIsOn",
+			"uml-id": "_uI7bIE58EeaCk6G-lyG1OQ",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 11,
+			"is-read-only": false,
+			"description": [
+				"Activates encryption of the Ethernet payload."
+			]
+		},
+		"cryptographicKey": {
+			"id": "cryptographicKey",
+			"uml-id": "_psRpoE58EeaCk6G-lyG1OQ",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 12,
+			"is-read-only": false,
+			"description": [
+				"Key for transforming plaintext into cipher text data."
+			]
+		},
+		"EthernetContainerStatus": {
+			"id": "EthernetContainerStatus",
+			"uml-id": "_4uECAUafEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"EthernetContainerCurrentProblems": {
+			"id": "EthernetContainerCurrentProblems",
+			"uml-id": "_4uECDUafEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"EthernetContainerCurrentPerformance": {
+			"id": "EthernetContainerCurrentPerformance",
+			"uml-id": "_4uECE0afEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Aggregated performance information of the Ethernet container at a particular moment."
+			]
+		},
+		"EthernetContainerHistoricalPerformances": {
+			"id": "EthernetContainerHistoricalPerformances",
+			"uml-id": "_4uECF0afEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Aggregated performance information of the Ethernet container for a pre-defined measurement interval."
+			]
+		},
+		"MW_TdmContainer_Pac": {
+			"id": "MW_TdmContainer_Pac",
+			"uml-id": "_ecCeMUaqEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"LTP(Client)"
+			]
+		},
+		"layerProtocol": {
+			"id": "layerProtocol",
+			"uml-id": "_m_QIglpKEeax66gMnmfzpQ",
+			"uml-type": "ownedAttribute",
+			"type": "../OnfModel-CoreModel/CoreModel.uml#_gROecFYXEeOVGaP4lO41SQ",
+			"order-number": 1,
+			"is-read-only": false,
+			"is-key": 1,
+			"description": [
+				"CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"
+			]
+		},
+		"tdmContainerCapability": {
+			"id": "tdmContainerCapability",
+			"uml-id": "_-bytElAmEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "_ecCeSEaqEeas2eqI3oKNtg",
+			"order-number": 2,
+			"is-read-only": true
+		},
+		"tdmContainerConfiguration": {
+			"id": "tdmContainerConfiguration",
+			"uml-id": "__LKUglAmEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "_ecCecUaqEeas2eqI3oKNtg",
+			"order-number": 3,
+			"is-read-only": false
+		},
+		"tdmContainerStatus": {
+			"id": "tdmContainerStatus",
+			"uml-id": "__vOq4lAmEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "_ecCesUaqEeas2eqI3oKNtg",
+			"order-number": 4,
+			"is-read-only": true
+		},
+		"tdmContainerCurrentProblems": {
+			"id": "tdmContainerCurrentProblems",
+			"uml-id": "_AWdqAlAnEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "_ecCevUaqEeas2eqI3oKNtg",
+			"order-number": 5,
+			"is-read-only": true
+		},
+		"tdmContainerCurrentPerformance": {
+			"id": "tdmContainerCurrentPerformance",
+			"uml-id": "_AzXoclAnEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "_ecCew0aqEeas2eqI3oKNtg",
+			"order-number": 6,
+			"is-read-only": true
+		},
+		"tdmContainerHistoricalPerformances": {
+			"id": "tdmContainerHistoricalPerformances",
+			"uml-id": "_BXIc0lAnEea9Wek8ROfqag",
+			"uml-type": "ownedAttribute",
+			"type": "_ecCex0aqEeas2eqI3oKNtg",
+			"order-number": 7,
+			"is-read-only": true
+		},
+		"TdmContainerCapability": {
+			"id": "TdmContainerCapability",
+			"uml-id": "_ecCeSEaqEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Bundling is not available."
+			]
+		},
+		"supportedTdmContainerTypesList": {
+			"id": "supportedTdmContainerTypesList",
+			"uml-id": "_R5hG0EdwEeax2rWez10Siw",
+			"uml-type": "ownedAttribute",
+			"type": "_rgbigEdjEeax2rWez10Siw",
+			"order-number": 1,
+			"is-read-only": true,
+			"description": [
+				"Lists the TDM containers that are supported."
+			]
+		},
+		"supportedAlarms": {
+			"id": "supportedAlarms",
+			"uml-id": "_ecCeb0aqEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 92,
+			"is-read-only": true,
+			"description": [
+				"Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device."
+			]
+		},
+		"TdmContainerConfiguration": {
+			"id": "TdmContainerConfiguration",
+			"uml-id": "_ecCecUaqEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"containerID": {
+			"id": "containerID",
+			"uml-id": "_ecCeS0aqEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 1,
+			"is-read-only": false,
+			"description": [
+				"ContainterID in Netconf must be the same as EthernetPortID in OpenFlow so a connection can be made between the two items, which separately exist in the controller."
+			]
+		},
+		"containerType": {
+			"id": "containerType",
+			"uml-id": "_o_-2oEdxEeax2rWez10Siw",
+			"uml-type": "ownedAttribute",
+			"type": "_rgbigEdjEeax2rWez10Siw",
+			"order-number": 2,
+			"is-read-only": false,
+			"description": [
+				"Type of TDM container."
+			]
+		},
+		"segmentID": {
+			"id": "segmentID",
+			"uml-id": "_ecCee0aqEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "_Nd1F4MKuEeWwLJhHQlOGSQ",
+			"order-number": 3,
+			"is-read-only": false,
+			"description": [
+				"Multiplicity = 1; One segment per TDM container; Type of segment must match type of container;"
+			]
+		},
+		"problemKindSeverityList": {
+			"id": "problemKindSeverityList",
+			"uml-id": "_ecCerUaqEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "_OMPgwGz0Eeaf-__BRLM84g",
+			"order-number": 94,
+			"is-read-only": false,
+			"description": [
+				"Severity of the problem to be configured."
+			]
+		},
+		"TdmContainerStatus": {
+			"id": "TdmContainerStatus",
+			"uml-id": "_ecCesUaqEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"lastStatusChange": {
+			"id": "lastStatusChange",
+			"uml-id": "_ecCetEaqEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "../OnfModel-CoreModel/CoreModel.uml#_oGqi1lLNEeO75dO39GbF8Q",
+			"order-number": 1,
+			"is-read-only": true,
+			"description": [
+				"_format:yyyyMMddhhmmss.s[Z|{+|-}HHMm]; yyyy='0000'..'9999' year; MM='01'..'12' month; dd='01'..'31' day; hh='00'..'23' hour; mm='00'..'59' minute; ss='00'..'59' second; s='.0'..'.9'tenth of second (set to '.0' if EMS or NE cannot support this granularity); Z='Z' indicates UTC (rather than local time); {+|-}='+' or '-' delta from UTC; HH='00'..'23' time zone difference in hours; Mm='00'..'59' time zone difference in minutes."
+			]
+		},
+		"TdmContainerCurrentProblems": {
+			"id": "TdmContainerCurrentProblems",
+			"uml-id": "_ecCevUaqEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false
+		},
+		"currentProblemList": {
+			"id": "currentProblemList",
+			"uml-id": "_ecCewEaqEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "__h1n4MXpEeWJ6KZuc0h_vw",
+			"order-number": 1,
+			"is-read-only": true
+		},
+		"TdmContainerCurrentPerformance": {
+			"id": "TdmContainerCurrentPerformance",
+			"uml-id": "_ecCew0aqEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Aggregated performance information of the TDM container at a particular moment."
+			]
+		},
+		"currentPerformanceDataList": {
+			"id": "currentPerformanceDataList",
+			"uml-id": "_ecCexkaqEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "_pA5AQGz6Eeaf-__BRLM84g",
+			"order-number": 1,
+			"is-read-only": true,
+			"description": [
+				"At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."
+			]
+		},
+		"TdmContainerHistoricalPerformances": {
+			"id": "TdmContainerHistoricalPerformances",
+			"uml-id": "_ecCex0aqEeas2eqI3oKNtg",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"Aggregated performance information of the TDM container for a pre-defined measurement interval."
+			]
+		},
+		"historicalPerformanceDataList": {
+			"id": "historicalPerformanceDataList",
+			"uml-id": "_ecCeykaqEeas2eqI3oKNtg",
+			"uml-type": "ownedAttribute",
+			"type": "_pTaToGz6Eeaf-__BRLM84g",
+			"order-number": 1,
+			"is-read-only": true
+		},
+		"MwCurrentProblem": {
+			"id": "MwCurrentProblem",
+			"uml-id": "_LKRM4JNQEeWuAeXkr703BA",
+			"uml-type": "uml:Class",
+			"is-read-only": false,
+			"description": [
+				"According to ITU-T G.874.1?"
+			]
+		},
+		"sequenceNumber": {
+			"id": "sequenceNumber",
+			"uml-id": "_YadH4CJbEeaHpPYk5sscIg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 1,
+			"is-read-only": true,
+			"is-key": 1,
+			"description": [
+				"Unique sequence number of the current problem object."
+			]
+		},
+		"timeStamp": {
+			"id": "timeStamp",
+			"uml-id": "_lB4EQJN1EeWuAeXkr703BA",
+			"uml-type": "ownedAttribute",
+			"type": "../OnfModel-CoreModel/CoreModel.uml#_oGqi1lLNEeO75dO39GbF8Q",
+			"order-number": 2,
+			"is-read-only": true,
+			"description": [
+				"_format:yyyyMMddhhmmss.s[Z|{+|-}HHMm]; yyyy='0000'..'9999' year; MM='01'..'12' month; dd='01'..'31' day; hh='00'..'23' hour; mm='00'..'59' minute; ss='00'..'59' second; s='.0'..'.9'tenth of second (set to '.0' if EMS or NE cannot support this granularity); Z='Z' indicates UTC (rather than local time); {+|-}='+' or '-' delta from UTC; HH='00'..'23' time zone difference in hours; Mm='00'..'59' time zone difference in minutes."
+			]
+		},
+		"channelPlanType": {
+			"id": "channelPlanType",
+			"uml-id": "_oQf6IPXSEeW9zIqh2WHHww",
+			"uml-type": "uml:DataType"
+		},
+		"supportedChannelPlan": {
+			"id": "supportedChannelPlan",
+			"uml-id": "_8gpNIHfcEeW-h9gN8LYm4Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 1,
+			"is-read-only": true,
+			"is-key": 1,
+			"description": [
+				"Unique name (e.g. CEPT/ERC/REC (01) 04 Annex 5) of an international agreement that describe allocations of frequency channels, to which this air interface complies. Corresponding channel plans to be delivered by the hardware vendor and to be stored by the operator in the controller/application attached database."
+			]
+		},
+		"duplexDistanceIsVariable": {
+			"id": "duplexDistanceIsVariable",
+			"uml-id": "_OPxkQK42EeWxIavXll_b0A",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 2,
+			"is-read-only": true,
+			"description": [
+				"To be set on 'true', if the distance between transmitted and received frequency is variable."
+			]
+		},
+		"duplexDistance": {
+			"id": "duplexDistance",
+			"uml-id": "_BEr_wIMEEeWMcJAvkeTn2w",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 3,
+			"is-read-only": true,
+			"unit": "kHz",
+			"description": [
+				"Distance between transmitted and received frequency."
+			]
+		},
+		"autoFreqSelectIsAvail": {
+			"id": "autoFreqSelectIsAvail",
+			"uml-id": "_te6XMIL8EeWMcJAvkeTn2w",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 4,
+			"is-read-only": true,
+			"description": [
+				"In case the microwave radio is capable of automatically selecting the transmit frequency in unlicensed bands, this field shall contain a 'true'."
+			]
+		},
+		"transmissionModeList": {
+			"id": "transmissionModeList",
+			"uml-id": "_nwbvcPXREeW9zIqh2WHHww",
+			"uml-type": "ownedAttribute",
+			"type": "_zG34sPXQEeW9zIqh2WHHww",
+			"order-number": 5,
+			"is-read-only": true
+		},
+		"transmissionModeType": {
+			"id": "transmissionModeType",
+			"uml-id": "_zG34sPXQEeW9zIqh2WHHww",
+			"uml-type": "uml:DataType"
+		},
+		"transmissionModeId": {
+			"id": "transmissionModeId",
+			"uml-id": "_afdYoNumEeWHIeLurhMv0A",
+			"uml-type": "ownedAttribute",
+			"type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg",
+			"order-number": 1,
+			"is-read-only": true,
+			"is-key": 1,
+			"description": [
+				"Indentifies the transmissionMode for internal reference."
+			]
+		},
+		"channelBandwidth": {
+			"id": "channelBandwidth",
+			"uml-id": "_FteJEHfdEeW-h9gN8LYm4Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 2,
+			"is-read-only": true,
+			"unit": "kHz",
+			"description": [
+				"Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"
+			]
+		},
+		"modulationScheme": {
+			"id": "modulationScheme",
+			"uml-id": "_G4H-UHfdEeW-h9gN8LYm4Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
+			"order-number": 3,
+			"is-read-only": true,
+			"unit": "symbols",
+			"description": [
+				"Modulation scheme, which is base to the other characteristics described in the same transmissionModeType data type. The modulation scheme shall be described by the number of symbols (e.g. BPSK->'2' or 256QAM->'256')."
+			]
+		},
+		"informationRate": {
+			"id": "informationRate",
+			"uml-id": "_jE7-EHf4EeW-h9gN8LYm4Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 4,
+			"is-read-only": true,
+			"unit": "%",
+			"description": [
+				"Information rate of the coding scheme in %."
+			]
+		},
+		"txPowerMin": {
+			"id": "txPowerMin",
+			"uml-id": "_I3nJ0HfdEeW-h9gN8LYm4Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 5,
+			"is-read-only": true,
+			"unit": "dBm",
+			"description": [
+				"Value of the minimum transmit power the modem can operate in dBm."
+			]
+		},
+		"txPowerMax": {
+			"id": "txPowerMax",
+			"uml-id": "_KB7A0HfdEeW-h9gN8LYm4Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 6,
+			"is-read-only": true,
+			"unit": "dBm",
+			"description": [
+				"Value of the maximum transmit power the modem can operate in dBm."
+			]
+		},
+		"rxThreshold": {
+			"id": "rxThreshold",
+			"uml-id": "_LCr6QHfdEeW-h9gN8LYm4Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
+			"order-number": 7,
+			"is-read-only": true,
+			"unit": "dBm",
+			"description": [
+				"Value of the receive level required to decode the received signal with a Bit Error Rate of 1e-6 or less."
+			]
+		},
+		"amUpshiftLevel": {
+			"id": "amUpshiftLevel",
+			"uml-id": "_MGguwHfdEeW-h9gN8LYm4Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 8,
+			"is-read-only": true,
+			"unit": "dBm",
+			"description": [
+				"Value of the receive level that has to be exceeded to shift into a higher modulation scheme."
+			]
+		},
+		"amDownshiftLevel": {
+			"id": "amDownshiftLevel",
+			"uml-id": "_NIvAwHfdEeW-h9gN8LYm4Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 9,
+			"is-read-only": true,
+			"unit": "dBm",
+			"description": [
+				"Value of the receive level that has to be exceeded for not shifting into a lower modulation scheme."
+			]
+		},
+		"xpicIsAvail": {
+			"id": "xpicIsAvail",
+			"uml-id": "_QHd9kHfvEeW-h9gN8LYm4Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 10,
+			"is-read-only": true,
+			"description": [
+				"In case the Air Interface Port is capable of XPIC, this field shall contain a 'true'."
+			]
+		},
+		"airInterfaceProblemSeverityType": {
+			"id": "airInterfaceProblemSeverityType",
+			"uml-id": "_ZKdWgGnuEeaZwMagYjVCHQ",
+			"uml-type": "uml:DataType"
+		},
+		"airInterfaceCurrentProblemType": {
+			"id": "airInterfaceCurrentProblemType",
+			"uml-id": "_umuZUMXjEeW3xsRKtpCLuA",
+			"uml-type": "uml:DataType"
+		},
+		"airInterfacePerformanceType": {
+			"id": "airInterfacePerformanceType",
+			"uml-id": "_OvFYwEQbEea3g-FxAUaYRg",
+			"uml-type": "uml:DataType",
+			"description": [
+				"Consolidated performance information of the air interface."
+			]
+		},
+		"es": {
+			"id": "es",
+			"uml-id": "_DbVzpUQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 1,
+			"is-read-only": true,
+			"unit": "s",
+			"description": [
+				"Number of errored seconds."
+			]
+		},
+		"ses": {
+			"id": "ses",
+			"uml-id": "_DbVzqUQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 2,
+			"is-read-only": true,
+			"unit": "s",
+			"description": [
+				"Number of severely errored seconds."
+			]
+		},
+		"cses": {
+			"id": "cses",
+			"uml-id": "_DbVzrUQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 3,
+			"is-read-only": true,
+			"unit": "s",
+			"description": [
+				"Number of consecutive severely errored seconds."
+			]
+		},
+		"unavailability": {
+			"id": "unavailability",
+			"uml-id": "_DbVzsUQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 4,
+			"is-read-only": true,
+			"unit": "s",
+			"description": [
+				"Total time of unavailability in seconds."
+			]
+		},
+		"txLevelMin": {
+			"id": "txLevelMin",
+			"uml-id": "_DbVztUQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 5,
+			"is-read-only": true,
+			"unit": "dBm",
+			"description": [
+				"Minimum transmit power. Signed integers are required."
+			]
+		},
+		"txLevelMax": {
+			"id": "txLevelMax",
+			"uml-id": "_DbVzuUQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 6,
+			"is-read-only": true,
+			"unit": "dBm",
+			"description": [
+				"Maximum transmit power. Signed integers are required."
+			]
+		},
+		"txLevelAvg": {
+			"id": "txLevelAvg",
+			"uml-id": "_DbVzvUQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 7,
+			"is-read-only": true,
+			"unit": "dBm",
+			"description": [
+				"Averaged transmit power. Signed integers are required."
+			]
+		},
+		"rxLevelMin": {
+			"id": "rxLevelMin",
+			"uml-id": "_DbVzwUQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 8,
+			"is-read-only": true,
+			"unit": "dBm",
+			"description": [
+				"Minimum receive level. Signed integers are required."
+			]
+		},
+		"rxLevelMax": {
+			"id": "rxLevelMax",
+			"uml-id": "_DbVzxUQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 9,
+			"is-read-only": true,
+			"unit": "dBm",
+			"description": [
+				"Maximum receive level. Signed integers are required."
+			]
+		},
+		"rxLevelAvg": {
+			"id": "rxLevelAvg",
+			"uml-id": "_DbVzyUQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 10,
+			"is-read-only": true,
+			"unit": "dBm",
+			"description": [
+				"Averaged receive level. Signed integers are required."
+			]
+		},
+		"time2Symbols": {
+			"id": "time2Symbols",
+			"uml-id": "_DbVzzUQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 11,
+			"is-read-only": true,
+			"unit": "s"
+		},
+		"time4SymbolsS": {
+			"id": "time4SymbolsS",
+			"uml-id": "_DbVz0kQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 12,
+			"is-read-only": true,
+			"unit": "s",
+			"description": [
+				"Sum of all seconds the transmitter operated in e.g. 4QAM strong."
+			]
+		},
+		"time4Symbols": {
+			"id": "time4Symbols",
+			"uml-id": "_DbVz2EQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 13,
+			"is-read-only": true,
+			"unit": "s"
+		},
+		"time8Symbols": {
+			"id": "time8Symbols",
+			"uml-id": "_DbVz3UQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 14,
+			"is-read-only": true,
+			"unit": "s"
+		},
+		"time16SymbolsS": {
+			"id": "time16SymbolsS",
+			"uml-id": "_DbVz4kQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 15,
+			"is-read-only": true,
+			"unit": "s"
+		},
+		"time16Symbols": {
+			"id": "time16Symbols",
+			"uml-id": "_DbVz50QbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 16,
+			"is-read-only": true,
+			"unit": "s"
+		},
+		"time32Symbols": {
+			"id": "time32Symbols",
+			"uml-id": "_DbVz7EQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 17,
+			"is-read-only": true,
+			"unit": "s"
+		},
+		"time64Symbols": {
+			"id": "time64Symbols",
+			"uml-id": "_DbVz8UQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 18,
+			"is-read-only": true,
+			"unit": "s"
+		},
+		"time128Symbols": {
+			"id": "time128Symbols",
+			"uml-id": "_DbVz9kQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 19,
+			"is-read-only": true,
+			"unit": "s"
+		},
+		"time256Symbols": {
+			"id": "time256Symbols",
+			"uml-id": "_DbVz-0QbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 20,
+			"is-read-only": true,
+			"unit": "s"
+		},
+		"time512Symbols": {
+			"id": "time512Symbols",
+			"uml-id": "_DbV0AEQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 21,
+			"is-read-only": true,
+			"unit": "s"
+		},
+		"time512SymbolsL": {
+			"id": "time512SymbolsL",
+			"uml-id": "_DbV0BUQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 22,
+			"is-read-only": true,
+			"unit": "s"
+		},
+		"time1024Symbols": {
+			"id": "time1024Symbols",
+			"uml-id": "_DbV0CkQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 23,
+			"is-read-only": true,
+			"unit": "s"
+		},
+		"time1024SymbolsL": {
+			"id": "time1024SymbolsL",
+			"uml-id": "_DbV0D0QbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 24,
+			"is-read-only": true,
+			"unit": "s"
+		},
+		"time2048Symbols": {
+			"id": "time2048Symbols",
+			"uml-id": "_DbV0FEQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 25,
+			"is-read-only": true,
+			"unit": "s"
+		},
+		"time2048SymbolsL": {
+			"id": "time2048SymbolsL",
+			"uml-id": "_DbV0GUQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 26,
+			"is-read-only": true,
+			"unit": "s"
+		},
+		"time4096Symbols": {
+			"id": "time4096Symbols",
+			"uml-id": "_DbV0HkQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 27,
+			"is-read-only": true,
+			"unit": "s"
+		},
+		"time4096SymbolsL": {
+			"id": "time4096SymbolsL",
+			"uml-id": "_DbV0I0QbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 28,
+			"is-read-only": true,
+			"unit": "s"
+		},
+		"time8192Symbols": {
+			"id": "time8192Symbols",
+			"uml-id": "_DbV0KEQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 29,
+			"is-read-only": true,
+			"unit": "s"
+		},
+		"time8192SymbolsL": {
+			"id": "time8192SymbolsL",
+			"uml-id": "_DbV0LUQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 30,
+			"is-read-only": true,
+			"unit": "s"
+		},
+		"xpdMin": {
+			"id": "xpdMin",
+			"uml-id": "_DbV0PkQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 34,
+			"is-read-only": true,
+			"unit": "dB",
+			"description": [
+				"Minimum cross polarization discrimination."
+			]
+		},
+		"xpdMax": {
+			"id": "xpdMax",
+			"uml-id": "_DbV0QkQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 35,
+			"is-read-only": true,
+			"unit": "dB",
+			"description": [
+				"Maximum cross polarization discrimination."
+			]
+		},
+		"xpdAvg": {
+			"id": "xpdAvg",
+			"uml-id": "_DbV0RkQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 36,
+			"is-read-only": true,
+			"unit": "dB",
+			"description": [
+				"Averaged cross polarization discrimination."
+			]
+		},
+		"rfTempMin": {
+			"id": "rfTempMin",
+			"uml-id": "_DbV0SkQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 37,
+			"is-read-only": true,
+			"unit": "C",
+			"description": [
+				"Lowest temperature (in degree Celsius) of the radio module inside the outdoor unit."
+			]
+		},
+		"rfTempMax": {
+			"id": "rfTempMax",
+			"uml-id": "_DbV0TkQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 38,
+			"is-read-only": true,
+			"unit": "C",
+			"description": [
+				"Highest temperature (in degree Celsius) of the radio module inside the outdoor unit."
+			]
+		},
+		"rfTempAvg": {
+			"id": "rfTempAvg",
+			"uml-id": "_DbV0UkQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 39,
+			"is-read-only": true,
+			"unit": "C",
+			"description": [
+				"Averaged temperature (in degree Celsius) of the radio module inside the outdoor unit."
+			]
+		},
+		"defectBlocksSum": {
+			"id": "defectBlocksSum",
+			"uml-id": "_DbV0VkQbEea3g-FxAUaYRg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
+			"order-number": 40,
+			"is-read-only": true,
+			"unit": "blocks",
+			"description": [
+				"Total number of blocks that were defect after receiving and could not be corrected by the FEC."
+			]
+		},
+		"airInterfaceCurrentPerformanceType": {
+			"id": "airInterfaceCurrentPerformanceType",
+			"uml-id": "_pQ_y4GoHEeaZwMagYjVCHQ",
+			"uml-type": "uml:DataType",
+			"description": [
+				"Turns performance information into current performance information by inheriting from OTN_CurrentData."
+			]
+		},
+		"airInterfaceHistoricalPerformanceType": {
+			"id": "airInterfaceHistoricalPerformanceType",
+			"uml-id": "_t18kwGoHEeaZwMagYjVCHQ",
+			"uml-type": "uml:DataType",
+			"description": [
+				"Turns performance information into historical performance information by inheriting from OTN_HistoryData."
+			]
+		},
+		"diversityType": {
+			"id": "diversityType",
+			"uml-id": "_pTliINyUEeW-SfXlFFFI0Q",
+			"uml-type": "uml:DataType"
+		},
+		"diversityName": {
+			"id": "diversityName",
+			"uml-id": "_uYhboNyUEeW-SfXlFFFI0Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 1,
+			"is-read-only": true,
+			"is-key": 1,
+			"description": [
+				"Names to be chosen from the following list: 'spaceDiversity', 'frequencyDiversity'"
+			]
+		},
+		"numberOfAirInterfacesMax": {
+			"id": "numberOfAirInterfacesMax",
+			"uml-id": "_wKDDoNyUEeW-SfXlFFFI0Q",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 2,
+			"is-read-only": true,
+			"unit": "air interfaces",
+			"description": [
+				"Maximum number of air interfaces that could be part of this kind of diversity."
+			]
+		},
+		"airInterfaceDiversityProblemSeverityType": {
+			"id": "airInterfaceDiversityProblemSeverityType",
+			"uml-id": "_2kMRYGzzEeaf-__BRLM84g",
+			"uml-type": "uml:DataType"
+		},
+		"airInterfaceDiversityCurrentProblemType": {
+			"id": "airInterfaceDiversityCurrentProblemType",
+			"uml-id": "_z1XWgMXlEeWJ6KZuc0h_vw",
+			"uml-type": "uml:DataType"
+		},
+		"airInterfaceDiversityPerformanceType": {
+			"id": "airInterfaceDiversityPerformanceType",
+			"uml-id": "_EH3QgEQdEea3g-FxAUaYRg",
+			"uml-type": "uml:DataType",
+			"description": [
+				"Consolidated performance information of the air interface diversity group."
+			]
+		},
+		"snirMin": {
+			"id": "snirMin",
+			"uml-id": "_nG-NsEzvEeaRytIQfQ43Wg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 1,
+			"is-read-only": true,
+			"unit": "dB",
+			"description": [
+				"Minimum signal to (noise+interference) ratio of the combined signals."
+			]
+		},
+		"snirMax": {
+			"id": "snirMax",
+			"uml-id": "_n_OEUEzvEeaRytIQfQ43Wg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 2,
+			"is-read-only": true,
+			"unit": "dB",
+			"description": [
+				"Maximum signal to (noise+interference) ratio of the combined signals."
+			]
+		},
+		"snirAvg": {
+			"id": "snirAvg",
+			"uml-id": "_oU3kMEzvEeaRytIQfQ43Wg",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 3,
+			"is-read-only": true,
+			"unit": "dB",
+			"description": [
+				"Average signal to (noise+interference) ratio of the combined signals."
+			]
+		},
+		"airInterfaceDiversityCurrentPerformanceType": {
+			"id": "airInterfaceDiversityCurrentPerformanceType",
+			"uml-id": "_n4wTgGz6Eeaf-__BRLM84g",
+			"uml-type": "uml:DataType",
+			"description": [
+				"Turns performance information into current performance information by inheriting from OTN_CurrentData."
+			]
+		},
+		"airInterfaceDiversityHistoricalPerformanceType": {
+			"id": "airInterfaceDiversityHistoricalPerformanceType",
+			"uml-id": "_pG0pIGz6Eeaf-__BRLM84g",
+			"uml-type": "uml:DataType",
+			"description": [
+				"Turns performance information into historical performance information by inheriting from OTN_HistoryData."
+			]
+		},
+		"tdmStructureType": {
+			"id": "tdmStructureType",
+			"uml-id": "_jRAQsEdoEeax2rWez10Siw",
+			"uml-type": "uml:DataType"
+		},
+		"tdmStructureName": {
+			"id": "tdmStructureName",
+			"uml-id": "_1bJF4EdoEeax2rWez10Siw",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 1,
+			"is-read-only": true,
+			"is-key": 1,
+			"description": [
+				"Names to be chosen from the following list: 'e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"
+			]
+		},
+		"tdmSegmentSize": {
+			"id": "tdmSegmentSize",
+			"uml-id": "_hPq1oEdpEeax2rWez10Siw",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 2,
+			"is-read-only": true,
+			"unit": "kbit/s",
+			"description": [
+				"Size of the TDM segment in kbit/s. Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;"
+			]
+		},
+		"maxNumberOfSegmentsReservable": {
+			"id": "maxNumberOfSegmentsReservable",
+			"uml-id": "_EJnsgEdpEeax2rWez10Siw",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
+			"order-number": 3,
+			"is-read-only": true,
+			"unit": "segments",
+			"description": [
+				"Device specific maximum number of segments (not depending on current air interface configuration) that can be reserved for this type of segment on a single air interface."
+			]
+		},
+		"structureProblemSeverityType": {
+			"id": "structureProblemSeverityType",
+			"uml-id": "_LPgp4Gz0Eeaf-__BRLM84g",
+			"uml-type": "uml:DataType"
+		},
+		"structureCurrentProblemType": {
+			"id": "structureCurrentProblemType",
+			"uml-id": "_UC0gAMXnEeWJ6KZuc0h_vw",
+			"uml-type": "uml:DataType"
+		},
+		"structurePerformanceType": {
+			"id": "structurePerformanceType",
+			"uml-id": "_kzEicEQdEea3g-FxAUaYRg",
+			"uml-type": "uml:DataType",
+			"description": [
+				"Consolidated performance information of the Structure."
+			]
+		},
+		"structureCurrentPerformanceType": {
+			"id": "structureCurrentPerformanceType",
+			"uml-id": "_o7jNQGz6Eeaf-__BRLM84g",
+			"uml-type": "uml:DataType",
+			"description": [
+				"Turns performance information into current performance information by inheriting from OTN_CurrentData."
+			]
+		},
+		"structureHistoricalPerformanceType": {
+			"id": "structureHistoricalPerformanceType",
+			"uml-id": "_pNAJoGz6Eeaf-__BRLM84g",
+			"uml-type": "uml:DataType",
+			"description": [
+				"Turns performance information into historical performance information by inheriting from OTN_HistoryData."
+			]
+		},
+		"tdmContainerType": {
+			"id": "tdmContainerType",
+			"uml-id": "_rgbigEdjEeax2rWez10Siw",
+			"uml-type": "uml:DataType"
+		},
+		"tdmContainerName": {
+			"id": "tdmContainerName",
+			"uml-id": "_rgbigkdjEeax2rWez10Siw",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 1,
+			"is-read-only": true,
+			"is-key": 1,
+			"description": [
+				"Names to be chosen from the following list: 'e1','t1','j1','e3','t3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"
+			]
+		},
+		"tdmContainerSize": {
+			"id": "tdmContainerSize",
+			"uml-id": "_rgbihEdjEeax2rWez10Siw",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 2,
+			"is-read-only": true,
+			"unit": "kbit/s",
+			"description": [
+				"Capacity required for transporting this type of container (in kbit/s). Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;"
+			]
+		},
+		"segmentIDType": {
+			"id": "segmentIDType",
+			"uml-id": "_Nd1F4MKuEeWwLJhHQlOGSQ",
+			"uml-type": "uml:DataType",
+			"description": [
+				"Combinations of structureId and segmentId must be unique inside the device to assure that every resource is used just once."
+			]
+		},
+		"structureIdRef": {
+			"id": "structureIdRef",
+			"uml-id": "_N4GKkMKvEeWwLJhHQlOGSQ",
+			"uml-type": "ownedAttribute",
+			"type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg",
+			"order-number": 1,
+			"is-read-only": false,
+			"is-key": 1
+		},
+		"segmentIdRef": {
+			"id": "segmentIdRef",
+			"uml-id": "_nVubgMKvEeWwLJhHQlOGSQ",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
+			"order-number": 2,
+			"is-read-only": false,
+			"is-key": 2
+		},
+		"segmentStatusType": {
+			"id": "segmentStatusType",
+			"uml-id": "_KwZVcMUCEeW3xsRKtpCLuA",
+			"uml-type": "uml:DataType"
+		},
+		"segmentStatusTypeId": {
+			"id": "segmentStatusTypeId",
+			"uml-id": "_7JBAYOLbEeWM2vUDE3Xqhw",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
+			"order-number": 1,
+			"is-read-only": true,
+			"is-key": 1
+		},
+		"segmentIsReservedForTdm": {
+			"id": "segmentIsReservedForTdm",
+			"uml-id": "__1DMwMUCEeW3xsRKtpCLuA",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+			"order-number": 2,
+			"is-read-only": true,
+			"description": [
+				"The number of segments, which is configured by Structure::StructureConfiguration::tdmReservedNumberOfSegements, has to be reserved for TDM. Starting from the lowest index value, these segments have to be marked with a 'true' in segmentIsReservedForTdm."
+			]
+		},
+		"operationalStatus": {
+			"id": "operationalStatus",
+			"uml-id": "_ZA94EMUCEeW3xsRKtpCLuA",
+			"uml-type": "ownedAttribute",
+			"type": "../OnfModel-CoreModel/CoreModel.uml#_lNclkLEtEeSZUdYfPSdgew",
+			"order-number": 3,
+			"is-read-only": true,
+			"description": [
+				"Current operational status of each segment."
+			]
+		},
+		"containerProblemSeverityType": {
+			"id": "containerProblemSeverityType",
+			"uml-id": "_OMPgwGz0Eeaf-__BRLM84g",
+			"uml-type": "uml:DataType"
+		},
+		"problemKindName": {
+			"id": "problemKindName",
+			"uml-id": "_OMQH0Gz0Eeaf-__BRLM84g",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 1,
+			"is-read-only": false,
+			"is-key": 1,
+			"description": [
+				"Name of the alarm according to Container::ContainerCapability::supportedAlarms"
+			]
+		},
+		"problemKindSeverity": {
+			"id": "problemKindSeverity",
+			"uml-id": "_OMQH02z0Eeaf-__BRLM84g",
+			"uml-type": "ownedAttribute",
+			"type": "_eIml0JH1EeWUdbnmmNiTAA",
+			"order-number": 2,
+			"is-read-only": false,
+			"description": [
+				"Severity of this type of alarm."
+			]
+		},
+		"containerCurrentProblemType": {
+			"id": "containerCurrentProblemType",
+			"uml-id": "__h1n4MXpEeWJ6KZuc0h_vw",
+			"uml-type": "uml:DataType"
+		},
+		"problemName": {
+			"id": "problemName",
+			"uml-id": "__h1n4cXpEeWJ6KZuc0h_vw",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+			"order-number": 1,
+			"is-read-only": true,
+			"description": [
+				"Name of the alarm according to Container::ContainerCapability::supportedAlarms"
+			]
+		},
+		"problemSeverity": {
+			"id": "problemSeverity",
+			"uml-id": "__h1n48XpEeWJ6KZuc0h_vw",
+			"uml-type": "ownedAttribute",
+			"type": "_eIml0JH1EeWUdbnmmNiTAA",
+			"order-number": 2,
+			"is-read-only": false,
+			"description": [
+				"Severity of the alarm."
+			]
+		},
+		"containerPerformanceType": {
+			"id": "containerPerformanceType",
+			"uml-id": "_U9tW0EQeEea3g-FxAUaYRg",
+			"uml-type": "uml:DataType",
+			"description": [
+				"Consolidated performance information of the Container."
+			]
+		},
+		"txEthernetBytesMaxS": {
+			"id": "txEthernetBytesMaxS",
+			"uml-id": "_MaHB8H1IEeWHjMaYlqnBcw",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 1,
+			"is-read-only": true,
+			"unit": "Bytes/s",
+			"description": [
+				"Required data volume = 31bit"
+			]
+		},
+		"txEthernetBytesMaxM": {
+			"id": "txEthernetBytesMaxM",
+			"uml-id": "_M3NNoH1IEeWHjMaYlqnBcw",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#ELong",
+			"order-number": 2,
+			"is-read-only": true,
+			"unit": "Bytes/min",
+			"description": [
+				"Required data volume = 37bit"
+			]
+		},
+		"txEthernetBytesSum": {
+			"id": "txEthernetBytesSum",
+			"uml-id": "_NWtNEH1IEeWHjMaYlqnBcw",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#ELong",
+			"order-number": 3,
+			"is-read-only": true,
+			"unit": "Bytes",
+			"description": [
+				"Required data volume = 47bit"
+			]
+		},
+		"timePeriod": {
+			"id": "timePeriod",
+			"uml-id": "_Nyme4H1IEeWHjMaYlqnBcw",
+			"uml-type": "ownedAttribute",
+			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+			"order-number": 4,
+			"is-read-only": true,
+			"unit": "s",
+			"description": [
+				"Required data volume = 17bit"
+			]
+		},
+		"containerCurrentPerformanceType": {
+			"id": "containerCurrentPerformanceType",
+			"uml-id": "_pA5AQGz6Eeaf-__BRLM84g",
+			"uml-type": "uml:DataType",
+			"description": [
+				"Turns performance information into current performance information by inheriting from OTN_CurrentData."
+			]
+		},
+		"containerHistoricalPerformanceType": {
+			"id": "containerHistoricalPerformanceType",
+			"uml-id": "_pTaToGz6Eeaf-__BRLM84g",
+			"uml-type": "uml:DataType",
+			"description": [
+				"Turns performance information into historical performance information by inheriting from OTN_HistoryData."
+			]
+		},
+		"performanceData": {
+			"id": "performanceData",
+			"uml-id": "_i5STYGz7Eeaf-__BRLM84g",
+			"uml-type": "ownedAttribute",
+			"type": "_U9tW0EQeEea3g-FxAUaYRg",
+			"order-number": 1,
+			"is-read-only": true
+		},
+		"_eIml0JH1EeWUdbnmmNiTAA": {
+			"id": "severityType",
+			"uml-id": "_eIml0JH1EeWUdbnmmNiTAA",
+			"enum": [
+				"non-alarmed",
+				"warning",
+				"minor",
+				"major",
+				"critical"
+			],
+			"is-read-only": false,
+			"description": [
+				"According to ITU-T M.3160"
+			]
+		},
+		"_e85NsI99EeWFluv9KLLl5A": {
+			"id": "polarizationType",
+			"uml-id": "_e85NsI99EeWFluv9KLLl5A",
+			"enum": [
+				"not-specified",
+				"horizontal",
+				"vertical"
+			],
+			"is-read-only": false
+		},
+		"_DaB5IJRgEeWxIPEwZQ_gmw": {
+			"id": "protectionType",
+			"uml-id": "_DaB5IJRgEeWxIPEwZQ_gmw",
+			"enum": [
+				"hsb"
+			],
+			"is-read-only": false
+		},
+		"_01_dYJReEeWxIPEwZQ_gmw": {
+			"id": "roleType",
+			"uml-id": "_01_dYJReEeWxIPEwZQ_gmw",
+			"enum": [
+				"working",
+				"protection",
+				"protected"
+			],
+			"is-read-only": false
+		},
+		"_DUJs8JOXEeWz-6sqLzUedw": {
+			"id": "airInterfaceDiversityStatusType",
+			"uml-id": "_DUJs8JOXEeWz-6sqLzUedw",
+			"enum": [
+				"groupDown",
+				"notAllAiActive",
+				"allAiActive"
+			],
+			"is-read-only": false
+		}
+	}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/core-model.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/core-model.schema-information.json
new file mode 100644
index 0000000..fd957f3
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/core-model.schema-information.json
@@ -0,0 +1,2296 @@
+{
+ "schema-information": {
+  "forwarding-domain": {
+   "id": "forwarding-domain",
+   "uml-id": "_oGql-FLNEeO75dO39GbF8Q",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "The ForwardingDomain (FD) class models the topological component that represents the opportunity to enable forwarding (of specific transport characteristic information at one or more protocol layers) between points represented by the LTP in the model. The FD object provides the context for and constrains the formation, adjustment and removal of FCs and hence offers the potential to enable forwarding. The LTPs available are those defined at the boundary of the FD. At a lower level of recursion an FD could represent a fabric (switch matrix) in a Network Element (NE). An NE can encompass more than one switch matrix and hence more than one FD. The FD representing a switch matrix can be further partitioned. The FD corresponds to a subnetwork [ITU-T G.800], FlowDomain [TMF 612] and a MultiLayerSubNetwork (MLSN) [TMF 612]. As in the TMF concept of MLSN and unlike the ITU-T concet of subnetwork model the FD can support more than one layer-protocol."
+   ],
+   "uml-name": "ForwardingDomain"
+  },
+  "layer-protocol-name": {
+   "id": "layer-protocol-name",
+   "uml-id": "_P-Hp8MD4EeSoNOrYOfaryg",
+   "uml-type": "uml:DataType",
+   "description": [
+    "Provides a controlled list of layer protocol names and indicates the naming authority. Note that it is expected that attributes will be added to this structure to convey the naming authority name, the name of the layer protocol using a human readable string and any particular standard reference. Layer protocol names include: - Layer 1 (L1): OTU, ODU - Layer 2 (L2): Carrier Grade Ethernet (ETY, ETH), MPLS-TP (MT)"
+   ],
+   "uml-name": "LayerProtocolName"
+  },
+  "lower-level-fd": {
+   "id": "lower-level-fd",
+   "uml-id": "_oGqmBVLNEeO75dO39GbF8Q",
+   "uml-type": "ownedAttribute",
+   "type": "_oGql-FLNEeO75dO39GbF8Q",
+   "order-number": 2,
+   "is-read-only": false,
+   "description": [
+    "The FD class supports a recursive aggregation relationship (HigherLevelFdEncompassesLowerLevelFds) such that the internal construction of an FD can be exposed as multiple lower level FDs and associated Links (partitioning). The aggregated FDs and Links form an interconnected topology that provides and describes the capability of the aggregating FD. Note that the model actually represents aggregation of lower level FDs into higher level FDs as views rather than FD partition, and supports multiple views. Aggregation allow reallocation of capacity from lower level FDs to different higher level FDs as if the network is reorganized (as the association is aggregation not composition)."
+   ],
+   "uml-name": "_lowerLevelFd"
+  },
+  "fc": {
+   "id": "fc",
+   "uml-id": "_oGql_1LNEeO75dO39GbF8Q",
+   "uml-type": "ownedAttribute",
+   "type": "_oGqmC1LNEeO75dO39GbF8Q",
+   "order-number": 3,
+   "is-read-only": false,
+   "description": [
+    "An FD aggregares one or more FCs. A aggregated FC connects LTPs that bound the FD."
+   ],
+   "uml-name": "_fc"
+  },
+  "ltp": {
+   "id": "ltp",
+   "uml-id": "_8SXNrD-HEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "_eEpDMFX4EeOVGaP4lO41SQ",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "_ltp"
+  },
+  "lower-level-link": {
+   "id": "lower-level-link",
+   "uml-id": "_dm_ngBiQEeSh8KVgZCMyDw",
+   "uml-type": "ownedAttribute",
+   "type": "_oGqnjVLNEeO75dO39GbF8Q",
+   "order-number": 5,
+   "is-read-only": false,
+   "description": [
+    "The FD encompasses Links that interconnect lower level FDs and collect links that are wholly within the bounds of the FD. See also _lowerLevelFd."
+   ],
+   "uml-name": "_lowerLevelLink"
+  },
+  "forwarding-construct": {
+   "id": "forwarding-construct",
+   "uml-id": "_oGqmC1LNEeO75dO39GbF8Q",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "The ForwardingConstruct (FC) class models enabled constrained potential for forwarding between two or more LTPs at a particular specific layerProtocol. Like the LTP, the FC supports any transport protocol including all circuit and packet forms. It is used to effect forwarding of transport characteristic (layer protocol) information. An FC can be in only one FD. The ForwardingConstruct is a Forwarding entity. At a low level of the recursion, a FC represents a cross-connection within an NE. It may also represent a fragment of a cross-connection under certain circumstances. The FC object can be used to represent many different structures including point-to-point (P2P), point-to-multipoint (P2MP), rooted-multipoint (RMP) and multipoint-to-multipoint (MP2MP) bridge and selector structures for linear, ring or mesh protection schemes."
+   ],
+   "uml-name": "ForwardingConstruct"
+  },
+  "lower-level-fc": {
+   "id": "lower-level-fc",
+   "uml-id": "_i7UzkFYfEeOVGaP4lO41SQ",
+   "uml-type": "ownedAttribute",
+   "type": "_oGqmC1LNEeO75dO39GbF8Q",
+   "order-number": 2,
+   "is-read-only": false,
+   "description": [
+    "An FC object supports a recursive aggregation relationship such that the internal construction of an FC can be exposed as multiple lower level FC objects (partitioning). Aggregation is used as for the FD to allow changes in hierarchy. FC aggregation reflects FD aggregation. The FC represents a Cross-Connection in an NE. The Cross-Connection in an NE is not necessarily the lowest level of FC partitioning."
+   ],
+   "uml-name": "_lowerLevelFc"
+  },
+  "fc-route": {
+   "id": "fc-route",
+   "uml-id": "_A8SFwFYgEeOVGaP4lO41SQ",
+   "uml-type": "ownedAttribute",
+   "type": "_9UVusFYfEeOVGaP4lO41SQ",
+   "order-number": 3,
+   "is-read-only": false,
+   "description": [
+    "An FC object can have zero or more routes, each of which is defined as a list of lower level FC objects describing the flow across the network."
+   ],
+   "uml-name": "_fcRoute"
+  },
+  "fc-port": {
+   "id": "fc-port",
+   "uml-id": "_b_lUAFYgEeOVGaP4lO41SQ",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "The association of the FC to LTPs is made via FcPorts. The FcPort class models the access to the FC function. The traffic forwarding between the associated FcPorts of the FC depends upon the type of FC and may be associated with FcSwitch object instances. In cases where there is resilience, the FcPort may convey the resilience role of the access to the FC. It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point. The FcPort replaces the Protection Unit of a traditional protection model. The ForwardingConstruct can be considered as a component and the FcPort as a Port on that component."
+   ],
+   "uml-name": "FcPort"
+  },
+  "fc-switch": {
+   "id": "fc-switch",
+   "uml-id": "_a97NQFYhEeOVGaP4lO41SQ",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "The FcSwitch class models the switched forwarding of traffic (traffic flow) between FcPorts and is present where there is protection functionality in the FC. If an FC exposes protection (having two or more FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects to represent the alternative flow choices visible at the edge of the FC. The FC switch represents and defines a protection switch structure encapsulated in the FC. Essentially performs one of the functions of the Protection Group in a traditional model. It associates to 2 or more FcPorts each playing the role of a Protection Unit. One or more protection, i.e. standby/backup, FcPorts provide protection for one or more working (i.e. regular/main/preferred) FcPorts where either protection or working can feed one or more protected FcPort. The switch may be used in revertive or non-revertive (symmetric) mode. When in revertive mode it may define a waitToRestore time. It may be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 and 1:1). It may be locked out (prevented from switching), force switched or manual switched. It will indicate switch state and change of state. The switch can be switched away from all sources such that it becomes open and hence two coordinated switches can both feed the same LTP so long as at least one of the two is switched away from all sources (is  open ). The ability for a Switch to be  high impedance  allows bidirectional ForwardingConstructs to be overlaid on the same bidirectional LTP where the appropriate control is enabled to prevent signal conflict. This ability allows multiple alternate routes to be present that otherwise would be in conflict."
+   ],
+   "uml-name": "FcSwitch"
+  },
+  "forwarding-direction": {
+   "id": "forwarding-direction",
+   "uml-id": "_9_yMUEDAEeWQeOKbNUpP9A",
+   "uml-type": "ownedAttribute",
+   "type": "_dV67AEC8EeWxhL2B6Peg6A",
+   "order-number": 6,
+   "is-read-only": false,
+   "description": [
+    "The directionality of the ForwardingConstruct. Is applicable to simple ForwardingConstructs where all FcPorts are BIDIRECTIONAL (the ForwardingConstruct will be BIDIRECTIONAL) or UNIDIRECTIONAL (the ForwardingConstruct will be UNIDIRECTIONAL). Is not present in more complex cases."
+   ],
+   "uml-name": "forwardingDirection",
+   "controlType": [
+    "bidirectional",
+    "unidirectional",
+    "undefined-or-unknown"
+   ]
+  },
+  "is-protection-lock-out": {
+   "id": "is-protection-lock-out",
+   "uml-id": "_ls-wcMN9EeWwZ527PhfFSA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 6,
+   "is-read-only": false,
+   "description": [
+    "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of. This overrides all other protection control states including forced. If the item is locked out then it cannot be used under any circumstances. Note: Only relevant when part of a protection scheme."
+   ],
+   "uml-name": "isProtectionLockOut",
+   "controlType": "checkbox"
+  },
+  "service-priority": {
+   "id": "service-priority",
+   "uml-id": "_3co20MOCEeWwZ527PhfFSA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 8,
+   "is-read-only": false,
+   "description": [
+    "Relevant where  service  FCs are competing for server resources. Used to determine which signal FC is allocated resource. The priority of the  service  with respect to other  services . Lower numeric value means higher priority. Covers cases such as preemptable."
+   ],
+   "uml-name": "servicePriority",
+   "controlType": "number"
+  },
+  "supported-link": {
+   "id": "supported-link",
+   "uml-id": "_0172EFHnEeaDuo8VlVeg_g",
+   "uml-type": "ownedAttribute",
+   "type": "_oGqnjVLNEeO75dO39GbF8Q",
+   "order-number": 9,
+   "is-read-only": false,
+   "description": [
+    "An FC that spans between LTPs that terminate the LayerProtocol usually supports one or more links in the client layer."
+   ],
+   "uml-name": "_supportedLink"
+  },
+  "network-element": {
+   "id": "network-element",
+   "uml-id": "_oGqnr1LNEeO75dO39GbF8Q",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "The Network Element (NE) class represents a network element (traditional NE) in the data plane. A data plane network element is essentially a consolidation of capabilities that can be viewed and controlled through a  single  management-control port. In the direct interface from an SDN controller to a network element in the data plane, the NetworkElement object defines the scope of control for the resources within the network element For example internal transfer of user information between the external terminations (ports of the NE), encapsulation, multiplexing/demultiplexing, and OAM functions, etc. The NetworkElement provides the scope of the naming space for identifying objects representing the resources within the data plane network element. NE is really a product bundling or some view of management scope, management access, session. The NE is not directly part of topology but brings meaning to the FD context and the LTP context (and hence the links)."
+   ],
+   "uml-name": "NetworkElement"
+  },
+  "fd": {
+   "id": "fd",
+   "uml-id": "_oGqnslLNEeO75dO39GbF8Q",
+   "uml-type": "ownedAttribute",
+   "type": "_oGql-FLNEeO75dO39GbF8Q",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "Represents the FD that is completely within the boundary of the NE. At a low level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs) and the FD representing the switch matrix can be further partitioned. Where an FD is referenced by the NeEncompassesFd association, any FDs that it encompasses (i.e., that are associated with it by HigherLevelFdEncompassesLowerLevelFds), must also be encompassed by the NE and hence must have the NeEncompassesFd association."
+   ],
+   "uml-name": "_fd"
+  },
+  "role": {
+   "id": "role",
+   "uml-id": "_Ykm6QFeGEeOVGaP4lO41SQ",
+   "uml-type": "ownedAttribute",
+   "type": "_DUU_sGZ_EeWrX_JIGzXlSg",
+   "order-number": 2,
+   "is-read-only": false,
+   "description": [
+    "Each FcPort of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."
+   ],
+   "uml-name": "role"
+  },
+  "fc-port-direction": {
+   "id": "fc-port-direction",
+   "uml-id": "_1HbEgEDAEeWQeOKbNUpP9A",
+   "uml-type": "ownedAttribute",
+   "type": "_2WpC8EC7EeWxhL2B6Peg6A",
+   "order-number": 3,
+   "is-read-only": false,
+   "description": [
+    "The orientation of defined flow at the FcPort."
+   ],
+   "uml-name": "fcPortDirection",
+   "controlType": [
+    "bidirectional",
+    "input",
+    "output",
+    "unidentified-or-unknown"
+   ]
+  },
+  "selection-priority": {
+   "id": "selection-priority",
+   "uml-id": "_02awkMOEEeWwZ527PhfFSA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 5,
+   "is-read-only": false,
+   "description": [
+    "The preference priority of the resource in the protection scheme for a particular FC. The lower the value the higher the priority. A lower value of selection priority is preferred If two resources have the same value they are of equal priory. There is no preference between equal priorities. If a resource with the lowest value selection priority fails then the next lowest value available (may be the same value) is picked. Hence on failure of the current resource the next best available will be selected. If there are several equal values the choice is essentially arbitrary). If the scheme is revertive then when a resource of higher priority than the currently selected resource recovers it will be selected. This is equivalent to working/protection but allows for all static scheme types with n:m capability. In simple schemes 0 = working and 1 = protecting."
+   ],
+   "uml-name": "selectionPriority",
+   "controlType": "number"
+  },
+  "is-internal-port": {
+   "id": "is-internal-port",
+   "uml-id": "_CSlIwNViEeWhfIeymCGl5Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 6,
+   "is-read-only": true,
+   "description": [
+    "The FcPort is not exposed and cannot have associated LTPs. This form of FcPort is used to enable chaining of FcSwitches or FcRoutes in complex network protection scenarios."
+   ],
+   "uml-name": "isInternalPort",
+   "controlType": "checkbox"
+  },
+  "fc-route-feeds-fc-port-egress": {
+   "id": "fc-route-feeds-fc-port-egress",
+   "uml-id": "_xbsp8TLREea40e5DA9KE3w",
+   "uml-type": "ownedAttribute",
+   "type": "_9UVusFYfEeOVGaP4lO41SQ",
+   "order-number": 7,
+   "is-read-only": false,
+   "description": [
+    "Identifies which route(s) currently actively forward to the FcPort to exit the FC to an LTP (or for an internal FcPort to propagate to the next internal switch/route)."
+   ],
+   "uml-name": "_fcRouteFeedsFcPortEgress"
+  },
+  "layer-protocol": {
+   "id": "layer-protocol",
+   "uml-id": "_gROecFYXEeOVGaP4lO41SQ",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "The projection of an LTP into each transport layer is represented by a LayerProtocol (LP) instance. A LayerProtocol instances can be used for controlling termination and monitoring functionality. It can also be used for controlling the adaptation (i.e. encapsulation and/or multiplexing of client signal), tandem connection monitoring, traffic conditioning and/or shaping functionality at an intermediate point along a connection. Where the client - server relationship is fixed 1:1 and immutable, the layers can be encapsulated in a single LTP instance. Where there is a n:1 relationship between client and server, the layers must be split over two separate instances of LTP."
+   ],
+   "uml-name": "LayerProtocol"
+  },
+  "configured-client-capacity": {
+   "id": "configured-client-capacity",
+   "uml-id": "_CUJD4BicEeSh8KVgZCMyDw",
+   "uml-type": "ownedAttribute",
+   "type": "_aL8EoGnNEeaBUOurxzA2swpathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 2,
+   "is-read-only": false,
+   "visible": false,
+   "description": [
+    "Provides a summarized view of the client capacity that is configurable for use. Note the client LTP association should provide all necessary detail hence this attribute is questionable."
+   ],
+   "uml-name": "configuredClientCapacity"
+  },
+  "lp-direction": {
+   "id": "lp-direction",
+   "uml-id": "_GuuSYEDBEeWQeOKbNUpP9A",
+   "uml-type": "ownedAttribute",
+   "type": "_RWILYEDAEeWQeOKbNUpP9A",
+   "order-number": 3,
+   "is-read-only": false,
+   "description": [
+    "The overall directionality of the LP. - A BIDIRECTIONAL LP will have some SINK and/or SOURCE flows. - A SINK LP can only contain elements with SINK flows or CONTRA_DIRECTION_SOURCE flows - A SOURCE LP can only contain SOURCE flows or CONTRA_DIRECTION_SINK flows"
+   ],
+   "uml-name": "lpDirection",
+   "controlType": [
+    "bidirectional",
+    "sink",
+    "source",
+    "undefined-or-unknown"
+   ]
+  },
+  "termination-state": {
+   "id": "termination-state",
+   "uml-id": "_p2YfoGeEEeWmgIwAIZlYKQ",
+   "uml-type": "ownedAttribute",
+   "type": "_6anG8GeEEeWmgIwAIZlYKQpathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 4,
+   "is-read-only": false,
+   "description": [
+    "Indicates whether the layer is terminated and if so how."
+   ],
+   "uml-name": "terminationState"
+  },
+  "config-and-switch-controller": {
+   "id": "config-and-switch-controller",
+   "uml-id": "_d6vwsMQhEeWlWIVxswb46A",
+   "uml-type": "ownedAttribute",
+   "type": "_k1gHQJo5EeOyHKqw-cQ_eg",
+   "order-number": 5,
+   "is-read-only": false,
+   "description": [
+    "A switch controller external to the LayerProtocol. The controller will coordinate one or more switches in one or more FCs related to the LayerProtocol"
+   ],
+   "uml-name": "_configAndSwitchController"
+  },
+  "fc-blocks-signal-to-lp": {
+   "id": "fc-blocks-signal-to-lp",
+   "uml-id": "_OW-PsMjVEeWSlYzRfsq8lQ",
+   "uml-type": "ownedAttribute",
+   "type": "_zMwrsMjVEeWSlYzRfsq8lQ",
+   "order-number": 7,
+   "is-read-only": false,
+   "visible":false,
+   "uml-name": "fcBlocksSignalToLp"
+  },
+  "logical-termination-point": {
+   "id": "logical-termination-point",
+   "uml-id": "_eEpDMFX4EeOVGaP4lO41SQ",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "The LogicalTerminationPoint (LTP) class encapsulates the termination and adaptation functions of one or more transport layers represented by instances of LayerProtocol. The encapsulated transport layers have a simple fixed 1:1 client-server relationship defined by association end ordering. The structure of LTP supports all transport protocols including circuit and packet forms."
+   ],
+   "uml-name": "LogicalTerminationPoint"
+  },
+  "server-ltp": {
+   "id": "server-ltp",
+   "uml-id": "_D4N9IFX5EeOVGaP4lO41SQ",
+   "uml-type": "ownedAttribute",
+   "type": "_eEpDMFX4EeOVGaP4lO41SQ",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "References contained LTPs representing servers of this LTP in an inverse multiplexing configuration (e.g. VCAT)."
+   ],
+   "uml-name": "_serverLtp"
+  },
+  "client-ltp": {
+   "id": "client-ltp",
+   "uml-id": "_3Y4zAFYWEeOVGaP4lO41SQ",
+   "uml-type": "ownedAttribute",
+   "type": "_eEpDMFX4EeOVGaP4lO41SQ",
+   "order-number": 2,
+   "is-read-only": false,
+   "description": [
+    "References contained LTPs representing client traffic of this LTP for normal cases of multiplexing."
+   ],
+   "uml-name": "_clientLtp"
+  },
+  "lp": {
+   "id": "lp",
+   "uml-id": "_lvFOQFYXEeOVGaP4lO41SQ",
+   "uml-type": "ownedAttribute",
+   "type": "_gROecFYXEeOVGaP4lO41SQ",
+   "order-number": 3,
+   "is-read-only": false,
+   "description": [
+    "Ordered list of LayerProtocols that this LTP is comprised of where the first entry in the list is the lowest server layer (e.g. physical)."
+   ],
+   "uml-name": "_lp"
+  },
+  "connected-ltp": {
+   "id": "connected-ltp",
+   "uml-id": "_CHM6YFYYEeOVGaP4lO41SQ",
+   "uml-type": "ownedAttribute",
+   "type": "_eEpDMFX4EeOVGaP4lO41SQ",
+   "order-number": 4,
+   "is-read-only": false,
+   "description": [
+    "Applicable in a simple context where two LTPs are associated via a non-adjustable enabled forwarding. Reduces clutter removing the need for two additional LTPs and an FC with a pair of FcPorts."
+   ],
+   "uml-name": "_connectedLtp"
+  },
+  "peer-ltp": {
+   "id": "peer-ltp",
+   "uml-id": "_TkuhMFYYEeOVGaP4lO41SQ",
+   "uml-type": "ownedAttribute",
+   "type": "_eEpDMFX4EeOVGaP4lO41SQ",
+   "order-number": 5,
+   "is-read-only": false,
+   "description": [
+    "References contained LTPs representing the reversal of orientation of flow where two LTPs are associated via a non-adjustable enabled forwarding and where the referenced LTP is fully dependent on the this LTP."
+   ],
+   "uml-name": "_peerLtp"
+  },
+  "physical-port-reference": {
+   "id": "physical-port-reference",
+   "uml-id": "_RLDi4BieEeSh8KVgZCMyDw",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 6,
+   "is-read-only": false,
+   "description": [
+    "One or more text labels for the unmodelled physical port associated with the LTP. In many cases there is no associated physical port."
+   ],
+   "uml-name": "physicalPortReference",
+   "controlType": "text"
+  },
+  "ltp-in-other-view": {
+   "id": "ltp-in-other-view",
+   "uml-id": "_vq1NIBigEeSh8KVgZCMyDw",
+   "uml-type": "ownedAttribute",
+   "type": "_eEpDMFX4EeOVGaP4lO41SQ",
+   "order-number": 7,
+   "is-read-only": false,
+   "description": [
+    "References one or more LTPs in other views that represent this LTP. The referencing LTP is the provider of capability."
+   ],
+   "uml-name": "_ltpInOtherView"
+  },
+  "ltp-direction": {
+   "id": "ltp-direction",
+   "uml-id": "_S811EEDBEeWQeOKbNUpP9A",
+   "uml-type": "ownedAttribute",
+   "type": "_RWILYEDAEeWQeOKbNUpP9A",
+   "order-number": 8,
+   "is-read-only": false,
+   "description": [
+    "The overall directionality of the LTP. - A BIDIRECTIONAL LTP must have at least some LPs that are BIDIRECTIONAL but may also have some SINK and/or SOURCE LPs. - A SINK LTP can only contain SINK LPs - A SOURCE LTP can only contain SOURCE LPs"
+   ],
+   "uml-name": "ltpDirection",
+   "controlType": [
+    "bidirectional",
+    "sink",
+    "source",
+    "undefined-or-unknown"
+   ]
+  },
+  "configuration-and-switch-controller": {
+   "id": "configuration-and-switch-controller",
+   "uml-id": "_k1gHQJo5EeOyHKqw-cQ_eg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Represents the capability to control and coordinate switches, to add/delete/modify FCs and to add/delete/modify LTPs/LPs so as to realize a protection scheme."
+   ],
+   "uml-name": "ConfigurationAndSwitchController"
+  },
+  "switch-rule": {
+   "id": "switch-rule",
+   "uml-id": "_oxb_EJo-EeOyHKqw-cQ_eg",
+   "uml-type": "ownedAttribute",
+   "type": "_aL8EoGnNEeaBUOurxzA2sw",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "A sketch of the presence of complex rules governing the switch behavior."
+   ],
+   "uml-name": "switchRule"
+  },
+  "control-parameters": {
+   "id": "control-parameters",
+   "uml-id": "_k40wIVJKEeaDuo8VlVeg_g",
+   "uml-type": "ownedAttribute",
+   "type": "_T5-osJ4HEeOO3om500DFKg",
+   "order-number": 10,
+   "is-read-only": false,
+   "uml-name": "_controlParameters"
+  },
+  "profile-proxy": {
+   "id": "profile-proxy",
+   "uml-id": "_DEWvsJozEeOyHKqw-cQ_eg",
+   "uml-type": "ownedAttribute",
+   "type": "_rgdnkJoyEeOyHKqw-cQ_eg",
+   "order-number": 5,
+   "is-read-only": false,
+   "description": [
+    "Provides a set of predefined values for switch control in place of the direct values available via the FcSwitch or via _configurationAndSwitchControl."
+   ],
+   "uml-name": "_profileProxy"
+  },
+  "local-pac": {
+   "id": "local-pac",
+   "uml-id": "_JOA30MOxEeWwZ527PhfFSA",
+   "uml-type": "uml:DataType",
+   "description": [
+    "Provides the properties of a LocalClass via composition."
+   ],
+   "uml-name": "Local_Pac"
+  },
+  "global-pac": {
+   "id": "global-pac",
+   "uml-id": "_iBsM0MOxEeWwZ527PhfFSA",
+   "uml-type": "uml:DataType",
+   "description": [
+    "Provides the properties of a GlobalClass via composition."
+   ],
+   "uml-name": "Global_Pac"
+  },
+  "is-frozen": {
+   "id": "is-frozen",
+   "uml-id": "_Xt2wEMOyEeWwZ527PhfFSA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 7,
+   "is-read-only": false,
+   "description": [
+    "Temporarily prevents any switch action to be taken and, as such, freezes the current state. Until the freeze is cleared, additional near-end external commands are rejected and fault condition changes and received APS messages are ignored. All administrative controls of any aspect of protection are rejected."
+   ],
+   "uml-name": "isFrozen",
+   "controlType": "checkbox"
+  },
+  "is-coordinated-switching-both-ends": {
+   "id": "is-coordinated-switching-both-ends",
+   "uml-id": "_QuZt0MO2EeWwZ527PhfFSA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 8,
+   "is-read-only": false,
+   "description": [
+    "The C&SC is operating such that switching at both ends of each flow acorss the FC is coordinated at both ingress and egress ends."
+   ],
+   "uml-name": "isCoordinatedSwitchingBothEnds",
+   "controlType": "checkbox"
+  },
+  "subordinate-controller": {
+   "id": "subordinate-controller",
+   "uml-id": "_OjA04MQlEeWlWIVxswb46A",
+   "uml-type": "ownedAttribute",
+   "type": "_k1gHQJo5EeOyHKqw-cQ_eg",
+   "order-number": 9,
+   "is-read-only": false,
+   "description": [
+    "A C&SC that is fully or partially subordinate this C&SC. A peer is considered as partially subordinate in that the peer will respond to requests for action from this C&SC but will also make requests for action to be carried out by this C&SC. Where there is a peer relationship each controller in the peering will see the other controller as subordinate."
+   ],
+   "uml-name": "_subordinateController"
+  },
+  "control-parameters-pac": {
+   "id": "control-parameters-pac",
+   "uml-id": "_T5-osJ4HEeOO3om500DFKg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "A list of control parameters to apply to a switch."
+   ],
+   "uml-name": "ControlParameters_Pac"
+  },
+  "reversion-mode": {
+   "id": "reversion-mode",
+   "uml-id": "_oGqn41LNEeO75dO39GbF8Q",
+   "uml-type": "ownedAttribute",
+   "type": "_oGqjf1LNEeO75dO39GbF8Q",
+   "order-number": 3,
+   "is-read-only": false,
+   "description": [
+    "Moved to ControlParameter_Pac... This attribute whether or not the protection scheme is revertive or non-revertive."
+   ],
+   "uml-name": "reversionMode",
+   "controlType": [
+    "revertive",
+    "non-revertive"
+   ]
+  },
+  "wait-to-revert-time": {
+   "id": "wait-to-revert-time",
+   "uml-id": "_eSxzEJ4IEeOO3om500DFKg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 2,
+   "is-read-only": false,
+   "description": [
+    "If the protection system is revertive, this attribute specifies the time, in minutes, to wait after a fault clears on a higher priority (preferred) resource before reverting to the preferred resource."
+   ],
+   "uml-name": "waitToRevertTime",
+   "controlType": "number"
+  },
+  "prot-type": {
+   "id": "prot-type",
+   "uml-id": "_oGqn6lLNEeO75dO39GbF8Q",
+   "uml-type": "ownedAttribute",
+   "type": "_c3Hu8Gb3EeWrX_JIGzXlSg",
+   "order-number": 2,
+   "is-read-only": false,
+   "description": [
+    "Indicates the protection scheme that is used for the ProtectionGroup."
+   ],
+   "uml-name": "protType"
+  },
+  "hold-off-time": {
+   "id": "hold-off-time",
+   "uml-id": "_oGqn6FLNEeO75dO39GbF8Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "Moved to ControlParameter_Pac... This attribute indicates the time, in seconds, between declaration of unacceptable quality of signal on the currently selected FcPort, and the initialization of the protection switching algorithm."
+   ],
+   "uml-name": "holdOffTime",
+   "controlType": "number"
+  },
+  "network-scheme-specification": {
+   "id": "network-scheme-specification",
+   "uml-id": "_doxoIDLIEea40e5DA9KE3w",
+   "uml-type": "ownedAttribute",
+   "type": "_w-HB8DLEEea40e5DA9KE3w",
+   "order-number": 5,
+   "is-read-only": false,
+   "uml-name": "_networkSchemeSpecification"
+  },
+  "selected-fc-port": {
+   "id": "selected-fc-port",
+   "uml-id": "_2PdiYI8lEeOw_ste-s6RrA",
+   "uml-type": "ownedAttribute",
+   "type": "_b_lUAFYgEeOVGaP4lO41SQ",
+   "order-number": 4,
+   "is-read-only": false,
+   "description": [
+    "Indicates which points are selected by the switch. Depending on the switch spec (via Fcspec) - more than one FcPort can be selected at any one time (e.g. egress switch, ingress packet switch) - zero FcPorts can be selected. For an ingress switch this indicates that the switch common (egress) is  high impedance  ."
+   ],
+   "uml-name": "_selectedFcPort"
+  },
+  "internal-configuration-and-switch-control": {
+   "id": "internal-configuration-and-switch-control",
+   "uml-id": "_tbetAJ4HEeOO3om500DFKg",
+   "uml-type": "ownedAttribute",
+   "type": "_k1gHQJo5EeOyHKqw-cQ_eg",
+   "order-number": 6,
+   "is-read-only": false,
+   "description": [
+    "A switch controller encapsulated in the FcSwitch."
+   ],
+   "uml-name": "_internalConfigurationAndSwitchControl"
+  },
+  "switch-control": {
+   "id": "switch-control",
+   "uml-id": "_LSnbYMOGEeWwZ527PhfFSA",
+   "uml-type": "ownedAttribute",
+   "type": "_e-7DYMOFEeWwZ527PhfFSA",
+   "order-number": 7,
+   "is-read-only": false,
+   "description": [
+    "Degree of administrative control applied to the switch selection."
+   ],
+   "uml-name": "switchControl",
+   "controlType": [
+    "normal",
+    "manual",
+    "forced"
+   ]
+  },
+  "switch-selects-ports": {
+   "id": "switch-selects-ports",
+   "uml-id": "_FBaoAMQTEeWlWIVxswb46A",
+   "uml-type": "ownedAttribute",
+   "type": "_2WpC8EC7EeWxhL2B6Peg6A",
+   "order-number": 8,
+   "is-read-only": false,
+   "description": [
+    "Indicates whether the switch selects from ingress to the FC or to egress of the FC, or both."
+   ],
+   "uml-name": "switchSelectsPorts",
+   "controlType": [
+    "bidirectional",
+    "input",
+    "output",
+    "unidentified-or-unknown"
+   ]
+  },
+  "switch-selection-reason": {
+   "id": "switch-selection-reason",
+   "uml-id": "_XjsGkCi_EeaGGvAxxSe1uA",
+   "uml-type": "ownedAttribute",
+   "type": "_zRKlICi9EeaGGvAxxSe1uA",
+   "order-number": 9,
+   "is-read-only": true,
+   "description": [
+    "The reason for the current switch selection."
+   ],
+   "uml-name": "switchSelectionReason",
+   "controlType": []
+  },
+  "wait-to-restore-time": {
+   "id": "wait-to-restore-time",
+   "uml-id": "_oGqn5lLNEeO75dO39GbF8Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 11,
+   "is-read-only": false,
+   "description": [
+    "Moved to ControlParameter_Pac and changed to waitToRevert... If the protection system is revertive, this attribute specifies the amount of time, in seconds, to wait after the preferred FcPort returns to an acceptable state of operation (e.g. a fault has cleared) before restoring traffic to that preferred FcPort."
+   ],
+   "uml-name": "waitToRestoreTime",
+   "controlType": "number"
+  },
+  "name": {
+   "id": "name",
+   "uml-id": "_YCL8kMDZEeWbqPZwR-Ot6A",
+   "uml-type": "ownedAttribute",
+   "type": "_XUarEMDuEeWbqPZwR-Ot6A",
+   "order-number": 4,
+   "is-read-only": false,
+   "description": [
+    "If the element is a name."
+   ],
+   "uml-name": "name"
+  },
+  "global-class": {
+   "id": "global-class",
+   "uml-id": "_iVJ1kI2wEeO38ZmbECnvbg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Represents a type of thing (an Entity) that has instances which can exist in their own right (independently of any others). Entity: Has identity, defined boundary, properties, functionality and lifecycle in a global context. (consider in the context of a Class: (usage) The representation of a thing that may be an entity or an inseparable Entity Feature)."
+   ],
+   "uml-name": "GlobalClass"
+  },
+  "local-id": {
+   "id": "local-id",
+   "uml-id": "_cq2mQMDYEeWbqPZwR-Ot6A",
+   "uml-type": "ownedAttribute",
+   "type": "_dCdzAMDuEeWbqPZwR-Ot6A",
+   "order-number": 2,
+   "is-read-only": false,
+   "description": [
+    "If the element is a localId (where the element above in the hierarchy must be the context in which the specific localId is relevant)."
+   ],
+   "uml-name": "localId"
+  },
+  "uuid": {
+   "id": "uuid",
+   "uml-id": "_KeLlAMDZEeWbqPZwR-Ot6A",
+   "uml-type": "ownedAttribute",
+   "type": "_SU3Q4I30EeO38ZmbECnvbg",
+   "order-number": 3,
+   "is-read-only": false,
+   "description": [
+    "If the element is a uuid (where this element could be the top of a hierarchy but may also be at some level in the hierarchy where address navigation is considered necessary to assist in location of the UUID)."
+   ],
+   "uml-name": "uuid"
+  },
+  "local-class": {
+   "id": "local-class",
+   "uml-id": "_k5nWYI2wEeO38ZmbECnvbg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "A LocalClass represents a Feature of an Entity. It is inseparable from a GlobalClass but is a distinct feature of that GlobalClass such that the instances of LocalClass are able to have associations to other instances.. Feature of an Entity: An inseparable, externally distinguishable part of an entity. The mandatory LocalId of the LocalClass instance is unique in the context of the GlobalClass from which it is inseparable. (consider in the context of a Class: (usage) The representation of a thing that may be an entity or an inseparable feature of an entity)"
+   ],
+   "uml-name": "LocalClass"
+  },
+  "label": {
+   "id": "label",
+   "uml-id": "_olrqYI2uEeO38ZmbECnvbg",
+   "uml-type": "ownedAttribute",
+   "type": "_y7oy8I3tEeO38ZmbECnvbg",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "List of labels."
+   ],
+   "uml-name": "label"
+  },
+  "extension": {
+   "id": "extension",
+   "uml-id": "_uQqu4I28EeO38ZmbECnvbg",
+   "uml-type": "ownedAttribute",
+   "type": "_y7oy8I3tEeO38ZmbECnvbg",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "List of simple name-value extensions."
+   ],
+   "uml-name": "extension"
+  },
+  "universal-id-authority": {
+   "id": "universal-id-authority",
+   "uml-id": "_StA-4I23EeO38ZmbECnvbg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Represents the authority that controls the allocation of UUIDs."
+   ],
+   "uml-name": "UniversalIdAuthority"
+  },
+  "name-and-value-authority": {
+   "id": "name-and-value-authority",
+   "uml-id": "_ulDtsI3AEeO38ZmbECnvbg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Represents the authority that controls the legal values for the names and values of a name/value attribute."
+   ],
+   "uml-name": "NameAndValueAuthority"
+  },
+  "conditional-package": {
+   "id": "conditional-package",
+   "uml-id": "_-ZWVQJP0EeOqfpp-ZJSmaA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "The base class for conditional packages."
+   ],
+   "uml-name": "ConditionalPackage"
+  },
+  "state-pac": {
+   "id": "state-pac",
+   "uml-id": "_RG6VILEtEeSZUdYfPSdgew",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Provides general state attributes."
+   ],
+   "uml-name": "State_Pac"
+  },
+  "operational-state": {
+   "id": "operational-state",
+   "uml-id": "_dO6owLEtEeSZUdYfPSdgew",
+   "uml-type": "ownedAttribute",
+   "type": "_lNclkLEtEeSZUdYfPSdgew",
+   "order-number": 1,
+   "is-read-only": true,
+   "description": [
+    "The operational state is used to indicate whether or not the resource is installed and working."
+   ],
+   "uml-name": "operationalState",
+   "controlType": [
+    "disabled",
+    "enabled"
+   ]
+  },
+  "administrative-control": {
+   "id": "administrative-control",
+   "uml-id": "_7gqwALEtEeSZUdYfPSdgew",
+   "uml-type": "ownedAttribute",
+   "type": "_-xPeALEvEeSZUdYfPSdgew",
+   "order-number": 2,
+   "is-read-only": false,
+   "description": [
+    "The administrativeControl state provides control of the availability of specific resources without modification to the provisioning of those resources. The value is the current control target. The actual administrativeState may or may not be at target."
+   ],
+   "uml-name": "administrativeControl",
+   "controlType": [
+    "unlock",
+    "lock-passive",
+    "lock-active",
+    "lock-immediate"
+   ]
+  },
+  "adminisatratve-state": {
+   "id": "adminisatratve-state",
+   "uml-id": "_AjGvILEuEeSZUdYfPSdgew",
+   "uml-type": "ownedAttribute",
+   "type": "_KSKOYLEuEeSZUdYfPSdgew",
+   "order-number": 3,
+   "is-read-only": true,
+   "description": [
+    "Shows whether or not the client has permission to use or has a prohibition against using the resource. The administrative state expresses usage permissions for specific resources without modification to the provisioning of those resources."
+   ],
+   "uml-name": "adminisatratveState",
+   "controlType": [
+    "locked",
+    "unlocked"
+   ]
+  },
+  "lifecycle-state": {
+   "id": "lifecycle-state",
+   "uml-id": "_PzqZ0GgiEeWmgIwAIZlYKQ",
+   "uml-type": "ownedAttribute",
+   "type": "_YSsboGgiEeWmgIwAIZlYKQ",
+   "order-number": 4,
+   "is-read-only": false,
+   "description": [
+    "Used to track the planned deployment, allocation to clients and withdrawal of resources."
+   ],
+   "uml-name": "lifecycleState",
+   "controlType": [
+    "planned",
+    "potential",
+    "installed",
+    "pending-removal"
+   ]
+  },
+  "general-directives": {
+   "id": "general-directives",
+   "uml-id": "_9hyUwD0TEeaRI-H69PghuA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "GeneralDirectives"
+  },
+  "necessary-initial-condition-constraints": {
+   "id": "necessary-initial-condition-constraints",
+   "uml-id": "_J_v_YD0WEeaRI-H69PghuA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "NecessaryInitialConditionConstraints"
+  },
+  "is-not": {
+   "id": "is-not",
+   "uml-id": "_pzNRQD3XEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "IsNot",
+   "controlType": "checkbox"
+  },
+  "operation-details": {
+   "id": "operation-details",
+   "uml-id": "_J5Hc0T0fEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "_g1SeoD0UEeaRI-H69PghuA",
+   "order-number": 7,
+   "is-read-only": false,
+   "uml-name": "_operationDetails"
+  },
+  "action-verb": {
+   "id": "action-verb",
+   "uml-id": "_93jegD0VEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "_ljUl4D3WEeaRI-H69PghuA",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "actionVerb",
+   "controlType": [
+    "create-post-add",
+    "set-update-put-modify-write-add",
+    "get-read",
+    "delete-remove"
+   ]
+  },
+  "necessary-initialcondition-constraints": {
+   "id": "necessary-initialcondition-constraints",
+   "uml-id": "_Kc7UgD0fEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "_J_v_YD0WEeaRI-H69PghuA",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "_necessaryInitialconditionConstraints"
+  },
+  "operation-envelope": {
+   "id": "operation-envelope",
+   "uml-id": "_52IiYD0TEeaRI-H69PghuA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "OperationEnvelope"
+  },
+  "operation-set": {
+   "id": "operation-set",
+   "uml-id": "_c9yBkD0UEeaRI-H69PghuA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "OperationSet"
+  },
+  "generaldirectives": {
+   "id": "generaldirectives",
+   "uml-id": "_Ios90j0fEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "_9hyUwD0TEeaRI-H69PghuA",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "generaldirectives"
+  },
+  "operationidentifiers": {
+   "id": "operationidentifiers",
+   "uml-id": "_JQNpwT0fEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "_AZx1kD0UEeaRI-H69PghuA",
+   "order-number": 3,
+   "is-read-only": false,
+   "uml-name": "operationidentifiers"
+  },
+  "operation-identifiers": {
+   "id": "operation-identifiers",
+   "uml-id": "_AZx1kD0UEeaRI-H69PghuA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "OperationIdentifiers"
+  },
+  "after-operation-set": {
+   "id": "after-operation-set",
+   "uml-id": "_olu8ID0UEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "_c9yBkD0UEeaRI-H69PghuA",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "_afterOperationSet"
+  },
+  "before-operation-set": {
+   "id": "before-operation-set",
+   "uml-id": "_xIFXsj0UEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "_c9yBkD0UEeaRI-H69PghuA",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "_beforeOperationSet"
+  },
+  "effort-and-action": {
+   "id": "effort-and-action",
+   "uml-id": "_GWLtID0VEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "_L4Y9QE2DEeaGxdXEiNf4tA",
+   "order-number": 3,
+   "is-read-only": false,
+   "uml-name": "effortAndAction",
+   "controlType": [
+    "best-effort",
+    "exact-match"
+   ]
+  },
+  "pause-resume-rule": {
+   "id": "pause-resume-rule",
+   "uml-id": "_ObfAUD0VEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "_ndXVME2DEeaGxdXEiNf4tA",
+   "order-number": 4,
+   "is-read-only": false,
+   "uml-name": "pauseResumeRule",
+   "controlType": [
+    "no-pause-possible"
+   ]
+  },
+  "operationset": {
+   "id": "operationset",
+   "uml-id": "_hsSioj0VEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "_c9yBkD0UEeaRI-H69PghuA",
+   "order-number": 5,
+   "is-read-only": false,
+   "uml-name": "operationset"
+  },
+  "is-short-lived": {
+   "id": "is-short-lived",
+   "uml-id": "_mdwtkD0VEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 6,
+   "is-read-only": false,
+   "uml-name": "isShortLived",
+   "controlType": "checkbox"
+  },
+  "conector-in-holder": {
+   "id": "conector-in-holder",
+   "uml-id": "_-zMBkkO-EeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_o366YEONEeasL6dcjI1vEA",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "conectorInHolder"
+  },
+  "connector-on-equipment-for-holder": {
+   "id": "connector-on-equipment-for-holder",
+   "uml-id": "_s5FpwEONEeasL6dcjI1vEA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "A rule class (an abstract specialization of Connector) that represents a connector on an equipment that is intended to mate with a connector in a holder."
+   ],
+   "uml-name": "ConnectorOnEquipmentForHolder"
+  },
+  "connector-cable-end": {
+   "id": "connector-cable-end",
+   "uml-id": "_KCS_IkOPEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_6hyUEEONEeasL6dcjI1vEA",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "connectorCableEnd"
+  },
+  "connector-on-equipment-for-cable": {
+   "id": "connector-on-equipment-for-cable",
+   "uml-id": "_1OKeUEONEeasL6dcjI1vEA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "A rule class (an abstract specialization of Connector) that represents a connector exposed on an equipment such that a cable may be plugged in."
+   ],
+   "uml-name": "ConnectorOnEquipmentForCable"
+  },
+  "function-enablers": {
+   "id": "function-enablers",
+   "uml-id": "_1vzsYERJEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_N-qJ8EQyEeasL6dcjI1vEA",
+   "order-number": 8,
+   "is-read-only": false,
+   "uml-name": "_functionEnablers"
+  },
+  "power-state": {
+   "id": "power-state",
+   "uml-id": "_Q9fSkEQyEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_aL8EoGnNEeaBUOurxzA2sw",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "powerState"
+  },
+  "mechanical-functions": {
+   "id": "mechanical-functions",
+   "uml-id": "_KxkFYEQ-EeasL6dcjI1vEA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Represents the dynamic aspects of the mechanical functions of the equipment."
+   ],
+   "uml-name": "MechanicalFunctions"
+  },
+  "rotation-speed": {
+   "id": "rotation-speed",
+   "uml-id": "_M1XJIEQ-EeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_aL8EoGnNEeaBUOurxzA2sw",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "rotationSpeed"
+  },
+  "physical-properties": {
+   "id": "physical-properties",
+   "uml-id": "_t0pzs0RJEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_QloVwEQ-EeasL6dcjI1vEA",
+   "order-number": 7,
+   "is-read-only": false,
+   "uml-name": "_physicalProperties"
+  },
+  "temperature": {
+   "id": "temperature",
+   "uml-id": "_Vlnd0EQ-EeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_aL8EoGnNEeaBUOurxzA2sw",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "temperature"
+  },
+  "holder-monitors": {
+   "id": "holder-monitors",
+   "uml-id": "_6K62skRSEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_5vdx8EQfEeasL6dcjI1vEA",
+   "order-number": 4,
+   "is-read-only": false,
+   "uml-name": "_holderMonitors"
+  },
+  "is-active": {
+   "id": "is-active",
+   "uml-id": "_KFzmEERTEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "isActive",
+   "controlType": "checkbox"
+  },
+  "is-actual-mismatch-with-expected": {
+   "id": "is-actual-mismatch-with-expected",
+   "uml-id": "_XRKNEERTEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "isActualMismatchWithExpected",
+   "controlType": "checkbox"
+  },
+  "aggregate-function": {
+   "id": "aggregate-function",
+   "uml-id": "_VHOWskglEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_8SXNZT-HEeaRI-H69PghuA",
+   "order-number": 3,
+   "is-read-only": false,
+   "uml-name": "_aggregateFunction"
+  },
+  "location": {
+   "id": "location",
+   "uml-id": "_lNf7kHpKEeaVjtpstJMDXA",
+   "uml-type": "ownedAttribute",
+   "type": "_bh_VAHpJEeaVjtpstJMDXA",
+   "order-number": 18,
+   "is-read-only": false,
+   "uml-name": "_location"
+  },
+  "equipment-location": {
+   "id": "equipment-location",
+   "uml-id": "_RUXMYEQwEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_A15msMDaEeWbqPZwR-Ot6A",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "equipmentLocation"
+  },
+  "geographical-location": {
+   "id": "geographical-location",
+   "uml-id": "_XOQ_AEQwEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_A15msMDaEeWbqPZwR-Ot6A",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "geographicalLocation"
+  },
+  "category": {
+   "id": "category",
+   "uml-id": "_jbGZ8Ec-EeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_WCZv8Ec9EeasL6dcjI1vEA",
+   "order-number": 12,
+   "is-read-only": false,
+   "uml-name": "_category"
+  },
+  "equipment-instance": {
+   "id": "equipment-instance",
+   "uml-id": "_CE4sUkRCEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_UB7QwEQuEeasL6dcjI1vEA",
+   "order-number": 3,
+   "is-read-only": false,
+   "uml-name": "_equipmentInstance"
+  },
+  "manufacture-date": {
+   "id": "manufacture-date",
+   "uml-id": "_YrPlQEQuEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_G1gboD4AEeaRI-H69PghuA",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "manufactureDate"
+  },
+  "serial-number": {
+   "id": "serial-number",
+   "uml-id": "_cpqioEQuEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_G1gboD4AEeaRI-H69PghuA",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "serialNumber"
+  },
+  "asset-instance-identifier": {
+   "id": "asset-instance-identifier",
+   "uml-id": "_yWCIcEQuEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_G1gboD4AEeaRI-H69PghuA",
+   "order-number": 3,
+   "is-read-only": false,
+   "uml-name": "assetInstanceIdentifier"
+  },
+  "equipment-type": {
+   "id": "equipment-type",
+   "uml-id": "_1KggkERBEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_BP8YcEQuEeasL6dcjI1vEA",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "_equipmentType"
+  },
+  "description": {
+   "id": "description",
+   "uml-id": "_-5svQEQsEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_G1gboD4AEeaRI-H69PghuA",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "description"
+  },
+  "model-identifier": {
+   "id": "model-identifier",
+   "uml-id": "_oUmxsEQsEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_G1gboD4AEeaRI-H69PghuA",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "modelIdentifier"
+  },
+  "part-type-identifier": {
+   "id": "part-type-identifier",
+   "uml-id": "_3ypNAEQsEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_G1gboD4AEeaRI-H69PghuA",
+   "order-number": 3,
+   "is-read-only": false,
+   "uml-name": "partTypeIdentifier"
+  },
+  "type-name": {
+   "id": "type-name",
+   "uml-id": "_j105QEQsEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_G1gboD4AEeaRI-H69PghuA",
+   "order-number": 4,
+   "is-read-only": false,
+   "uml-name": "typeName"
+  },
+  "version": {
+   "id": "version",
+   "uml-id": "_mig3EEQuEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_G1gboD4AEeaRI-H69PghuA",
+   "order-number": 5,
+   "is-read-only": false,
+   "uml-name": "version"
+  },
+  "holder-structure": {
+   "id": "holder-structure",
+   "uml-id": "_U93mQEc8EeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_0U3TwEc7EeasL6dcjI1vEA",
+   "order-number": 7,
+   "is-read-only": false,
+   "uml-name": "_holderStructure"
+  },
+  "holder-category": {
+   "id": "holder-category",
+   "uml-id": "_r240kERLEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_0K-KoERLEeasL6dcjI1vEA",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "holderCategory",
+   "controlType": [
+    "slot"
+   ]
+  },
+  "is-captive": {
+   "id": "is-captive",
+   "uml-id": "_4XbukERMEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "isCaptive",
+   "controlType": "checkbox"
+  },
+  "is-guided": {
+   "id": "is-guided",
+   "uml-id": "_-1CEIERMEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 3,
+   "is-read-only": false,
+   "uml-name": "isGuided",
+   "controlType": "checkbox"
+  },
+  "is-quantised-space": {
+   "id": "is-quantised-space",
+   "uml-id": "_Lj7_sERNEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 4,
+   "is-read-only": false,
+   "uml-name": "isQuantisedSpace",
+   "controlType": "checkbox"
+  },
+  "manufactured-thing": {
+   "id": "manufactured-thing",
+   "uml-id": "_XtDuokRCEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_GgBQUERBEeasL6dcjI1vEA",
+   "order-number": 4,
+   "is-read-only": false,
+   "uml-name": "_manufacturedThing"
+  },
+  "manufacturer-properties": {
+   "id": "manufacturer-properties",
+   "uml-id": "_gdoY8EQtEeasL6dcjI1vEA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Represents the properties of the manufacturer."
+   ],
+   "uml-name": "ManufacturerProperties"
+  },
+  "operator-augmented-equipment-type": {
+   "id": "operator-augmented-equipment-type",
+   "uml-id": "_Yw99EEc_EeasL6dcjI1vEA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Represents the invariant properties of the equipment asset allocated by the operator that define and characterise the type."
+   ],
+   "uml-name": "OperatorAugmentedEquipmentType"
+  },
+  "manufacturer-identifier": {
+   "id": "manufacturer-identifier",
+   "uml-id": "_VTQLMEQtEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_G1gboD4AEeaRI-H69PghuA",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "manufacturerIdentifier"
+  },
+  "manufacturer-name": {
+   "id": "manufacturer-name",
+   "uml-id": "_cC-A8EQsEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_G1gboD4AEeaRI-H69PghuA",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "manufacturerName"
+  },
+  "mechanical-features": {
+   "id": "mechanical-features",
+   "uml-id": "_X1TkUkRFEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_qZGr8EQfEeasL6dcjI1vEA",
+   "order-number": 6,
+   "is-read-only": false,
+   "uml-name": "_mechanicalFeatures"
+  },
+  "asset-type-identifier": {
+   "id": "asset-type-identifier",
+   "uml-id": "_uHNXkEQuEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_G1gboD4AEeaRI-H69PghuA",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "assetTypeIdentifier"
+  },
+  "physical-characteristics": {
+   "id": "physical-characteristics",
+   "uml-id": "_Kiw98URKEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_TsDsQEQfEeasL6dcjI1vEA",
+   "order-number": 10,
+   "is-read-only": false,
+   "uml-name": "_physicalCharacteristics"
+  },
+  "weight-characeristics": {
+   "id": "weight-characeristics",
+   "uml-id": "_87dRMEQ9EeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_aL8EoGnNEeaBUOurxzA2sw",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "weightCharaceristics"
+  },
+  "fire-characteristics": {
+   "id": "fire-characteristics",
+   "uml-id": "__oPnkEQ9EeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_aL8EoGnNEeaBUOurxzA2sw",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "fireCharacteristics"
+  },
+  "materials": {
+   "id": "materials",
+   "uml-id": "_BoTa0EQ-EeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_aL8EoGnNEeaBUOurxzA2sw",
+   "order-number": 3,
+   "is-read-only": false,
+   "uml-name": "materials"
+  },
+  "physical-rating": {
+   "id": "physical-rating",
+   "uml-id": "_EjPzoUdMEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_SRtkMEdLEeasL6dcjI1vEA",
+   "order-number": 8,
+   "is-read-only": false,
+   "uml-name": "_physicalRating"
+  },
+  "thermal-rating": {
+   "id": "thermal-rating",
+   "uml-id": "_fDkGEEdLEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_aL8EoGnNEeaBUOurxzA2sw",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "thermalRating"
+  },
+  "power-rating": {
+   "id": "power-rating",
+   "uml-id": "_i-N9wEdLEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_aL8EoGnNEeaBUOurxzA2sw",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "powerRating"
+  },
+  "position": {
+   "id": "position",
+   "uml-id": "_4DkhskddEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_FWDLAERWEeasL6dcjI1vEA",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "_position"
+  },
+  "relative-position": {
+   "id": "relative-position",
+   "uml-id": "_U_6mYERXEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_aL8EoGnNEeaBUOurxzA2sw",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "relativePosition"
+  },
+  "spatial-properties-of-type": {
+   "id": "spatial-properties-of-type",
+   "uml-id": "_bAAS0kRSEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_LAvh8EQfEeasL6dcjI1vEA",
+   "order-number": 3,
+   "is-read-only": false,
+   "uml-name": "_spatialPropertiesOfType"
+  },
+  "height": {
+   "id": "height",
+   "uml-id": "_k_CVUEQyEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_aL8EoGnNEeaBUOurxzA2sw",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "height"
+  },
+  "width": {
+   "id": "width",
+   "uml-id": "_n6nVoEQyEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_aL8EoGnNEeaBUOurxzA2sw",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "width"
+  },
+  "length": {
+   "id": "length",
+   "uml-id": "_uIPVgEQyEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_aL8EoGnNEeaBUOurxzA2sw",
+   "order-number": 3,
+   "is-read-only": false,
+   "uml-name": "length"
+  },
+  "swapability": {
+   "id": "swapability",
+   "uml-id": "_wwGXEUc8EeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_kr_E8Ec8EeasL6dcjI1vEA",
+   "order-number": 11,
+   "is-read-only": false,
+   "uml-name": "_swapability"
+  },
+  "is-hot-swappable": {
+   "id": "is-hot-swappable",
+   "uml-id": "_yb3zEEQgEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "isHotSwappable",
+   "controlType": "checkbox"
+  },
+  "cable": {
+   "id": "cable",
+   "uml-id": "_8SXNbD-HEeaRI-H69PghuA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Basic model representing a cable with connectors fitted where the cable is  short  (e.g. patch cord, in-station cabling). This is intentionally a very basic representation of a cable. In a more sophisticated representation cable ends might be represented that then associate to the attached connector. At this point it is assumed that the basic model is sufficient."
+   ],
+   "uml-name": "Cable"
+  },
+  "connector": {
+   "id": "connector",
+   "uml-id": "_8SXNcD-HEeaRI-H69PghuA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Represents a connector that may be fully exposed (e.g. to plug in a cable or on the end of a cable) or partially exposed (e.g. backplane to plug in another piece of equipment such as a module)."
+   ],
+   "uml-name": "Connector"
+  },
+  "pin": {
+   "id": "pin",
+   "uml-id": "_8SXNnT-HEeaRI-H69PghuA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "An individual physical connection point (male or female). May be capable of carrying electrical or optical signals. A pin may have more than one wire/fiber attached but is such that all attached things get exactly the same signal set."
+   ],
+   "uml-name": "Pin"
+  },
+  "orientation": {
+   "id": "orientation",
+   "uml-id": "_DKSfwGpCEeaBUOurxzA2sw",
+   "uml-type": "ownedAttribute",
+   "type": "_y2WM8EQ-EeasL6dcjI1vEA",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "orientation",
+   "controlType": [
+    "male",
+    "female",
+    "symmetric-neutral"
+   ]
+  },
+  "pin-layout": {
+   "id": "pin-layout",
+   "uml-id": "_Fzd-QEQ_EeasL6dcjI1vEA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "The structuring of pins in a connector."
+   ],
+   "uml-name": "PinLayout"
+  },
+  "connector-type": {
+   "id": "connector-type",
+   "uml-id": "_NBXLMEgXEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_aL8EoGnNEeaBUOurxzA2sw",
+   "order-number": 8,
+   "is-read-only": false,
+   "uml-name": "connectorType"
+  },
+  "equipment": {
+   "id": "equipment",
+   "uml-id": "_8SXNej-HEeaRI-H69PghuA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Represents any relevant physical thing. Can be either field replaceable or not field replaceable. Note: The model is currently constrained to inside plant."
+   ],
+   "uml-name": "Equipment"
+  },
+  "contained-holder": {
+   "id": "contained-holder",
+   "uml-id": "_ayDQMj-NEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "_8SXNjj-HEeaRI-H69PghuA",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "_containedHolder"
+  },
+  "exposed-cable": {
+   "id": "exposed-cable",
+   "uml-id": "_Fy4CYj-fEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "_8SXNbD-HEeaRI-H69PghuA",
+   "order-number": 3,
+   "is-read-only": false,
+   "uml-name": "_exposedCable"
+  },
+  "mechanicall-functions": {
+   "id": "mechanicall-functions",
+   "uml-id": "_-Ci-o0RJEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_KxkFYEQ-EeasL6dcjI1vEA",
+   "order-number": 9,
+   "is-read-only": false,
+   "uml-name": "_mechanicallFunctions"
+  },
+  "is-field-replaceable": {
+   "id": "is-field-replaceable",
+   "uml-id": "_f1p94D-WEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 14,
+   "is-read-only": true,
+   "description": [
+    "Indicates whether or not the equipment can be removed and replaced  in the field  (i.e. in a deployment) by normal operations personnel."
+   ],
+   "uml-name": "isFieldReplaceable",
+   "controlType": "checkbox"
+  },
+  "function-block": {
+   "id": "function-block",
+   "uml-id": "_8SXNfj-HEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "_8SXNiz-HEeaRI-H69PghuA",
+   "order-number": 15,
+   "is-read-only": false,
+   "uml-name": "_functionBlock"
+  },
+  "expected-equipment": {
+   "id": "expected-equipment",
+   "uml-id": "_8SXNfz-HEeaRI-H69PghuA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "A definition of the restrictions on the equipment that is expected to be present in the physical network at a particular  place . The expected equipment will state the type and may constrain any other invariant properties. It may also provide desired ranges for dynami properties."
+   ],
+   "uml-name": "ExpectedEquipment"
+  },
+  "actual-equipment": {
+   "id": "actual-equipment",
+   "uml-id": "_8SXNZD-HEeaRI-H69PghuA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "The equipment that is actually present in the physical network. It will expose all dynamic properties and some critical static properties."
+   ],
+   "uml-name": "ActualEquipment"
+  },
+  "holder": {
+   "id": "holder",
+   "uml-id": "_8SXNjj-HEeaRI-H69PghuA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Represents a space in an equipment in which another equipment can be fitted in the field."
+   ],
+   "uml-name": "Holder"
+  },
+  "occupying-fru": {
+   "id": "occupying-fru",
+   "uml-id": "_X1q3Qj-QEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "_8SXNej-HEeaRI-H69PghuA",
+   "order-number": 2,
+   "is-read-only": false,
+   "description": [
+    "The FRU that is occupying the holder. A holder may be unoccupied. An FRU may occupy more hat one holder (using or blocking are intentionally not distinguished here)."
+   ],
+   "uml-name": "_occupyingFru"
+  },
+  "holder-location": {
+   "id": "holder-location",
+   "uml-id": "_l6LE4ERTEeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_A15msMDaEeWbqPZwR-Ot6A",
+   "order-number": 5,
+   "is-read-only": false,
+   "uml-name": "holderLocation"
+  },
+  "supported-equipment": {
+   "id": "supported-equipment",
+   "uml-id": "_RKzmokg0EeasL6dcjI1vEA",
+   "uml-type": "ownedAttribute",
+   "type": "_Ghvk8EguEeasL6dcjI1vEA",
+   "order-number": 9,
+   "is-read-only": false,
+   "uml-name": "_supportedEquipment"
+  },
+  "expected-holder": {
+   "id": "expected-holder",
+   "uml-id": "_MEUpIEmhEeaDccCv6BIgdg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "A definition of a holder expected in the ActualEquipment (i.e. an ActualHolder) as part of the constraints provided by the ExpectedEquipment."
+   ],
+   "uml-name": "ExpectedHolder"
+  },
+  "actual-holder": {
+   "id": "actual-holder",
+   "uml-id": "_NwJ40EmhEeaDccCv6BIgdg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "A holder in the ActualEquipment."
+   ],
+   "uml-name": "ActualHolder"
+  },
+  "pin-group": {
+   "id": "pin-group",
+   "uml-id": "_8SXNrj-HEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "_8SXNnj-HEeaRI-H69PghuA",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "_pinGroup"
+  },
+  "port": {
+   "id": "port",
+   "uml-id": "_8SXNpD-HEeaRI-H69PghuA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "A conceptual access point for a group of signals (where that group of signals cannot be separated)."
+   ],
+   "uml-name": "Port"
+  },
+  "signal-ref-pt": {
+   "id": "signal-ref-pt",
+   "uml-id": "_8SXNrz-HEeaRI-H69PghuA",
+   "uml-type": "ownedAttribute",
+   "type": "_8SXNqz-HEeaRI-H69PghuA",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "_signalRefPt"
+  },
+  "elemental-signals": {
+   "id": "elemental-signals",
+   "uml-id": "_B4oXwEddEeasL6dcjI1vEA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "The elemental (sub-atomic) parts of an  indivisible  signal where processing in the LTP is required to extract the elemental signals."
+   ],
+   "uml-name": "ElementalSignals"
+  },
+  "signal-ref-pt-group": {
+   "id": "signal-ref-pt-group",
+   "uml-id": "_8SXNrT-HEeaRI-H69PghuA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "A physical indivisible group of signals."
+   ],
+   "uml-name": "SignalRefPtGroup"
+  },
+  "group-of-pins": {
+   "id": "group-of-pins",
+   "uml-id": "_uMSwAEdcEeasL6dcjI1vEA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "A group of pins from one or more connectors relevant for some purpose."
+   ],
+   "uml-name": "GroupOfPins"
+  },
+  "port-role": {
+   "id": "port-role",
+   "uml-id": "_DUU_sGZ_EeWrX_JIGzXlSg",
+   "uml-type": "uml:DataType",
+   "description": [
+    "The role of a port in the context of the function of the forwarding entity that it bounds."
+   ],
+   "uml-name": "PortRole"
+  },
+  "protection-type": {
+   "id": "protection-type",
+   "uml-id": "_c3Hu8Gb3EeWrX_JIGzXlSg",
+   "uml-type": "uml:DataType",
+   "description": [
+    "Identifies the type of protection of an FcSwitch."
+   ],
+   "uml-name": "ProtectionType"
+  },
+  "date-and-time": {
+   "id": "date-and-time",
+   "uml-id": "_oGqi1lLNEeO75dO39GbF8Q",
+   "uml-type": "uml:DataType",
+   "description": [
+    "This primitive type defines the date and time according to the following structure:  yyyyMMddhhmmss.s[Z|{+|-}HHMm]  where: yyyy  0000 .. 9999  year MM  01 .. 12  month dd  01 .. 31  day hh  00 .. 23  hour mm  00 .. 59  minute ss  00 .. 59  second s  .0 .. .9  tenth of second (set to  .0  if EMS or NE cannot support this granularity) Z  Z  indicates UTC (rather than local time) {+|-}  +  or  -  delta from UTC HH  00 .. 23  time zone difference in hours Mm  00 .. 59  time zone difference in minutes."
+   ],
+   "uml-name": "DateAndTime"
+  },
+  "to-be-defined": {
+   "id": "to-be-defined",
+   "uml-id": "_aL8EoGnNEeaBUOurxzA2sw",
+   "uml-type": "uml:DataType",
+   "description": [
+    "This type is used when the actual type of the attrbute is expected to be complex but where the type has not yet been developed. This type should only be used for attributes that are experimental."
+   ],
+   "uml-name": "ToBeDefined"
+  },
+  "name-and-value": {
+   "id": "name-and-value",
+   "uml-id": "_y7oy8I3tEeO38ZmbECnvbg",
+   "uml-type": "uml:DataType",
+   "description": [
+    "A scoped name-value pair."
+   ],
+   "uml-name": "NameAndValue"
+  },
+  "value-name": {
+   "id": "value-name",
+   "uml-id": "_77PyQI3tEeO38ZmbECnvbg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "The name of the value. The value need not have a name."
+   ],
+   "uml-name": "valueName",
+   "controlType": "text"
+  },
+  "value": {
+   "id": "value",
+   "uml-id": "_cbx2gI30EeO38ZmbECnvbg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "The specific value of the universal id."
+   ],
+   "uml-name": "value",
+   "controlType": "text"
+  },
+  "universal-id": {
+   "id": "universal-id",
+   "uml-id": "_SU3Q4I30EeO38ZmbECnvbg",
+   "uml-type": "uml:DataType",
+   "description": [
+    "The universal ID value where the mechanism for generation is defined by some authority not directly referenced in the structure. A example structure is [IETF RFC4122]."
+   ],
+   "uml-name": "UniversalId"
+  },
+  "address": {
+   "id": "address",
+   "uml-id": "_A15msMDaEeWbqPZwR-Ot6A",
+   "uml-type": "uml:DataType",
+   "description": [
+    "A description of location via a hierarchy of narrowing contexts."
+   ],
+   "uml-name": "Address"
+  },
+  "address-name": {
+   "id": "address-name",
+   "uml-id": "_W76bkMDaEeWbqPZwR-Ot6A",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "The name of the address (to allow the specific hierarchy to be distinguished from others for the same entity)."
+   ],
+   "uml-name": "addressName",
+   "controlType": "text"
+  },
+  "address-element": {
+   "id": "address-element",
+   "uml-id": "_M_WWsMDYEeWbqPZwR-Ot6A",
+   "uml-type": "uml:DataType",
+   "description": [
+    "One element of a hierarchy of elements. Note that the element must have one and only one value chosen from a list of potential value types."
+   ],
+   "uml-name": "AddressElement"
+  },
+  "local-id-and-class": {
+   "id": "local-id-and-class",
+   "uml-id": "_dCdzAMDuEeWbqPZwR-Ot6A",
+   "uml-type": "uml:DataType",
+   "description": [
+    "The localId and the class of entity that it identifies."
+   ],
+   "uml-name": "LocalIdAndClass"
+  },
+  "class-of-instance": {
+   "id": "class-of-instance",
+   "uml-id": "_NBaUwMDvEeWbqPZwR-Ot6A",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "The class to which the name refers."
+   ],
+   "uml-name": "classOfInstance",
+   "controlType": "text"
+  },
+  "name-and-class": {
+   "id": "name-and-class",
+   "uml-id": "_XUarEMDuEeWbqPZwR-Ot6A",
+   "uml-type": "uml:DataType",
+   "description": [
+    "The name and the class of entity that it names."
+   ],
+   "uml-name": "NameAndClass"
+  },
+  "address-element-name": {
+   "id": "address-element-name",
+   "uml-id": "_3mdl0MpUEeWSlYzRfsq8lQ",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "The name of the address element (e.g.  shelf  as an element of a shelf/slot/port addressing scheme). The remainder of the structure has the reference for the shelf."
+   ],
+   "uml-name": "addressElementName",
+   "controlType": "text"
+  },
+  "arbitrary-element": {
+   "id": "arbitrary-element",
+   "uml-id": "_nPsCsMDzEeWbqPZwR-Ot6A",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 5,
+   "is-read-only": false,
+   "description": [
+    "Where the element is from some external model that is not formally represented in this model."
+   ],
+   "uml-name": "arbitraryElement",
+   "controlType": "text"
+  },
+  "2-wp-c8-ec7-ee-wxh-l2-b6-peg6-a": {
+   "id": "2-wp-c8-ec7-ee-wxh-l2-b6-peg6-a",
+   "uml-id": "_2WpC8EC7EeWxhL2B6Peg6A",
+   "enum": [
+    "BIDIRECTIONAL",
+    "INPUT",
+    "OUTPUT",
+    "UNIDENTIFIED_OR_UNKNOWN"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The orientation of flow at the Port of a Forwarding entity"
+   ],
+   "uml-name": "_2WpC8EC7EeWxhL2B6Peg6A"
+  },
+  "d-v67-aec8-ee-wxh-l2-b6-peg6-a": {
+   "id": "d-v67-aec8-ee-wxh-l2-b6-peg6-a",
+   "uml-id": "_dV67AEC8EeWxhL2B6Peg6A",
+   "enum": [
+    "BIDIRECTIONAL",
+    "UNIDIRECTIONAL",
+    "UNDEFINED_OR_UNKNOWN"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The directionality of a Forwarding entity."
+   ],
+   "uml-name": "_dV67AEC8EeWxhL2B6Peg6A"
+  },
+  "rwilyeda-ee-w-qe-o-kb-n-up-p9-a": {
+   "id": "rwilyeda-ee-w-qe-o-kb-n-up-p9-a",
+   "uml-id": "_RWILYEDAEeWQeOKbNUpP9A",
+   "enum": [
+    "BIDIRECTIONAL",
+    "SINK",
+    "SOURCE",
+    "UNDEFINED_OR_UNKNOWN"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The directionality of a termination entity."
+   ],
+   "uml-name": "_RWILYEDAEeWQeOKbNUpP9A"
+  },
+  "t5-gyk-edn-ee-w-qe-o-kb-n-up-p9-a": {
+   "id": "t5-gyk-edn-ee-w-qe-o-kb-n-up-p9-a",
+   "uml-id": "_T5GykEDNEeWQeOKbNUpP9A",
+   "enum": [
+    "CONTRA_DIRECTION_SINK",
+    "CONTRA_DIRECTION_SOURCE"
+   ],
+   "is-read-only": false,
+   "description": [
+    "Extended to include contra-direction considerations. Only applies to LP and elements of LP not to LTP."
+   ],
+   "uml-name": "_T5GykEDNEeWQeOKbNUpP9A"
+  },
+  "6-an-g8-ge-e-ee-wmg-iw-ai-zl-ykq": {
+   "id": "6-an-g8-ge-e-ee-wmg-iw-ai-zl-ykq",
+   "uml-id": "_6anG8GeEEeWmgIwAIZlYKQ",
+   "enum": [
+    "LP_CAN_NEVER_TERMINATE",
+    "LT_NOT_TERMINATED",
+    "TERMINATED_SERVER_TO_CLIENT_FLOW",
+    "TERMINATED_CLIENT_TO_SERVER_FLOW",
+    "TERMINATED_BIDIRECTIONAL",
+    "LT_PERMENANTLY_TERMINATED",
+    "TERMINATION_STATE_UNKNOWN"
+   ],
+   "is-read-only": false,
+   "description": [
+    "Provides support for the range of behaviours and specific states that an LP can take with respect to termination of the signal. Indicates to what degree the LayerTermination is terminated."
+   ],
+   "uml-name": "_6anG8GeEEeWmgIwAIZlYKQ"
+  },
+  "sthcg-ci-eea-g-gv-axx-se1-u-a": {
+   "id": "sthcg-ci-eea-g-gv-axx-se1-u-a",
+   "uml-id": "_sthcgCi-EeaGGvAxxSe1uA",
+   "enum": [
+    "WAIT_TO_REVERT",
+    "SIGNAL_DEGRADE",
+    "SIGNAL_FAIL"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The cause of the current protection state."
+   ],
+   "uml-name": "_sthcgCi-EeaGGvAxxSe1uA"
+  },
+  "y-i-kvs-mog-ee-ww-z527-phf-fsa": {
+   "id": "y-i-kvs-mog-ee-ww-z527-phf-fsa",
+   "uml-id": "_yIKvsMOGEeWwZ527PhfFSA",
+   "enum": [
+    "LOCK_OUT"
+   ],
+   "is-read-only": false,
+   "description": [
+    "Possible degrees of administrative control applied to the Route selection."
+   ],
+   "uml-name": "_yIKvsMOGEeWwZ527PhfFSA"
+  },
+  "csw-hk-ci-eea-g-gv-axx-se1-u-a": {
+   "id": "csw-hk-ci-eea-g-gv-axx-se1-u-a",
+   "uml-id": "_cswHkCi-EeaGGvAxxSe1uA",
+   "enum": [],
+   "is-read-only": false,
+   "description": [
+    "The cause of the current route selection."
+   ],
+   "uml-name": "_cswHkCi-EeaGGvAxxSe1uA"
+  },
+  "e-7-dymof-ee-ww-z527-phf-fsa": {
+   "id": "e-7-dymof-ee-ww-z527-phf-fsa",
+   "uml-id": "_e-7DYMOFEeWwZ527PhfFSA",
+   "enum": [
+    "NORMAL",
+    "MANUAL",
+    "FORCED"
+   ],
+   "is-read-only": false,
+   "uml-name": "_e-7DYMOFEeWwZ527PhfFSA"
+  },
+  "z-r-kl-i-ci9-eea-g-gv-axx-se1-u-a": {
+   "id": "z-r-kl-i-ci9-eea-g-gv-axx-se1-u-a",
+   "uml-id": "_zRKlICi9EeaGGvAxxSe1uA",
+   "enum": [],
+   "is-read-only": false,
+   "description": [
+    "Explains the reason for the current switch state."
+   ],
+   "uml-name": "_zRKlICi9EeaGGvAxxSe1uA"
+  },
+  "o-gqjf1-ln-ee-o75-d-o39-gb-f8-q": {
+   "id": "o-gqjf1-ln-ee-o75-d-o39-gb-f8-q",
+   "uml-id": "_oGqjf1LNEeO75dO39GbF8Q",
+   "enum": [
+    "REVERTIVE",
+    "NON-REVERTIVE"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The reversion mode associated with protection."
+   ],
+   "uml-name": "_oGqjf1LNEeO75dO39GbF8Q"
+  },
+  "l-nclk-l-et-ee-sz-ud-yf-p-sdgew": {
+   "id": "l-nclk-l-et-ee-sz-ud-yf-p-sdgew",
+   "uml-id": "_lNclkLEtEeSZUdYfPSdgew",
+   "enum": [
+    "DISABLED",
+    "ENABLED"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The possible values of the operationalState."
+   ],
+   "uml-name": "_lNclkLEtEeSZUdYfPSdgew"
+  },
+  "kskoyl-eu-ee-sz-ud-yf-p-sdgew": {
+   "id": "kskoyl-eu-ee-sz-ud-yf-p-sdgew",
+   "uml-id": "_KSKOYLEuEeSZUdYfPSdgew",
+   "enum": [
+    "LOCKED",
+    "UNLOCKED"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The possible values of the administrativeState."
+   ],
+   "uml-name": "_KSKOYLEuEeSZUdYfPSdgew"
+  },
+  "-x-pe-al-ev-ee-sz-ud-yf-p-sdgew": {
+   "id": "-x-pe-al-ev-ee-sz-ud-yf-p-sdgew",
+   "uml-id": "_-xPeALEvEeSZUdYfPSdgew",
+   "enum": [
+    "UNLOCK",
+    "LOCK_PASSIVE",
+    "LOCK_ACTIVE",
+    "LOCK_IMMEDIATE"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The possible values of the current target administrative state.",
+    "Reflects the current control action when the entity is not in the desired state."
+   ],
+   "uml-name": "_-xPeALEvEeSZUdYfPSdgew"
+  },
+  "mcyhc-gge-ee-wmg-iw-ai-zl-ykq": {
+   "id": "mcyhc-gge-ee-wmg-iw-ai-zl-ykq",
+   "uml-id": "_McyhcGgeEeWmgIwAIZlYKQ",
+   "enum": [
+    "SHUTTING_DOWN_ACTIVE",
+    "SHUTTING_DOWN_PASSIVE"
+   ],
+   "is-read-only": false,
+   "description": [
+    "Possible extensions to AdministrativeState."
+   ],
+   "uml-name": "_McyhcGgeEeWmgIwAIZlYKQ"
+  },
+  "y-ssbo-ggi-ee-wmg-iw-ai-zl-ykq": {
+   "id": "y-ssbo-ggi-ee-wmg-iw-ai-zl-ykq",
+   "uml-id": "_YSsboGgiEeWmgIwAIZlYKQ",
+   "enum": [
+    "PLANNED",
+    "POTENTIAL",
+    "INSTALLED",
+    "PENDING_REMOVAL"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The possible values of the lifecycleState."
+   ],
+   "uml-name": "_YSsboGgiEeWmgIwAIZlYKQ"
+  },
+  "lj-ul4-d3-w-eea-ri-h69-pghu-a": {
+   "id": "lj-ul4-d3-w-eea-ri-h69-pghu-a",
+   "uml-id": "_ljUl4D3WEeaRI-H69PghuA",
+   "enum": [
+    "CREATE_POST_ADD",
+    "SET_UPDATE_PUT_MODIFY_WRITE_ADD",
+    "GET_READ",
+    "DELETE_REMOVE"
+   ],
+   "is-read-only": false,
+   "uml-name": "_ljUl4D3WEeaRI-H69PghuA"
+  },
+  "iyt74-d3-k-eea-ri-h69-pghu-a": {
+   "id": "iyt74-d3-k-eea-ri-h69-pghu-a",
+   "uml-id": "_IYT74D3kEeaRI-H69PghuA",
+   "enum": [
+    "STRUCTURE_IS_NOT",
+    "NEW_STRUCTURE_AND_VALUES",
+    "INCREMENTAL_STRUCTURE_AND_VALUES",
+    "ONLY_VALUES_IN_EXISTING_STRUCTURE",
+    "DEFINED_BY_VERB"
+   ],
+   "is-read-only": false,
+   "uml-name": "_IYT74D3kEeaRI-H69PghuA"
+  },
+  "l4-y9-qe2-d-eea-gxd-x-ei-nf4-t-a": {
+   "id": "l4-y9-qe2-d-eea-gxd-x-ei-nf4-t-a",
+   "uml-id": "_L4Y9QE2DEeaGxdXEiNf4tA",
+   "enum": [
+    "BEST_EFFORT",
+    "EXACT_MATCH"
+   ],
+   "is-read-only": false,
+   "uml-name": "_L4Y9QE2DEeaGxdXEiNf4tA"
+  },
+  "nd-xvme2-d-eea-gxd-x-ei-nf4-t-a": {
+   "id": "nd-xvme2-d-eea-gxd-x-ei-nf4-t-a",
+   "uml-id": "_ndXVME2DEeaGxdXEiNf4tA",
+   "enum": [
+    "NO_PAUSE_POSSIBLE"
+   ],
+   "is-read-only": false,
+   "uml-name": "_ndXVME2DEeaGxdXEiNf4tA"
+  },
+  "y2-wm8-eq-eeas-l6-dcj-i1-v-ea": {
+   "id": "y2-wm8-eq-eeas-l6-dcj-i1-v-ea",
+   "uml-id": "_y2WM8EQ-EeasL6dcjI1vEA",
+   "enum": [
+    "MALE",
+    "FEMALE",
+    "SYMMETRIC_NEUTRAL"
+   ],
+   "is-read-only": false,
+   "description": [
+    "Most connector schems are asymmetric such that there are two orientations of the connector where a mating is only possible between two connectors of different orientations. A multi-pin connector may have a mix of pin orientations. In this case it is expected that the dominant orientation of pin is chosen for the connector orientation."
+   ],
+   "uml-name": "_y2WM8EQ-EeasL6dcjI1vEA"
+  },
+  "m-mo-bg-e-qv-eeas-l6-dcj-i1-v-ea": {
+   "id": "m-mo-bg-e-qv-eeas-l6-dcj-i1-v-ea",
+   "uml-id": "_mMOBgEQvEeasL6dcjI1vEA",
+   "enum": [
+    "SUBRACK",
+    "CIRCUIT_PACK",
+    "SMALL_FORMFACTOR_PLUGGABLE",
+    "STAND_ALONE_UNIT",
+    "RACK"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The form of equipment."
+   ],
+   "uml-name": "_mMOBgEQvEeasL6dcjI1vEA"
+  },
+  "0-k-ko-erl-eeas-l6-dcj-i1-v-ea": {
+   "id": "0-k-ko-erl-eeas-l6-dcj-i1-v-ea",
+   "uml-id": "_0K-KoERLEeasL6dcjI1vEA",
+   "enum": [
+    "SLOT"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The form of holder."
+   ],
+   "uml-name": "_0K-KoERLEeasL6dcjI1vEA"
+  }
+ }
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/g.874.1-model.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/g.874.1-model.schema-information.json
new file mode 100644
index 0000000..b8e4d4a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/g.874.1-model.schema-information.json
@@ -0,0 +1,602 @@
+{
+ "schema-information": {
+  "otn-current-data": {
+   "id": "otn-current-data",
+   "uml-id": "_OxyHAOGJEeGhaeLtr7IxXg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "This object class is an abstract class from which the OTN layer-specific CurrentData object classes are inherited. This object class is a subclass of the Q.822 CurrentData object class, which in turn is a subclass of X.739 Scanner object class. It inherits the following attributes: scannerId, operationalState, granularityPeriod, administrativeState, suspectIntervalFlag, elapsedTime, observedObjectClass, and observedObjectInstance."
+   ],
+   "uml-name": "OTN_CurrentData"
+  },
+  "timestamp": {
+   "id": "timestamp",
+   "uml-id": "_bGwfoOGJEeGhaeLtr7IxXg",
+   "uml-type": "ownedAttribute",
+   "type": "_X-HZUNwbEeGoneTbGt8X0A",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "The timestamp associated with when the current data was collected."
+   ],
+   "uml-name": "timestamp"
+  },
+  "otn-history-data": {
+   "id": "otn-history-data",
+   "uml-id": "_dQ2mYOGOEeGhaeLtr7IxXg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "This object class is an abstract class from which the OTN layer-specific HistoryData object classes are inherited."
+   ],
+   "uml-name": "OTN_HistoryData"
+  },
+  "suspect-interval-flag": {
+   "id": "suspect-interval-flag",
+   "uml-id": "_M8IDNceIEeSfd5vyUJsimg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are:- Suspect data were detected by the actual resource doing data collection.- Transition of the administrativeState attribute to/from the 'lock' state.- Transition of the operationalState to/from the 'disabled' state.- Scheduler setting that inhibits the collection function.- The performance counters were reset during the interval.- The currentData (or subclass) object instance was created during the monitoring period."
+   ],
+   "uml-name": "suspectIntervalFlag",
+   "controlType": "checkbox"
+  },
+  "«q.822»-current-data": {
+   "id": "«q.822»-current-data",
+   "uml-id": "_M8IDMceIEeSfd5vyUJsimg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "«Q.822»-CurrentData"
+  },
+  "elapsed-time": {
+   "id": "elapsed-time",
+   "uml-id": "_M8IDOMeIEeSfd5vyUJsimg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "elapsedTime",
+   "controlType": "number"
+  },
+  "«q.822»-history-data": {
+   "id": "«q.822»-history-data",
+   "uml-id": "_M8IDVMeIEeSfd5vyUJsimg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "«Q.822»-HistoryData"
+  },
+  "history-data-id": {
+   "id": "history-data-id",
+   "uml-id": "_M8IDWMeIEeSfd5vyUJsimg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "historyDataId",
+   "controlType": "text"
+  },
+  "period-end-time": {
+   "id": "period-end-time",
+   "uml-id": "_M8IDWceIEeSfd5vyUJsimg",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel-CoreModel/CoreModel.uml#_oGqi1lLNEeO75dO39GbF8Q",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "periodEndTime"
+  },
+  "granularity-period": {
+   "id": "granularity-period",
+   "uml-id": "_M8IDWseIEeSfd5vyUJsimg",
+   "uml-type": "ownedAttribute",
+   "type": "_Y6WUEEamEeabNPX3o7rjtw",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "granularityPeriod",
+   "controlType": [
+    "unknown",
+    "period-15-min",
+    "period-24-hours"
+   ]
+  },
+  "«x.739»-scanner": {
+   "id": "«x.739»-scanner",
+   "uml-id": "_7wb90ceIEeSfd5vyUJsimg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "«X.739»-Scanner"
+  },
+  "scanner-id": {
+   "id": "scanner-id",
+   "uml-id": "_7wb91ceIEeSfd5vyUJsimg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "scannerId",
+   "controlType": "text"
+  },
+  "administrative-state": {
+   "id": "administrative-state",
+   "uml-id": "_7wb92seIEeSfd5vyUJsimg",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel-CoreModel/CoreModel.uml#_KSKOYLEuEeSZUdYfPSdgew",
+   "order-number": 3,
+   "is-read-only": false,
+   "uml-name": "administrativeState"
+  },
+  "«x.721»-top": {
+   "id": "«x.721»-top",
+   "uml-id": "_BMJ0EceTEeS6-cawxfHpnA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "This is the top level of managed object class hierarchy and every other managed object class is a specialization of either this generic class (top) or a specialization of subclass of top. The parameter miscellaneousError is to be used when a processing failure has occurred and the error condition encountered does not match any of object's defined specific error types."
+   ],
+   "uml-name": "«X.721»-Top"
+  },
+  "object-class": {
+   "id": "object-class",
+   "uml-id": "_BMJ0FceTEeS6-cawxfHpnA",
+   "uml-type": "ownedAttribute",
+   "type": "_ltGzFMeUEeS6-cawxfHpnA",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "ObjectClass ::= CHOICE{ globalForm [0] OBJECT IDENTIFIER, localForm [1] INTEGER}"
+   ],
+   "uml-name": "objectClass"
+  },
+  "name-binding": {
+   "id": "name-binding",
+   "uml-id": "_BMJ0F8eTEeS6-cawxfHpnA",
+   "uml-type": "ownedAttribute",
+   "type": "_ltGzFMeUEeS6-cawxfHpnA",
+   "order-number": 2,
+   "is-read-only": false,
+   "uml-name": "nameBinding"
+  },
+  "date-and-time": {
+   "id": "date-and-time",
+   "uml-id": "_X-HZUNwbEeGoneTbGt8X0A",
+   "uml-type": "uml:DataType",
+   "description": [
+    "This primitive type defines the date and time according to the following structure:  yyyyMMddhhmmss.s[Z|{+|-}HHMm]  where: yyyy  0000 .. 9999  year MM  01 .. 12  month dd  01 .. 31  day hh  00 .. 23  hour mm  00 .. 59  minute ss  00 .. 59  second s  .0 .. .9  tenth of second (set to  .0  if EMS or NE cannot support this granularity) Z  Z  indicates UTC (rather than local time) {+|-}  +  or  -  delta from UTC HH  00 .. 23  time zone difference in hours Mm  00 .. 59  time zone difference in minutes."
+   ],
+   "uml-name": "DateAndTime"
+  },
+  "5-g6-yq-oo-ee-cj-nnlz-cc6-mew": {
+   "id": "5-g6-yq-oo-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_5G6YQOo-EeCjNNLZCc6mew",
+   "enum": [
+    "SINK",
+    "SOURCE",
+    "BIDIRECTIONAL"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The enumeration with the options for directionality of the termination point."
+   ],
+   "uml-name": "_5G6YQOo-EeCjNNLZCc6mew"
+  },
+  "r-u8-a-m-opf-ee-cj-nnlz-cc6-mew": {
+   "id": "r-u8-a-m-opf-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_rU8aMOpfEeCjNNLZCc6mew",
+   "enum": [
+    "GCC1",
+    "GCC2",
+    "GCC1_AND_GCC2"
+   ],
+   "is-read-only": false,
+   "description": [
+    "This enumeration indicates the GCC access represented by the entity."
+   ],
+   "uml-name": "_rU8aMOpfEeCjNNLZCc6mew"
+  },
+  "w7-1-o-opi-ee-cj-nnlz-cc6-mew": {
+   "id": "w7-1-o-opi-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_W7-1oOpiEeCjNNLZCc6mew",
+   "enum": [
+    "ENABLED",
+    "DISABLED"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The list of valid operational states for the connection."
+   ],
+   "uml-name": "_W7-1oOpiEeCjNNLZCc6mew"
+  },
+  "g0-z-cs-os-d-ee-cj-nnlz-cc6-mew": {
+   "id": "g0-z-cs-os-d-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_g0zCsOsDEeCjNNLZCc6mew",
+   "enum": [
+    "REVERTIVE",
+    "NON-REVERTIVE"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The operation type associated with the protection mechanism (either non-revertive or revertive)."
+   ],
+   "uml-name": "_g0zCsOsDEeCjNNLZCc6mew"
+  },
+  "jl09-g-os-k-ee-cj-nnlz-cc6-mew": {
+   "id": "jl09-g-os-k-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_Jl09gOsKEeCjNNLZCc6mew",
+   "enum": [
+    "EXERCISE",
+    "MANUAL_SWITCH",
+    "FORCED_SWITCH",
+    "LOCKOUT",
+    "RELEASE_OF_MANUAL_SWITCH",
+    "RELEASE_OF_FORCED_SWITCH",
+    "RELEASE_OF_LOCKOUT"
+   ],
+   "is-read-only": false,
+   "description": [
+    "This enumeration contains the options for the actions that instruct the protection system for performing specific protection switching operations."
+   ],
+   "uml-name": "_Jl09gOsKEeCjNNLZCc6mew"
+  },
+  "bwx-bq-ow5-ee-cj-nnlz-cc6-mew": {
+   "id": "bwx-bq-ow5-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_bwxBQOw5EeCjNNLZCc6mew",
+   "enum": [
+    "UNLOCKED",
+    "LOCKED",
+    "SHUTTING_DOWN"
+   ],
+   "is-read-only": false,
+   "description": [
+    "For more information on Administrative State, See ITU-T Recs. X.731 and M.3100."
+   ],
+   "uml-name": "_bwxBQOw5EeCjNNLZCc6mew"
+  },
+  "ch-q5-o-ow-ee-cj-nnlz-cc6-mew": {
+   "id": "ch-q5-o-ow-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_ChQ5oOw-EeCjNNLZCc6mew",
+   "enum": [
+    "2.5_G",
+    "10_G",
+    "40_G",
+    "100_G"
+   ],
+   "is-read-only": false,
+   "description": [
+    "Provides an enumeration with the meaning of each  k  value."
+   ],
+   "uml-name": "_ChQ5oOw-EeCjNNLZCc6mew"
+  },
+  "z-bty-u-ow-ee-cj-nnlz-cc6-mew": {
+   "id": "z-bty-u-ow-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_ZBtyUOw_EeCjNNLZCc6mew",
+   "enum": [
+    "DAPI",
+    "SAPI",
+    "BOTH"
+   ],
+   "is-read-only": false,
+   "description": [
+    "List of modes for trace identifier mismatch detection."
+   ],
+   "uml-name": "_ZBtyUOw_EeCjNNLZCc6mew"
+  },
+  "hf864-ox-a-ee-cj-nnlz-cc6-mew": {
+   "id": "hf864-ox-a-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_HF864OxAEeCjNNLZCc6mew",
+   "enum": [
+    "LOS_P",
+    "OCI",
+    "SSF_P",
+    "SSF_O",
+    "SSF",
+    "TIM",
+    "DEG",
+    "BDI"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The valid list of problems for the entity."
+   ],
+   "uml-name": "_HF864OxAEeCjNNLZCc6mew"
+  },
+  "w-po-no-o3-e-ee-cj-nnlz-cc6-mew": {
+   "id": "w-po-no-o3-e-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_WPoNoO3eEeCjNNLZCc6mew",
+   "enum": [
+    "INTRUSIVE",
+    "NON-INTRUSIVE"
+   ],
+   "is-read-only": false,
+   "description": [
+    "Monitoring types for the tandem connection monitoring function."
+   ],
+   "uml-name": "_WPoNoO3eEeCjNNLZCc6mew"
+  },
+  "oi-7-w-o6-q-ee-cj-nnlz-cc6-mew": {
+   "id": "oi-7-w-o6-q-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_OI-7wO6QEeCjNNLZCc6mew",
+   "enum": [
+    "OPERATIONAL",
+    "TRANSPARENT",
+    "MONITOR"
+   ],
+   "is-read-only": false,
+   "description": [
+    "List of value modes for the sink side of the tandem connection monitoring function."
+   ],
+   "uml-name": "_OI-7wO6QEeCjNNLZCc6mew"
+  },
+  "zn-m8-c-o6-z-ee-cj-nnlz-cc6-mew": {
+   "id": "zn-m8-c-o6-z-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_ZnM8cO6ZEeCjNNLZCc6mew",
+   "enum": [
+    "40_G",
+    "100_G"
+   ],
+   "is-read-only": false,
+   "description": [
+    "Provides an enumeration with the meaning of each  k  value."
+   ],
+   "uml-name": "_ZnM8cO6ZEeCjNNLZCc6mew"
+  },
+  "p-v-f8-o6-a-ee-cj-nnlz-cc6-mew": {
+   "id": "p-v-f8-o6-a-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_pV-F8O6aEeCjNNLZCc6mew",
+   "enum": [
+    "LOS",
+    "LOL"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The valid list of problems for the entity."
+   ],
+   "uml-name": "_pV-F8O6aEeCjNNLZCc6mew"
+  },
+  "qw1-syo6-b-ee-cj-nnlz-cc6-mew": {
+   "id": "qw1-syo6-b-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_QW1SYO6bEeCjNNLZCc6mew",
+   "enum": [
+    "LOS"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The valid list of problems for the entity."
+   ],
+   "uml-name": "_QW1SYO6bEeCjNNLZCc6mew"
+  },
+  "o-ouk-o6-b-ee-cj-nnlz-cc6-mew": {
+   "id": "o-ouk-o6-b-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_o-oukO6bEeCjNNLZCc6mew",
+   "enum": [
+    "2.5_G",
+    "10_G",
+    "40_G",
+    "2.5_10_G",
+    "10_40_G",
+    "2.5_10_40_G"
+   ],
+   "is-read-only": false,
+   "description": [
+    "Provides an enumeration with the meaning of each  k  value."
+   ],
+   "uml-name": "_o-oukO6bEeCjNNLZCc6mew"
+  },
+  "krcg4-o6-d-ee-cj-nnlz-cc6-mew": {
+   "id": "krcg4-o6-d-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_KRCG4O6dEeCjNNLZCc6mew",
+   "enum": [
+    "INTRA_DOMAIN",
+    "INTER_DOMAIN"
+   ],
+   "is-read-only": false,
+   "description": [
+    "This enumeration provides the options for the interface associated with OTMn."
+   ],
+   "uml-name": "_KRCG4O6dEeCjNNLZCc6mew"
+  },
+  "eo-py-io6-q-ee-cj-nnlz-cc6-mew": {
+   "id": "eo-py-io6-q-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_EOPyIO6qEeCjNNLZCc6mew",
+   "enum": [
+    "INTRA_OFFICE",
+    "SHORTHAUL",
+    "LONGHAUL"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The valid options for reach of the optical cable."
+   ],
+   "uml-name": "_EOPyIO6qEeCjNNLZCc6mew"
+  },
+  "6-bt3-qo6-q-ee-cj-nnlz-cc6-mew": {
+   "id": "6-bt3-qo6-q-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_6Bt3QO6qEeCjNNLZCc6mew",
+   "enum": [
+    "ON",
+    "OFF"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The enumeration of the options for the Automatic Power Reduction Status."
+   ],
+   "uml-name": "_6Bt3QO6qEeCjNNLZCc6mew"
+  },
+  "f-lz-nqo6-v-ee-cj-nnlz-cc6-mew": {
+   "id": "f-lz-nqo6-v-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_FLzNQO6vEeCjNNLZCc6mew",
+   "enum": [
+    "BDI_P",
+    "BDI_O",
+    "BDI",
+    "TIM",
+    "LOS_P",
+    "LOS_O",
+    "LOS"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The valid list of problems for the entity."
+   ],
+   "uml-name": "_FLzNQO6vEeCjNNLZCc6mew"
+  },
+  "na-el-yo6-w-ee-cj-nnlz-cc6-mew": {
+   "id": "na-el-yo6-w-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_NAElYO6wEeCjNNLZCc6mew",
+   "enum": [
+    "REGULAR",
+    "NONE",
+    "VENDOR_SPECIFIC",
+    "FUNCTIONALLY_STANDARDIZED"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The adaptation options for OTUk_ConnectionTermationPoints."
+   ],
+   "uml-name": "_NAElYO6wEeCjNNLZCc6mew"
+  },
+  "wg-r-hc-o6-w-ee-cj-nnlz-cc6-mew": {
+   "id": "wg-r-hc-o6-w-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_wgRHcO6wEeCjNNLZCc6mew",
+   "enum": [
+    "2.5_G",
+    "10_G",
+    "40_G",
+    "100_G"
+   ],
+   "is-read-only": false,
+   "description": [
+    "Provides an enumeration with the meaning of each  k  value."
+   ],
+   "uml-name": "_wgRHcO6wEeCjNNLZCc6mew"
+  },
+  "6-y-g-eo6-w-ee-cj-nnlz-cc6-mew": {
+   "id": "6-y-g-eo6-w-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_6Y_gEO6wEeCjNNLZCc6mew",
+   "enum": [
+    "LOF",
+    "AIS",
+    "LOM"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The valid list of problems for the entity."
+   ],
+   "uml-name": "_6Y_gEO6wEeCjNNLZCc6mew"
+  },
+  "x-hnwmo6-x-ee-cj-nnlz-cc6-mew": {
+   "id": "x-hnwmo6-x-ee-cj-nnlz-cc6-mew",
+   "uml-id": "_xHNWMO6xEeCjNNLZCc6mew",
+   "enum": [
+    "TIM",
+    "DEG",
+    "BDI",
+    "SSF"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The valid list of problems for the entity."
+   ],
+   "uml-name": "_xHNWMO6xEeCjNNLZCc6mew"
+  },
+  "krq3-mk8-k-ee-g-z-yhf-u3-o-m-yg": {
+   "id": "krq3-mk8-k-ee-g-z-yhf-u3-o-m-yg",
+   "uml-id": "_KRQ3MK8KEeG_zYhfU3oMYg",
+   "enum": [
+    "SINK",
+    "SOURCE"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The enumeration with the options for directionality for nonintrusive monitoring."
+   ],
+   "uml-name": "_KRQ3MK8KEeG_zYhfU3oMYg"
+  },
+  "q-bme4-lu-y-ee-geq-z-lpdv-u3-ba": {
+   "id": "q-bme4-lu-y-ee-geq-z-lpdv-u3-ba",
+   "uml-id": "_qBme4LuYEeGeqZLpdvU3BA",
+   "enum": [
+    "PERCENTAGE",
+    "NUMBER_ERRORED_BLOCKS"
+   ],
+   "is-read-only": false,
+   "description": [
+    "<p>The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer.</p>"
+   ],
+   "uml-name": "_qBme4LuYEeGeqZLpdvU3BA"
+  },
+  "parz8-nw-a-ee-gone-tb-gt8-x0-a": {
+   "id": "parz8-nw-a-ee-gone-tb-gt8-x0-a",
+   "uml-id": "_Parz8NwAEeGoneTbGt8X0A",
+   "enum": [
+    "DWDM",
+    "CWDM",
+    "NO_WDM"
+   ],
+   "is-read-only": false,
+   "uml-name": "_Parz8NwAEeGoneTbGt8X0A"
+  },
+  "v1-tu-a-nw-a-ee-gone-tb-gt8-x0-a": {
+   "id": "v1-tu-a-nw-a-ee-gone-tb-gt8-x0-a",
+   "uml-id": "_V1TuANwAEeGoneTbGt8X0A",
+   "enum": [
+    "STANDARD",
+    "PROPRIETARY"
+   ],
+   "is-read-only": false,
+   "uml-name": "_V1TuANwAEeGoneTbGt8X0A"
+  },
+  "yt7-s4-pzg-ee-g3-u-a-qk-ii-ctg": {
+   "id": "yt7-s4-pzg-ee-g3-u-a-qk-ii-ctg",
+   "uml-id": "_yt7S4PzgEeG3u-aQKIiCtg",
+   "enum": [
+    "PATH",
+    "TCM1",
+    "TCM2",
+    "TCM3",
+    "TCM4",
+    "TCM5",
+    "TCM6",
+    "SECTION"
+   ],
+   "is-read-only": false,
+   "uml-name": "_yt7S4PzgEeG3u-aQKIiCtg"
+  },
+  "lg3-y-qovv-ee-ky-u85-edu-w-r-a": {
+   "id": "lg3-y-qovv-ee-ky-u85-edu-w-r-a",
+   "uml-id": "_LG3yQOVVEeKyU85eduW_rA",
+   "enum": [
+    "CONTROLLER",
+    "RESPONDER"
+   ],
+   "is-read-only": false,
+   "uml-name": "_LG3yQOVVEeKyU85eduW_rA"
+  },
+  "7-fy9-s-jsc-ee-o-lx-kcui-ytz-cg": {
+   "id": "7-fy9-s-jsc-ee-o-lx-kcui-ytz-cg",
+   "uml-id": "_7fy9sJSCEeOLxKCUIYtzCg",
+   "enum": [
+    "INCREASE_BW",
+    "DECREASE_BW"
+   ],
+   "is-read-only": false,
+   "uml-name": "_7fy9sJSCEeOLxKCUIYtzCg"
+  },
+  "y6-wue-eam-eeab-npx3-o7-rjtw": {
+   "id": "y6-wue-eam-eeab-npx3-o7-rjtw",
+   "uml-id": "_Y6WUEEamEeabNPX3o7rjtw",
+   "enum": [
+    "UNKNOWN",
+    "PERIOD_15MIN",
+    "PERIOD_24HOURS"
+   ],
+   "is-read-only": false,
+   "description": [
+    "The enumeration with the options for granularity period of the performance data."
+   ],
+   "uml-name": "_Y6WUEEamEeabNPX3o7rjtw"
+  }
+ }
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/maintenancemode.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/maintenancemode.json
new file mode 100644
index 0000000..3d0a414
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/maintenancemode.json
@@ -0,0 +1,22 @@
+{
+    "maintenancemode": {
+        "DragonWave-Z3":{
+            "node":"DragonWave-Z3",
+            "filter": [{
+                "definition":{},
+                "description":"",
+                "start":"2018-01-01T10:00+00:00",
+                "end":"2018-10-10T10:00+00:00"
+            }]
+        },
+        "MaintenanceMode":{
+            "node":"MaintenanceMode",
+            "filter": [{
+                "definition":{},
+                "description":"",
+                "start":"2018-01-01T10:00+00:00",
+                "end":"2018-10-10T10:00+00:00"
+            }]
+        }
+    }
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.schema-information.json
new file mode 100644
index 0000000..6568634
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.schema-information.json
@@ -0,0 +1,3161 @@
+{
+ "schema-information": {
+  "mw-air-interface-pac": {
+   "id": "mw-air-interface-pac",
+   "uml-id": "__1kQ0Hf4EeW-M8kopGJqEA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "MW_AirInterface_Pac"
+  },
+  "layer-protocol": {
+   "id": "layer-protocol",
+   "uml-id": "_m_QIglpKEeax66gMnmfzpQ",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel-CoreModel/CoreModel.uml#_gROecFYXEeOVGaP4lO41SQ",
+   "order-number": 1,
+   "is-read-only": false,
+   "is-key": 1,
+   "description": [
+    "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"
+   ],
+   "uml-name": "_layerProtocol"
+  },
+  "air-interface-capability-list": {
+   "id": "air-interface-capability-list",
+   "uml-id": "_-LlKoIejEeWaZYk7gpuOtw",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Describes the 'analog' capabilities of modem and transmitter of the microwave device. Value ranges of attributes are not independently (e.g. min. and max. transmit power depends on modulation). Legal combinations of values are expressed in transmissionModeTypes."
+   ],
+   "uml-name": "AirInterfaceCapability"
+  },
+  "air-interface-configuration": {
+   "id": "air-interface-configuration",
+   "uml-id": "_KOcsUIe0EeWnUdmvl3PBkw",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Configuration of the radio link."
+   ],
+   "uml-name": "AirInterfaceConfiguration"
+  },
+  "air-interface-status": {
+   "id": "air-interface-status",
+   "uml-id": "_iCTioHmIEeWRAfnL3fvovg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Measurements of current values on the air interface and operational status of the device."
+   ],
+   "uml-name": "AirInterfaceStatus"
+  },
+  "air-interface-current-problems": {
+   "id": "air-interface-current-problems",
+   "uml-id": "_UF8VcHmIEeWRAfnL3fvovg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "AirInterfaceCurrentProblems"
+  },
+  "air-interface-current-performance": {
+   "id": "air-interface-current-performance",
+   "uml-id": "_CX-iIKS6EeWyu_jasKgNwA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Aggregated performance information of the air interface at a particular moment."
+   ],
+   "uml-name": "AirInterfaceCurrentPerformance"
+  },
+  "air-interface-historical-performances": {
+   "id": "air-interface-historical-performances",
+   "uml-id": "_fChNMHmHEeWRAfnL3fvovg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Aggregated performance information of the air interface for a pre-defined measurement interval."
+   ],
+   "uml-name": "AirInterfaceHistoricalPerformances"
+  },
+  "type-of-equipment": {
+   "id": "type-of-equipment",
+   "uml-id": "_gK4jMJUBEeWIaZzoaYJ6_A",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": true,
+   "description": [
+    "This parameter indicates the equipment type. Instead of uploading the complete set of capabilities, capabilities of the same equipment type could be reused. Should be unique for a combination of modem, radio and their respective firmware."
+   ],
+   "uml-name": "typeOfEquipment",
+   "controlType": "text"
+  },
+  "tx-frequency-min": {
+   "id": "tx-frequency-min",
+   "uml-id": "_90Xe0HfcEeW-h9gN8LYm4Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 2,
+   "is-read-only": true,
+   "unit": "kHz",
+   "description": [
+    "Value of the minimum transmit frequency tunable at the air interface."
+   ],
+   "uml-name": "txFrequencyMin",
+   "controlType": "number"
+  },
+  "tx-frequency-max": {
+   "id": "tx-frequency-max",
+   "uml-id": "_-1ztsHfcEeW-h9gN8LYm4Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 3,
+   "is-read-only": true,
+   "unit": "kHz",
+   "description": [
+    "Value of the maximum transmit frequency tunable at the air interface."
+   ],
+   "uml-name": "txFrequencyMax",
+   "controlType": "number"
+  },
+  "rx-frequency-min": {
+   "id": "rx-frequency-min",
+   "uml-id": "_BLqx0HfdEeW-h9gN8LYm4Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 4,
+   "is-read-only": true,
+   "unit": "kHz",
+   "description": [
+    "Value of the minimum receive frequency tunable at the air interface."
+   ],
+   "uml-name": "rxFrequencyMin",
+   "controlType": "number"
+  },
+  "rx-frequency-max": {
+   "id": "rx-frequency-max",
+   "uml-id": "_CSBV4HfdEeW-h9gN8LYm4Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 5,
+   "is-read-only": true,
+   "unit": "kHz",
+   "description": [
+    "Value of the maximum receive frequency tunable at the air interface."
+   ],
+   "uml-name": "rxFrequencyMax",
+   "controlType": "number"
+  },
+  "adaptive-modulation-is-avail": {
+   "id": "adaptive-modulation-is-avail",
+   "uml-id": "_ClmuUHffEeW-h9gN8LYm4Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 6,
+   "is-read-only": true,
+   "description": [
+    "In case the device is capable of adaptive modulation, this field shall contain a 'true'."
+   ],
+   "uml-name": "adaptiveModulationIsAvail",
+   "controlType": "checkbox"
+  },
+  "mimo-is-avail": {
+   "id": "mimo-is-avail",
+   "uml-id": "_qXBrkH2eEeWaPP5xsIT8pQ",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 7,
+   "is-read-only": true,
+   "description": [
+    "In case the device is capable of MIMO, this field shall contain a 'true'."
+   ],
+   "uml-name": "mimoIsAvail",
+   "controlType": "checkbox"
+  },
+  "mimo-channels": {
+   "id": "mimo-channels",
+   "uml-id": "_qysT4H2eEeWaPP5xsIT8pQ",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 8,
+   "is-read-only": true,
+   "unit": "channels",
+   "description": [
+    "Maximum number (n) of spatial multiplexing streams that can be conveyed by an n x n MIMO configuration."
+   ],
+   "uml-name": "mimoChannels",
+   "controlType": "number"
+  },
+  "alic-is-avail": {
+   "id": "alic-is-avail",
+   "uml-id": "_a3HgMIL9EeWMcJAvkeTn2w",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 9,
+   "is-read-only": true,
+   "description": [
+    "In case the microwave radio is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), this field shall contain a 'true'."
+   ],
+   "uml-name": "alicIsAvail",
+   "controlType": "checkbox"
+  },
+  "atpc-is-avail": {
+   "id": "atpc-is-avail",
+   "uml-id": "_iRRtgHftEeW-h9gN8LYm4Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 10,
+   "is-read-only": true,
+   "description": [
+    "In case the microwave radio is capable of ATPC, this field shall contain a 'true'."
+   ],
+   "uml-name": "atpcIsAvail",
+   "controlType": "checkbox"
+  },
+  "atpc-range": {
+   "id": "atpc-range",
+   "uml-id": "_ErwNYHfdEeW-h9gN8LYm4Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 11,
+   "is-read-only": true,
+   "unit": "dB",
+   "description": [
+    "Extent of the ATPC range."
+   ],
+   "uml-name": "atpcRange",
+   "controlType": "number"
+  },
+  "encryption-is-avail": {
+   "id": "encryption-is-avail",
+   "uml-id": "_4uPM8E58EeaCk6G-lyG1OQ",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 10,
+   "is-read-only": true,
+   "description": [
+    "Shall be marked 'true', if Ethernet payload encryption is available."
+   ],
+   "uml-name": "encryptionIsAvail",
+   "controlType": "checkbox"
+  },
+  "transmission-mode-list": {
+   "id": "transmission-mode-list",
+   "uml-id": "_nwbvcPXREeW9zIqh2WHHww",
+   "uml-type": "ownedAttribute",
+   "type": "_zG34sPXQEeW9zIqh2WHHww",
+   "order-number": 5,
+   "is-read-only": true,
+   "uml-name": "transmissionModeList"
+  },
+  "maintenance-timer-range": {
+   "id": "maintenance-timer-range",
+   "uml-id": "_I1FYsMWZEeW3xsRKtpCLuA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 14,
+   "is-read-only": true,
+   "unit": "s",
+   "description": [
+    "Available time periods for maintenance configurations (e.g. the loop back of microwave header information) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360')."
+   ],
+   "uml-name": "maintenanceTimerRange",
+   "controlType": "text"
+  },
+  "supported-alarms": {
+   "id": "supported-alarms",
+   "uml-id": "_ecCeb0aqEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 2,
+   "is-read-only": true,
+   "description": [
+    "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device."
+   ],
+   "uml-name": "supportedAlarms",
+   "controlType": "text"
+  },
+  "supported-channel-plan-list": {
+   "id": "supported-channel-plan-list",
+   "uml-id": "_8gpNIHfcEeW-h9gN8LYm4Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": true,
+   "is-key": 1,
+   "description": [
+    "Unique name (e.g. ECC/REC/(01)04_Annex 5) of a document, which describes a frequency grid that can be adjusted at the air interface. Corresponding channel plans to be delivered by the hardware vendor and to be stored by the operator in an controller/application attached database."
+   ],
+   "uml-name": "supportedChannelPlan",
+   "controlType": "text"
+  },
+  "air-interface-name": {
+   "id": "air-interface-name",
+   "uml-id": "_XMDggIL5EeWMcJAvkeTn2w",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "Operator specific microwave link ID (often used for coding area, type of element and sequential number)."
+   ],
+   "uml-name": "airInterfaceName",
+   "controlType": "text"
+  },
+  "radio-signal-id": {
+   "id": "radio-signal-id",
+   "uml-id": "_QY9KoHf5EeW-M8kopGJqEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 2,
+   "is-read-only": false,
+   "description": [
+    "The radioSignalId is transmitted on the air interface so the remote site of the link synchronizes on the correct transmitter. The local radio MUST NOT synchronize on a radio signal with a different radioSignalId. The link ID is neither an ID necessary to span the model nor an ID referencing external data. It is just some sort of name of the link transmitted so the correct remote site can be identified in an interference situation. The value zero might be used to make the microwave to disable the link ID check."
+   ],
+   "uml-name": "radioSignalID",
+   "controlType": "text"
+  },
+  "tx-frequency": {
+   "id": "tx-frequency",
+   "uml-id": "_UNE8gHf5EeW-M8kopGJqEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 3,
+   "is-read-only": false,
+   "unit": "kHz",
+   "description": [
+    "Center frequency of the transmit channel. The values to be configured have to exactly match the values listed in the international agreement referenced in channelPlanID. In case of automated selection of the transmit frequency this field shall describe the lowest center frequency selectable."
+   ],
+   "uml-name": "txFrequency",
+   "controlType": "number"
+  },
+  "rx-frequency": {
+   "id": "rx-frequency",
+   "uml-id": "_W7ayEHf5EeW-M8kopGJqEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 4,
+   "is-read-only": false,
+   "unit": "kHz",
+   "description": [
+    "Center frequency of the receive channel."
+   ],
+   "uml-name": "rxFrequency",
+   "controlType": "number"
+  },
+  "tx-channel-bandwidth": {
+   "id": "tx-channel-bandwidth",
+   "uml-id": "_bhAdIHf5EeW-M8kopGJqEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 5,
+   "is-read-only": false,
+   "unit": "kHz",
+   "description": [
+    "Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"
+   ],
+   "uml-name": "txChannelBandwidth",
+   "controlType": "number"
+  },
+  "rx-channel-bandwidth": {
+   "id": "rx-channel-bandwidth",
+   "uml-id": "_eKIbgHf5EeW-M8kopGJqEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 6,
+   "is-read-only": false,
+   "unit": "kHz",
+   "description": [
+    "Bandwidth of the receive channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"
+   ],
+   "uml-name": "rxChannelBandwidth",
+   "controlType": "number"
+  },
+  "polarization": {
+   "id": "polarization",
+   "uml-id": "_bVebEI99EeWFluv9KLLl5A",
+   "uml-type": "ownedAttribute",
+   "type": "_e85NsI99EeWFluv9KLLl5A",
+   "order-number": 7,
+   "is-read-only": false,
+   "description": [
+    "Allows documenting the polarization of the air interface."
+   ],
+   "uml-name": "polarization",
+   "controlType": [
+    "not-specified",
+    "horizontal",
+    "vertical"
+   ]
+  },
+  "power-is-on": {
+   "id": "power-is-on",
+   "uml-id": "_p4eR8Hf5EeW-M8kopGJqEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 8,
+   "is-read-only": false,
+   "description": [
+    "Power ON. Activation of the entire radio in a split mount configuration shall be expressed as a 'true'."
+   ],
+   "uml-name": "powerIsOn",
+   "controlType": "checkbox"
+  },
+  "transmitter-is-on": {
+   "id": "transmitter-is-on",
+   "uml-id": "_uYVvgHf5EeW-M8kopGJqEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 9,
+   "is-read-only": false,
+   "description": [
+    "Activation of the transmitter inside the radio shall be expressed as a 'true'."
+   ],
+   "uml-name": "transmitterIsOn",
+   "controlType": "checkbox"
+  },
+  "receiver-is-on": {
+   "id": "receiver-is-on",
+   "uml-id": "_q_XcwEgnEeathrAE0htMiA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 10,
+   "is-read-only": false,
+   "description": [
+    "Maintenance Feature. Activation of the receiver inside the radio shall be expressed as a 'true'. Attribute shall also be used for RX main and RX diversity squelches in case of diversity configurations."
+   ],
+   "uml-name": "receiverIsOn",
+   "controlType": "checkbox"
+  },
+  "tx-power": {
+   "id": "tx-power",
+   "uml-id": "_ZEXmIHf6EeW-M8kopGJqEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 11,
+   "is-read-only": false,
+   "unit": "dBm",
+   "description": [
+    "Transmit power to be configured on the microwave link. Signed Byte is required. The actually operated transmit power might be lower depending on adaptive modulation and ATPC."
+   ],
+   "uml-name": "txPower",
+   "controlType": "number"
+  },
+  "adaptive-modulation-is-on": {
+   "id": "adaptive-modulation-is-on",
+   "uml-id": "_0jhfYHf5EeW-M8kopGJqEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 12,
+   "is-read-only": false,
+   "description": [
+    "Adaptive Modulation. Activation of adaptive modulation shall be expressed as a 'true'."
+   ],
+   "uml-name": "adaptiveModulationIsOn",
+   "controlType": "checkbox"
+  },
+  "modulation-min": {
+   "id": "modulation-min",
+   "uml-id": "_dM_BUHf6EeW-M8kopGJqEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 13,
+   "is-read-only": false,
+   "unit": "symbols",
+   "description": [
+    "Minimum modulation to be configured (in case adaptive modulation is not used, this value represents also the fixed modulation). The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."
+   ],
+   "uml-name": "modulationMin",
+   "controlType": "number"
+  },
+  "modulation-max": {
+   "id": "modulation-max",
+   "uml-id": "_gAHQQHf6EeW-M8kopGJqEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 14,
+   "is-read-only": false,
+   "unit": "symbols",
+   "description": [
+    "Maximum modulation to be configured. The value of this field is only relevant, if Adaptive Modulation has been activated. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."
+   ],
+   "uml-name": "modulationMax",
+   "controlType": "number"
+  },
+  "xpic-is-on": {
+   "id": "xpic-is-on",
+   "uml-id": "_4hi0IHf5EeW-M8kopGJqEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 15,
+   "is-read-only": false,
+   "description": [
+    "Activation of Cross Polarization Interference Cancelation shall be expressed as a 'true'. In case XPIC is not available for the current combination of channel bandwidth and modulation or the hardware in general, this parameter shall always be set to 'false'."
+   ],
+   "uml-name": "xpicIsOn",
+   "controlType": "checkbox"
+  },
+  "mimo-is-on": {
+   "id": "mimo-is-on",
+   "uml-id": "_7t4fIH2dEeWaPP5xsIT8pQ",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 16,
+   "is-read-only": false,
+   "description": [
+    "Activation of Multiple Input Multiple Output (MIMO) shall be expressed as a 'true'."
+   ],
+   "uml-name": "mimoIsOn",
+   "controlType": "checkbox"
+  },
+  "alic-is-on": {
+   "id": "alic-is-on",
+   "uml-id": "_FmWHMHf6EeW-M8kopGJqEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 17,
+   "is-read-only": false,
+   "description": [
+    "Activation of Adjacent Link Interference Cancelation (ALIC) shall be expressed as a 'true'."
+   ],
+   "uml-name": "alicIsOn",
+   "controlType": "checkbox"
+  },
+  "atpc-is-on": {
+   "id": "atpc-is-on",
+   "uml-id": "_9Hz0oHf5EeW-M8kopGJqEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 18,
+   "is-read-only": false,
+   "description": [
+    "ATPC. Activation of Automated Transmit Power Control shall be expressed as a 'true'."
+   ],
+   "uml-name": "atpcIsOn",
+   "controlType": "checkbox"
+  },
+  "atpc-thresh-upper": {
+   "id": "atpc-thresh-upper",
+   "uml-id": "_pR7yMHgAEeW-M8kopGJqEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 19,
+   "is-read-only": false,
+   "unit": "dBm",
+   "description": [
+    "If the receive level is higher than the upper threshold value, the transmitter is notified to decrease transmit power."
+   ],
+   "uml-name": "atpcThreshUpper",
+   "controlType": "number"
+  },
+  "atpc-thresh-lower": {
+   "id": "atpc-thresh-lower",
+   "uml-id": "_sIlPMHgAEeW-M8kopGJqEA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 20,
+   "is-read-only": false,
+   "unit": "dBm",
+   "description": [
+    "If the receive level is lower than the lower threshold value, the transmitter is notified to increase transmit power."
+   ],
+   "uml-name": "atpcThreshLower",
+   "controlType": "number"
+  },
+  "auto-freq-select-is-on": {
+   "id": "auto-freq-select-is-on",
+   "uml-id": "_dG5VAIL-EeWMcJAvkeTn2w",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 21,
+   "is-read-only": false,
+   "description": [
+    "Activation of automatically selecting the transmit frequency in unlicensed bands shall be expressed as a 'true'."
+   ],
+   "uml-name": "autoFreqSelectIsOn",
+   "controlType": "checkbox"
+  },
+  "auto-freq-select-range": {
+   "id": "auto-freq-select-range",
+   "uml-id": "_yH9XMIMCEeWMcJAvkeTn2w",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 22,
+   "is-read-only": false,
+   "unit": "channels",
+   "description": [
+    "Number of transmit channels (starting at the center frequency defined in txFrequency and with channel bandwidth according to txChannelBandwidth) that define the range within the transmit frequency can automatically been chosen."
+   ],
+   "uml-name": "autoFreqSelectRange",
+   "controlType": "number"
+  },
+  "modulation-is-on": {
+   "id": "modulation-is-on",
+   "uml-id": "_kxXzwIMGEeWMcJAvkeTn2w",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 23,
+   "is-read-only": false,
+   "description": [
+    "Maintenance Feature. De-activation of the modulation of the carrier signal for fault management shall be expressed as a 'false'."
+   ],
+   "uml-name": "modulationIsOn",
+   "controlType": "checkbox"
+  },
+  "encryption-is-on": {
+   "id": "encryption-is-on",
+   "uml-id": "_uI7bIE58EeaCk6G-lyG1OQ",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 11,
+   "is-read-only": false,
+   "description": [
+    "Activates encryption of the Ethernet payload."
+   ],
+   "uml-name": "encryptionIsOn",
+   "controlType": "checkbox"
+  },
+  "cryptographic-key": {
+   "id": "cryptographic-key",
+   "uml-id": "_psRpoE58EeaCk6G-lyG1OQ",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 12,
+   "is-read-only": false,
+   "description": [
+    "Key for transforming plaintext into cipher text data."
+   ],
+   "uml-name": "cryptographicKey",
+   "controlType": "text"
+  },
+  "loop-back-kind-on": {
+   "id": "loop-back-kind-on",
+   "uml-id": "_PyRvsHf6EeW-M8kopGJqEA",
+   "uml-type": "ownedAttribute",
+   "type": "_3CZ3UIsDEead4ersMrOjBQ",
+   "order-number": 26,
+   "is-read-only": false,
+   "description": [
+    "Maintenance Feature. The currently configured type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site."
+   ],
+   "uml-name": "loopBackKindOn",
+   "controlType": [
+    "none",
+    "if",
+    "rf"
+   ]
+  },
+  "maintenance-timer": {
+   "id": "maintenance-timer",
+   "uml-id": "_7-oTwCd5EeaJA6AVLNrv_w",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 27,
+   "is-read-only": false,
+   "unit": "s",
+   "description": [
+    "Time of existence of any maintenance configuration (e.g. the loop back of microwave header information). Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange."
+   ],
+   "uml-name": "maintenanceTimer",
+   "controlType": "number"
+  },
+  "problem-kind-severity-list": {
+   "id": "problem-kind-severity-list",
+   "uml-id": "_OMQH02z0Eeaf-__BRLM84g",
+   "uml-type": "ownedAttribute",
+   "type": "_eIml0JH1EeWUdbnmmNiTAA",
+   "order-number": 2,
+   "is-read-only": false,
+   "description": [
+    "Severity of this type of alarm."
+   ],
+   "uml-name": "problemKindSeverity",
+   "controlType": [
+    "non-alarmed",
+    "warning",
+    "minor",
+    "major",
+    "critical"
+   ]
+  },
+  "tx-frequency-cur": {
+   "id": "tx-frequency-cur",
+   "uml-id": "_YZq7gK4tEeWXs6m-9H3KvA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 1,
+   "is-read-only": true,
+   "unit": "kHz",
+   "description": [
+    "Center frequency of the currently operated transmit channel."
+   ],
+   "uml-name": "txFrequencyCur",
+   "controlType": "number"
+  },
+  "rx-frequency-cur": {
+   "id": "rx-frequency-cur",
+   "uml-id": "_33IdUIL-EeWMcJAvkeTn2w",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 2,
+   "is-read-only": true,
+   "unit": "kHz",
+   "description": [
+    "Center frequency of the currently operated receive channel."
+   ],
+   "uml-name": "rxFrequencyCur",
+   "controlType": "number"
+  },
+  "tx-level-cur": {
+   "id": "tx-level-cur",
+   "uml-id": "_L3B5wHgIEeWfutScSwFT9A",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 3,
+   "is-read-only": true,
+   "unit": "dBm",
+   "description": [
+    "Current transmit level."
+   ],
+   "uml-name": "txLevelCur",
+   "controlType": "number"
+  },
+  "rx-level-cur": {
+   "id": "rx-level-cur",
+   "uml-id": "_OHN9AHizEeWfutScSwFT9A",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 4,
+   "is-read-only": true,
+   "unit": "dBm",
+   "description": [
+    "Current receive level."
+   ],
+   "uml-name": "rxLevelCur",
+   "controlType": "number"
+  },
+  "modulation-cur": {
+   "id": "modulation-cur",
+   "uml-id": "_RBMa0HizEeWfutScSwFT9A",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 5,
+   "is-read-only": true,
+   "unit": "symbols",
+   "description": [
+    "Currently operated modulation on transmit path. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."
+   ],
+   "uml-name": "modulationCur",
+   "controlType": "number"
+  },
+  "code-rate-cur": {
+   "id": "code-rate-cur",
+   "uml-id": "_UYyBsHizEeWfutScSwFT9A",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 6,
+   "is-read-only": true,
+   "unit": "%",
+   "description": [
+    "Code rate of the currently operated coding scheme (Net bit rate ≤ Gross bit rate · code rate)."
+   ],
+   "uml-name": "codeRateCur",
+   "controlType": "number"
+  },
+  "snir-cur": {
+   "id": "snir-cur",
+   "uml-id": "_B7G0AEzvEeaRytIQfQ43Wg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 1,
+   "is-read-only": true,
+   "unit": "dB",
+   "description": [
+    "Currently measured signal to (noise+interference) ratio of the combined signals."
+   ],
+   "uml-name": "snirCur",
+   "controlType": "number"
+  },
+  "xpd-cur": {
+   "id": "xpd-cur",
+   "uml-id": "_Z7NvgHizEeWfutScSwFT9A",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 8,
+   "is-read-only": true,
+   "unit": "dB",
+   "description": [
+    "Currently measured cross polarization discrimination."
+   ],
+   "uml-name": "xpdCur",
+   "controlType": "number"
+  },
+  "rf-temp-cur": {
+   "id": "rf-temp-cur",
+   "uml-id": "_d6wuQHizEeWfutScSwFT9A",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 9,
+   "is-read-only": true,
+   "unit": "Celsius",
+   "description": [
+    "Current temperature (in degree Celsius) of the radio module inside the outdoor unit."
+   ],
+   "uml-name": "rfTempCur",
+   "controlType": "number"
+  },
+  "last-status-change": {
+   "id": "last-status-change",
+   "uml-id": "_ecCetEaqEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel-CoreModel/CoreModel.uml#_oGqi1lLNEeO75dO39GbF8Q",
+   "order-number": 1,
+   "is-read-only": true,
+   "description": [
+    "Time the Container entered its current operational status. _format:yyyyMMddhhmmss.s[Z|{+|-}HHMm]; yyyy='0000'..'9999' year; MM='01'..'12' month; dd='01'..'31' day; hh='00'..'23' hour; mm='00'..'59' minute; ss='00'..'59' second; s='.0'..'.9'tenth of second (set to '.0' if EMS or NE cannot support this granularity); Z='Z' indicates UTC (rather than local time); {+|-}='+' or '-' delta from UTC; HH='00'..'23' time zone difference in hours; Mm='00'..'59' time zone difference in minutes."
+   ],
+   "uml-name": "lastStatusChange"
+  },
+  "radio-power-is-up": {
+   "id": "radio-power-is-up",
+   "uml-id": "_sFKXcHizEeWfutScSwFT9A",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 11,
+   "is-read-only": true,
+   "description": [
+    "If the radio unit has power and is switched on, this shall be expressed as a 'true'."
+   ],
+   "uml-name": "radioPowerIsUp",
+   "controlType": "checkbox"
+  },
+  "link-is-up": {
+   "id": "link-is-up",
+   "uml-id": "_5JBPUHizEeWfutScSwFT9A",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 12,
+   "is-read-only": true,
+   "description": [
+    "If connection is established to the remote site with the same linkID, this shall be expressed as a 'true'."
+   ],
+   "uml-name": "linkIsUp",
+   "controlType": "checkbox"
+  },
+  "xpic-is-up": {
+   "id": "xpic-is-up",
+   "uml-id": "_ESRbsHi0EeWfutScSwFT9A",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 13,
+   "is-read-only": true,
+   "description": [
+    "If XPIC is currently actually working (not just configured), this shall be expressed as a 'true'."
+   ],
+   "uml-name": "xpicIsUp",
+   "controlType": "checkbox"
+  },
+  "mimo-is-up": {
+   "id": "mimo-is-up",
+   "uml-id": "_DVaQwIL6EeWMcJAvkeTn2w",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 14,
+   "is-read-only": true,
+   "description": [
+    "If MIMO is currently actually working (not just configured), this shall be expressed as a 'true'."
+   ],
+   "uml-name": "mimoIsUp",
+   "controlType": "checkbox"
+  },
+  "alic-is-up": {
+   "id": "alic-is-up",
+   "uml-id": "_Hte-UHi0EeWfutScSwFT9A",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 15,
+   "is-read-only": true,
+   "description": [
+    "If Adjacent Link Interference Cancelation (ALIC) is currently actually working (not just configured), this shall be expressed as a 'true'."
+   ],
+   "uml-name": "alicIsUp",
+   "controlType": "checkbox"
+  },
+  "atpc-is-up": {
+   "id": "atpc-is-up",
+   "uml-id": "_VimCgMjNEeWYRsWW_rqpgw",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 16,
+   "is-read-only": true,
+   "description": [
+    "If ATPC is currently actually working (not just configured), this shall be expressed as a 'true'."
+   ],
+   "uml-name": "atpcIsUp",
+   "controlType": "checkbox"
+  },
+  "auto-freq-select-is-up": {
+   "id": "auto-freq-select-is-up",
+   "uml-id": "_-PXKsIL-EeWMcJAvkeTn2w",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 17,
+   "is-read-only": true,
+   "description": [
+    "If automated frequency selection is currently actually working (not just configured), this shall be expressed as a 'true'."
+   ],
+   "uml-name": "autoFreqSelectIsUp",
+   "controlType": "checkbox"
+  },
+  "loop-back-kind-up": {
+   "id": "loop-back-kind-up",
+   "uml-id": "_S9prAHi0EeWfutScSwFT9A",
+   "uml-type": "ownedAttribute",
+   "type": "_3CZ3UIsDEead4ersMrOjBQ",
+   "order-number": 18,
+   "is-read-only": true,
+   "description": [
+    "The currently active (not just configured) type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site."
+   ],
+   "uml-name": "loopBackKindUp",
+   "controlType": [
+    "none",
+    "if",
+    "rf"
+   ]
+  },
+  "local-end-point-id": {
+   "id": "local-end-point-id",
+   "uml-id": "_pEsgcFQHEeaCXY7nSBqs6w",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 19,
+   "is-read-only": true,
+   "description": [
+    "The value of the localEndPointId is a vendor specific identifier of the air interface, used by the node to discover a microwave radio link."
+   ],
+   "uml-name": "localEndPointId",
+   "controlType": "text"
+  },
+  "remote-end-point-id": {
+   "id": "remote-end-point-id",
+   "uml-id": "_r3cU4FQHEeaCXY7nSBqs6w",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 20,
+   "is-read-only": true,
+   "description": [
+    "The value of the remoteEndPointId is a vendor specific identifier or the airinterface at the remote side, used to by the node to discover a microwave radio link."
+   ],
+   "uml-name": "remoteEndPointId",
+   "controlType": "text"
+  },
+  "current-problem-list": {
+   "id": "current-problem-list",
+   "uml-id": "_ecCewEaqEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "__h1n4MXpEeWJ6KZuc0h_vw",
+   "order-number": 1,
+   "is-read-only": true,
+   "uml-name": "currentProblemList"
+  },
+  "current-performance-data-list": {
+   "id": "current-performance-data-list",
+   "uml-id": "_ecCexkaqEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "_pA5AQGz6Eeaf-__BRLM84g",
+   "order-number": 1,
+   "is-read-only": true,
+   "description": [
+    "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."
+   ],
+   "uml-name": "currentPerformanceDataList"
+  },
+  "historical-performance-data-list": {
+   "id": "historical-performance-data-list",
+   "uml-id": "_ecCeykaqEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "_pTaToGz6Eeaf-__BRLM84g",
+   "order-number": 1,
+   "is-read-only": true,
+   "uml-name": "historicalPerformanceDataList"
+  },
+  "co-channel-group": {
+   "id": "co-channel-group",
+   "uml-id": "_XBs2YJQrEeWOu_cDl8dd7w",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Required for configuring XPIC, MIMO and ALIC."
+   ],
+   "uml-name": "CoChannelGroup"
+  },
+  "co-channel-group-id": {
+   "id": "co-channel-group-id",
+   "uml-id": "_pIjBgEy7EeaRytIQfQ43Wg",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg",
+   "order-number": 1,
+   "is-read-only": false,
+   "is-key": 1,
+   "uml-name": "coChannelGroupId"
+  },
+  "air-interface-list": {
+   "id": "air-interface-list",
+   "uml-id": "_tIadUCJeEeaCUo1MUtSuEg",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel-CoreModel/CoreModel.uml#_eEpDMFX4EeOVGaP4lO41SQ",
+   "order-number": 2,
+   "is-read-only": false,
+   "description": [
+    "List of air interfaces, which are part of the co-channel (XPIC, MIMO, ALIC) group."
+   ],
+   "uml-name": "_airInterfaceList"
+  },
+  "sort-of-co-channel-group": {
+   "id": "sort-of-co-channel-group",
+   "uml-id": "_ZrjZcJRrEeWIaZzoaYJ6_A",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 3,
+   "is-read-only": false,
+   "description": [
+    "Type of group of air interfaces with the same transmit and receive frequency. The values shall be chosen from the following _list:'XPIC', 'MIMO', 'ALIC';"
+   ],
+   "uml-name": "sortOfCoChannelGroup",
+   "controlType": "text"
+  },
+  "logical-termination-point": {
+   "id": "logical-termination-point",
+   "uml-id": "_8QgfIKwZEeaK38AermeaCw",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel-CoreModel/CoreModel.uml#_eEpDMFX4EeOVGaP4lO41SQ",
+   "order-number": 4,
+   "is-read-only": false,
+   "uml-name": "_logicalTerminationPoint"
+  },
+  "mw-air-interface-hsb-end-point-pac": {
+   "id": "mw-air-interface-hsb-end-point-pac",
+   "uml-id": "_CXKgMJRbEeWMYJZn43K_Aw",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "The EndPoint (EP) object class models the access to the FC function. Each EndPoint instance has a role (e.g., working, protection, protected, hub, spoke, leaf, root, etc.) with respect to the FC function. The association of the FC to LTPs is made via EndPoints (essentially the ports of the FC) where each EndPoint (EP) of the FC has a role in the context of the FC. The traffic forwarding between the associated End PointsEPs of the FC depends upon the type of FC and may be associated with FCSwitch object instances. In cases where there is protection conveys the protecting role of the access to the FC. The EP replaces the Protection Unit of a traditional protection model. It represents a protected (resilient/reliable) point or a protecting (unreliable working or protection) point."
+   ],
+   "uml-name": "MW_AirInterfaceHsbEndPoint_Pac"
+  },
+  "role": {
+   "id": "role",
+   "uml-id": "_CXKgNpRbEeWMYJZn43K_Aw",
+   "uml-type": "ownedAttribute",
+   "type": "_01_dYJReEeWxIPEwZQ_gmw",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "role",
+   "controlType": [
+    "working",
+    "protection",
+    "protected"
+   ]
+  },
+  "endpoint": {
+   "id": "endpoint",
+   "uml-id": "_dglVQLYgEeWOio-Gg6Q2sw",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel-CoreModel/CoreModel.uml#_b_lUAFYgEeOVGaP4lO41SQ",
+   "order-number": 2,
+   "is-read-only": false,
+   "is-key": 1,
+   "uml-name": "_endpoint"
+  },
+  "mw-air-interface-hsb-fc-switch-pac": {
+   "id": "mw-air-interface-hsb-fc-switch-pac",
+   "uml-id": "_CXNjgJRbEeWMYJZn43K_Aw",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Represents and defines a protection switch structure encapsulated in the forwarding construct. Essentially performs the function of Protection Group. Associates to 2 or more Endpoints each playing the role of a Protection Unit. One or more protection EndPoints (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) Endpoints where either protection or working can feed one or more protected Endpoint. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 ane 1:1). May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state."
+   ],
+   "uml-name": "MW_AirInterfaceHsbFcSwitch_Pac"
+  },
+  "prot-type": {
+   "id": "prot-type",
+   "uml-id": "_CXNjiJRbEeWMYJZn43K_Aw",
+   "uml-type": "ownedAttribute",
+   "type": "_DaB5IJRgEeWxIPEwZQ_gmw",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "Indicates the protection scheme that is used for the ProtectionGroup."
+   ],
+   "uml-name": "protType",
+   "controlType": [
+    "hsb"
+   ]
+  },
+  "air-interface-hsb-configuration-is-faulty-severity": {
+   "id": "air-interface-hsb-configuration-is-faulty-severity",
+   "uml-id": "_80BlAJ2gEeWSuvrh9KcclQ",
+   "uml-type": "ownedAttribute",
+   "type": "_eIml0JH1EeWUdbnmmNiTAA",
+   "order-number": 2,
+   "is-read-only": false,
+   "description": [
+    "The level of severity of an airInterfaceHsbConfigurationIsFaulty alarm shall be chosen from an enumeration."
+   ],
+   "uml-name": "airInterfaceHsbConfigurationIsFaultySeverity",
+   "controlType": [
+    "non-alarmed",
+    "warning",
+    "minor",
+    "major",
+    "critical"
+   ]
+  },
+  "air-interface-hsb-is-partly-down-severity": {
+   "id": "air-interface-hsb-is-partly-down-severity",
+   "uml-id": "_r382sJ2mEeWSuvrh9KcclQ",
+   "uml-type": "ownedAttribute",
+   "type": "_eIml0JH1EeWUdbnmmNiTAA",
+   "order-number": 3,
+   "is-read-only": false,
+   "description": [
+    "The level of severity for one link out of the HSB configuration being down shall be chosen from an enumeration."
+   ],
+   "uml-name": "airInterfaceHsbIsPartlyDownSeverity",
+   "controlType": [
+    "non-alarmed",
+    "warning",
+    "minor",
+    "major",
+    "critical"
+   ]
+  },
+  "air-interface-hsb-is-down-severity": {
+   "id": "air-interface-hsb-is-down-severity",
+   "uml-id": "_sRGWgJ2mEeWSuvrh9KcclQ",
+   "uml-type": "ownedAttribute",
+   "type": "_eIml0JH1EeWUdbnmmNiTAA",
+   "order-number": 4,
+   "is-read-only": false,
+   "description": [
+    "The level of severity of the total HSB configuration being down shall be chosen from an enumeration."
+   ],
+   "uml-name": "airInterfaceHsbIsDownSeverity",
+   "controlType": [
+    "non-alarmed",
+    "warning",
+    "minor",
+    "major",
+    "critical"
+   ]
+  },
+  "fcswitch": {
+   "id": "fcswitch",
+   "uml-id": "_FS83ILYhEeWOio-Gg6Q2sw",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel-CoreModel/CoreModel.uml#_a97NQFYhEeOVGaP4lO41SQ",
+   "order-number": 5,
+   "is-read-only": false,
+   "is-key": 1,
+   "uml-name": "_fcswitch"
+  },
+  "mw-air-interface-diversity-pac": {
+   "id": "mw-air-interface-diversity-pac",
+   "uml-id": "_WbgFcHgFEeWfutScSwFT9A",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "MW_AirInterfaceDiversity_Pac"
+  },
+  "air-interface-diversity-capability": {
+   "id": "air-interface-diversity-capability",
+   "uml-id": "_vxH2wIekEeWaZYk7gpuOtw",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Describes the capabilities in implementing different types of air interface diversity."
+   ],
+   "uml-name": "AirInterfaceDiversityCapability"
+  },
+  "air-interface-diversity-configuration": {
+   "id": "air-interface-diversity-configuration",
+   "uml-id": "_43RTMIe1EeWnUdmvl3PBkw",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "AirInterfaceDiversityConfiguration"
+  },
+  "air-interface-diversity-status": {
+   "id": "air-interface-diversity-status",
+   "uml-id": "_EKZYcJOXEeWz-6sqLzUedw",
+   "uml-type": "ownedAttribute",
+   "type": "_DUJs8JOXEeWz-6sqLzUedw",
+   "order-number": 2,
+   "is-read-only": true,
+   "description": [
+    "Status of the air interface bundle."
+   ],
+   "uml-name": "airInterfaceDiversityStatus",
+   "controlType": [
+    "group-down",
+    "not-all-ai-active",
+    "all-ai-active"
+   ]
+  },
+  "air-interface-diversity-current-problems": {
+   "id": "air-interface-diversity-current-problems",
+   "uml-id": "_CAvhEHvtEeWzooKF5kx0aw",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "AirInterfaceDiversityCurrentProblems"
+  },
+  "air-interface-diversity-current-performance": {
+   "id": "air-interface-diversity-current-performance",
+   "uml-id": "_GIsAQKjDEeWlgMiFXLmCIQ",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Aggregated performance information of the air interface diversity configuration at a particular moment."
+   ],
+   "uml-name": "AirInterfaceDiversityCurrentPerformance"
+  },
+  "air-interface-diversity-historical-performances": {
+   "id": "air-interface-diversity-historical-performances",
+   "uml-id": "_8IIu8HvsEeWzooKF5kx0aw",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Aggregated performance information of the air interface diversity configuration for a pre-defined measurement interval."
+   ],
+   "uml-name": "AirInterfaceDiversityHistoricalPerformances"
+  },
+  "available-kinds-of-diversity": {
+   "id": "available-kinds-of-diversity",
+   "uml-id": "_luAGENyVEeW-SfXlFFFI0Q",
+   "uml-type": "ownedAttribute",
+   "type": "_pTliINyUEeW-SfXlFFFI0Q",
+   "order-number": 1,
+   "is-read-only": true,
+   "description": [
+    "Available types of diversity to be listed."
+   ],
+   "uml-name": "availableKindsOfDiversity"
+  },
+  "air-interface-diversity": {
+   "id": "air-interface-diversity",
+   "uml-id": "_hynTIHi_EeWfutScSwFT9A",
+   "uml-type": "ownedAttribute",
+   "type": "_pTliINyUEeW-SfXlFFFI0Q",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "Type of air interface diversity configured at the link."
+   ],
+   "uml-name": "airInterfaceDiversity"
+  },
+  "air-interface-ltp-list": {
+   "id": "air-interface-ltp-list",
+   "uml-id": "_xRMKgNyXEeW-SfXlFFFI0Q",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel-CoreModel/CoreModel.uml#_eEpDMFX4EeOVGaP4lO41SQ",
+   "order-number": 2,
+   "is-read-only": false,
+   "description": [
+    "_multiplicity:2-ThisAirInterfaceDiversity::AirInterfaceDiversityConfiguration::airInterfaceDiversity::diversityType::numberOfAirInterfacesMax"
+   ],
+   "uml-name": "_airInterfaceLtpList"
+  },
+  "mw-pure-ethernet-structure-pac": {
+   "id": "mw-pure-ethernet-structure-pac",
+   "uml-id": "__OTQ0UaeEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "The pureEthernetStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting Ethernet traffic only."
+   ],
+   "uml-name": "MW_PureEthernetStructure_Pac"
+  },
+  "pure-ethernet-structure-capability-list": {
+   "id": "pure-ethernet-structure-capability-list",
+   "uml-id": "__OTQ4EaeEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Describes the logical structuring of the physical capacity provided by a pure Ethernet microwave device. Segmentation is not available. No fixed segment size. No TDM transport."
+   ],
+   "uml-name": "PureEthernetStructureCapability"
+  },
+  "pure-ethernet-structure-configuration": {
+   "id": "pure-ethernet-structure-configuration",
+   "uml-id": "__OTQ8UaeEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "PureEthernetStructureConfiguration"
+  },
+  "pure-ethernet-structure-status": {
+   "id": "pure-ethernet-structure-status",
+   "uml-id": "__OTQ_UaeEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "PureEthernetStructureStatus"
+  },
+  "pure-ethernet-structure-current-problems": {
+   "id": "pure-ethernet-structure-current-problems",
+   "uml-id": "__OTRCUaeEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "PureEthernetStructureCurrentProblems"
+  },
+  "pure-ethernet-structure-current-performance": {
+   "id": "pure-ethernet-structure-current-performance",
+   "uml-id": "__OTRD0aeEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment."
+   ],
+   "uml-name": "PureEthernetStructureCurrentPerformance"
+  },
+  "pure-ethernet-structure-historical-performances": {
+   "id": "pure-ethernet-structure-historical-performances",
+   "uml-id": "__OTRE0aeEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval."
+   ],
+   "uml-name": "PureEthernetStructureHistoricalPerformances"
+  },
+  "structure-id": {
+   "id": "structure-id",
+   "uml-id": "_Bzxo5EagEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg",
+   "order-number": 1,
+   "is-read-only": true,
+   "is-key": 1,
+   "description": [
+    "Identifies the Structure for bundling and container."
+   ],
+   "uml-name": "structureId"
+  },
+  "segment-status-list": {
+   "id": "segment-status-list",
+   "uml-id": "_BzxpAEagEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "_KwZVcMUCEeW3xsRKtpCLuA",
+   "order-number": 1,
+   "is-read-only": true,
+   "description": [
+    "Status of each segment (all TDM and one Ethernet). Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1"
+   ],
+   "uml-name": "segmentStatusList"
+  },
+  "mw-hybrid-mw-structure-pac": {
+   "id": "mw-hybrid-mw-structure-pac",
+   "uml-id": "_Bzxo0UagEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "The HybridMwStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM and Ethernet traffic."
+   ],
+   "uml-name": "MW_HybridMwStructure_Pac"
+  },
+  "hybrid-mw-structure-capability": {
+   "id": "hybrid-mw-structure-capability",
+   "uml-id": "_Bzxo4EagEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Describes the logical structuring of the physical capacity provided by a hybrid microwave device (TDM + Ethernet). Segmentation is available. TDM transport is available."
+   ],
+   "uml-name": "HybridMwStructureCapability"
+  },
+  "hybrid-mw-structure-configuration": {
+   "id": "hybrid-mw-structure-configuration",
+   "uml-id": "_Bzxo8UagEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "HybridMwStructureConfiguration"
+  },
+  "hybrid-mw-structure-status": {
+   "id": "hybrid-mw-structure-status",
+   "uml-id": "_Bzxo_UagEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "HybridMwStructureStatus"
+  },
+  "hybrid-mw-structure-current-problems": {
+   "id": "hybrid-mw-structure-current-problems",
+   "uml-id": "_BzxpCUagEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "HybridMwStructureCurrentProblems"
+  },
+  "hybrid-mw-structure-current-performance": {
+   "id": "hybrid-mw-structure-current-performance",
+   "uml-id": "_BzxpD0agEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Aggregated performance information of the structure of a hybrid microwave at a particular moment."
+   ],
+   "uml-name": "HybridMwStructureCurrentPerformance"
+  },
+  "hybrid-mw-structure-historical-performances": {
+   "id": "hybrid-mw-structure-historical-performances",
+   "uml-id": "_BzxpE0agEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval."
+   ],
+   "uml-name": "HybridMwStructureHistoricalPerformances"
+  },
+  "supported-tdm-structure-types-list": {
+   "id": "supported-tdm-structure-types-list",
+   "uml-id": "_tA-uQEduEeax2rWez10Siw",
+   "uml-type": "ownedAttribute",
+   "type": "_jRAQsEdoEeax2rWez10Siw",
+   "order-number": 2,
+   "is-read-only": true,
+   "description": [
+    "Lists the TDM frame types that are supported."
+   ],
+   "uml-name": "supportedTdmStructureTypesList"
+  },
+  "structure-type": {
+   "id": "structure-type",
+   "uml-id": "_cduh4EdvEeax2rWez10Siw",
+   "uml-type": "ownedAttribute",
+   "type": "_jRAQsEdoEeax2rWez10Siw",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "TDM frame to be applied."
+   ],
+   "uml-name": "structureType"
+  },
+  "number-of-tdm-segments-to-be-reserved": {
+   "id": "number-of-tdm-segments-to-be-reserved",
+   "uml-id": "_Bzxo9EagEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 2,
+   "is-read-only": false,
+   "description": [
+    "Allows to configure the number of segments reserved for TDM frames of the type specified in HybridMwStructure::HybridMwStructureConfiguration::structureType"
+   ],
+   "uml-name": "numberOfTdmSegmentsToBeReserved",
+   "controlType": "number"
+  },
+  "mw-ethernet-container-pac": {
+   "id": "mw-ethernet-container-pac",
+   "uml-id": "_4uEBgUafEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "MW_EthernetContainer_Pac"
+  },
+  "ethernet-container-capability": {
+   "id": "ethernet-container-capability",
+   "uml-id": "_4uEBmEafEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "EthernetContainerCapability"
+  },
+  "ethernet-container-configuration": {
+   "id": "ethernet-container-configuration",
+   "uml-id": "_4uEBwUafEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "EthernetContainerConfiguration"
+  },
+  "ethernet-container-status": {
+   "id": "ethernet-container-status",
+   "uml-id": "_4uECAUafEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "EthernetContainerStatus"
+  },
+  "ethernet-container-current-problems": {
+   "id": "ethernet-container-current-problems",
+   "uml-id": "_4uECDUafEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "EthernetContainerCurrentProblems"
+  },
+  "ethernet-container-current-performance": {
+   "id": "ethernet-container-current-performance",
+   "uml-id": "_4uECE0afEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Aggregated performance information of the Ethernet container at a particular moment."
+   ],
+   "uml-name": "EthernetContainerCurrentPerformance"
+  },
+  "ethernet-container-historical-performances": {
+   "id": "ethernet-container-historical-performances",
+   "uml-id": "_4uECF0afEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Aggregated performance information of the Ethernet container for a pre-defined measurement interval."
+   ],
+   "uml-name": "EthernetContainerHistoricalPerformances"
+  },
+  "bundling-is-avail": {
+   "id": "bundling-is-avail",
+   "uml-id": "_IzCGMNyCEeW-SfXlFFFI0Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 4,
+   "is-read-only": true,
+   "description": [
+    "If it is possible to combine transport resources of several radio links to transport this container type, this attribute shall be set to '1'."
+   ],
+   "uml-name": "bundlingIsAvail",
+   "controlType": "checkbox"
+  },
+  "packet-compression-is-avail": {
+   "id": "packet-compression-is-avail",
+   "uml-id": "_4uEBp0afEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 2,
+   "is-read-only": true,
+   "description": [
+    "In case packet compression can be activated, but not configured to a certain type, packetCompressionAvail shall be set on 'true', but none of the compression level specific booleans."
+   ],
+   "uml-name": "packetCompressionIsAvail",
+   "controlType": "checkbox"
+  },
+  "layer2-compression-is-avail": {
+   "id": "layer2-compression-is-avail",
+   "uml-id": "_4uEBqkafEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 3,
+   "is-read-only": true,
+   "description": [
+    "Packet compression on layer 2 available at the device."
+   ],
+   "uml-name": "layer2CompressionIsAvail",
+   "controlType": "checkbox"
+  },
+  "vlan-compression-is-avail": {
+   "id": "vlan-compression-is-avail",
+   "uml-id": "_4uEBrUafEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 4,
+   "is-read-only": true,
+   "description": [
+    "Packet compression on VLAN layer available at the device."
+   ],
+   "uml-name": "vlanCompressionIsAvail",
+   "controlType": "checkbox"
+  },
+  "q-in-q-compression-is-avail": {
+   "id": "q-in-q-compression-is-avail",
+   "uml-id": "_4uEBsEafEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 5,
+   "is-read-only": true,
+   "description": [
+    "Packet compression on layer of a second VLAN available at the device."
+   ],
+   "uml-name": "qInQCompressionIsAvail",
+   "controlType": "checkbox"
+  },
+  "mpls-compression-is-avail": {
+   "id": "mpls-compression-is-avail",
+   "uml-id": "_4uEBs0afEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 6,
+   "is-read-only": true,
+   "description": [
+    "Packet compression on mpls layer available at the device."
+   ],
+   "uml-name": "mplsCompressionIsAvail",
+   "controlType": "checkbox"
+  },
+  "ipv4-compression-is-avail": {
+   "id": "ipv4-compression-is-avail",
+   "uml-id": "_4uEBtkafEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 7,
+   "is-read-only": true,
+   "description": [
+    "Packet compression on layer 3 for IPv4 available at the device."
+   ],
+   "uml-name": "ipv4CompressionIsAvail",
+   "controlType": "checkbox"
+  },
+  "ipv6-compression-is-avail": {
+   "id": "ipv6-compression-is-avail",
+   "uml-id": "_4uEBuUafEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 8,
+   "is-read-only": true,
+   "description": [
+    "Packet compression on layer 3 for IPv6 available at the device."
+   ],
+   "uml-name": "ipv6CompressionIsAvail",
+   "controlType": "checkbox"
+  },
+  "layer4-compression-is-avail": {
+   "id": "layer4-compression-is-avail",
+   "uml-id": "_4uEBvEafEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 9,
+   "is-read-only": true,
+   "description": [
+    "Packet compression on layer 4 (TCP and UDP header) available at the device."
+   ],
+   "uml-name": "layer4CompressionIsAvail",
+   "controlType": "checkbox"
+  },
+  "container-id": {
+   "id": "container-id",
+   "uml-id": "_ecCeS0aqEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "ContainterID in Netconf must be the same as TDM Flow ID so a connection can be made between the two items, which separately exist in the controller."
+   ],
+   "uml-name": "containerID",
+   "controlType": "text"
+  },
+  "segments-id-list": {
+   "id": "segments-id-list",
+   "uml-id": "_4uEBy0afEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "_Nd1F4MKuEeWwLJhHQlOGSQ",
+   "order-number": 2,
+   "is-read-only": false,
+   "description": [
+    "Lists the segments used for transporting this Ethernet container. In case EthernetContainer::ContainerCapability::bundlingIsAvail==0, all TypeDefinitions::segmentIdType::structureId must be identical in the list."
+   ],
+   "uml-name": "segmentsIdList"
+  },
+  "packet-compression-is-on": {
+   "id": "packet-compression-is-on",
+   "uml-id": "_4uEB1UafEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 3,
+   "is-read-only": false,
+   "description": [
+    "In case packet compression is activated, but no type is activated, it is assumed that the device chooses the optimum."
+   ],
+   "uml-name": "packetCompressionIsOn",
+   "controlType": "checkbox"
+  },
+  "layer2-compression-is-on": {
+   "id": "layer2-compression-is-on",
+   "uml-id": "_4uEB2kafEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 4,
+   "is-read-only": false,
+   "description": [
+    "Packet compression on layer 2 configured at the device."
+   ],
+   "uml-name": "layer2CompressionIsOn",
+   "controlType": "checkbox"
+  },
+  "vlan-compression-is-on": {
+   "id": "vlan-compression-is-on",
+   "uml-id": "_4uEB30afEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 5,
+   "is-read-only": false,
+   "description": [
+    "Packet compression on VLAN layer configured at the device."
+   ],
+   "uml-name": "vlanCompressionIsOn",
+   "controlType": "checkbox"
+  },
+  "q-in-q-compression-is-on": {
+   "id": "q-in-q-compression-is-on",
+   "uml-id": "_4uEB5EafEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 6,
+   "is-read-only": false,
+   "description": [
+    "Packet compression on layer of a second VLAN configured at the device."
+   ],
+   "uml-name": "qInQCompressionIsOn",
+   "controlType": "checkbox"
+  },
+  "mpls-compression-is-on": {
+   "id": "mpls-compression-is-on",
+   "uml-id": "_4uEB6UafEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 7,
+   "is-read-only": false,
+   "description": [
+    "Packet compression on MPLS layer configured at the device."
+   ],
+   "uml-name": "mplsCompressionIsOn",
+   "controlType": "checkbox"
+  },
+  "ipv4-compression-is-on": {
+   "id": "ipv4-compression-is-on",
+   "uml-id": "_4uEB7kafEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 8,
+   "is-read-only": false,
+   "description": [
+    "Packet compression on layer 3 for IPv4 configured at the device."
+   ],
+   "uml-name": "ipv4CompressionIsOn",
+   "controlType": "checkbox"
+  },
+  "ipv6-compression-is-on": {
+   "id": "ipv6-compression-is-on",
+   "uml-id": "_4uEB80afEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 9,
+   "is-read-only": false,
+   "description": [
+    "Packet compression on layer 3 for IPv6 configured at the device."
+   ],
+   "uml-name": "ipv6CompressionIsOn",
+   "controlType": "checkbox"
+  },
+  "layer4-compression-is-on": {
+   "id": "layer4-compression-is-on",
+   "uml-id": "_4uEB-EafEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 10,
+   "is-read-only": false,
+   "description": [
+    "Packet compression on layer 4 (TCP and UDP header) configured at the device."
+   ],
+   "uml-name": "layer4CompressionIsOn",
+   "controlType": "checkbox"
+  },
+  "mw-tdm-container-pac": {
+   "id": "mw-tdm-container-pac",
+   "uml-id": "_ecCeMUaqEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "MW_TdmContainer_Pac"
+  },
+  "tdm-container-capability": {
+   "id": "tdm-container-capability",
+   "uml-id": "_ecCeSEaqEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Bundling is not available."
+   ],
+   "uml-name": "TdmContainerCapability"
+  },
+  "tdm-container-configuration": {
+   "id": "tdm-container-configuration",
+   "uml-id": "_ecCecUaqEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "TdmContainerConfiguration"
+  },
+  "tdm-container-status": {
+   "id": "tdm-container-status",
+   "uml-id": "_ecCesUaqEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "TdmContainerStatus"
+  },
+  "tdm-container-current-problems": {
+   "id": "tdm-container-current-problems",
+   "uml-id": "_ecCevUaqEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "TdmContainerCurrentProblems"
+  },
+  "tdm-container-current-performance": {
+   "id": "tdm-container-current-performance",
+   "uml-id": "_ecCew0aqEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Aggregated performance information of the TDM container at a particular moment."
+   ],
+   "uml-name": "TdmContainerCurrentPerformance"
+  },
+  "tdm-container-historical-performances": {
+   "id": "tdm-container-historical-performances",
+   "uml-id": "_ecCex0aqEeas2eqI3oKNtg",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "description": [
+    "Aggregated performance information of the TDM container for a pre-defined measurement interval."
+   ],
+   "uml-name": "TdmContainerHistoricalPerformances"
+  },
+  "supported-tdm-container-types-list": {
+   "id": "supported-tdm-container-types-list",
+   "uml-id": "_R5hG0EdwEeax2rWez10Siw",
+   "uml-type": "ownedAttribute",
+   "type": "_rgbigEdjEeax2rWez10Siw",
+   "order-number": 1,
+   "is-read-only": true,
+   "description": [
+    "Lists the TDM containers that are supported."
+   ],
+   "uml-name": "supportedTdmContainerTypesList"
+  },
+  "container-type": {
+   "id": "container-type",
+   "uml-id": "_be7AoMWkEeW3xsRKtpCLuA",
+   "uml-type": "uml:DataType",
+   "uml-name": "ContainerType"
+  },
+  "segment-id": {
+   "id": "segment-id",
+   "uml-id": "_ecCee0aqEeas2eqI3oKNtg",
+   "uml-type": "ownedAttribute",
+   "type": "_Nd1F4MKuEeWwLJhHQlOGSQ",
+   "order-number": 3,
+   "is-read-only": false,
+   "description": [
+    "Multiplicity = 1; One segment per TDM container; Type of segment must match type of container;"
+   ],
+   "uml-name": "segmentID"
+  },
+  "mw-current-problem": {
+   "id": "mw-current-problem",
+   "uml-id": "_LKRM4JNQEeWuAeXkr703BA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "MwCurrentProblem"
+  },
+  "sequence-number": {
+   "id": "sequence-number",
+   "uml-id": "_YadH4CJbEeaHpPYk5sscIg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 1,
+   "is-read-only": true,
+   "is-key": 1,
+   "description": [
+    "Unique sequence number of the current problem object."
+   ],
+   "uml-name": "sequenceNumber",
+   "controlType": "number"
+  },
+  "time-stamp": {
+   "id": "time-stamp",
+   "uml-id": "_lB4EQJN1EeWuAeXkr703BA",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel-CoreModel/CoreModel.uml#_oGqi1lLNEeO75dO39GbF8Q",
+   "order-number": 2,
+   "is-read-only": true,
+   "description": [
+    "Time and date of the problem. _format:yyyyMMddhhmmss.s[Z|{+|-}HHMm]; yyyy='0000'..'9999' year; MM='01'..'12' month; dd='01'..'31' day; hh='00'..'23' hour; mm='00'..'59' minute; ss='00'..'59' second; s='.0'..'.9'tenth of second (set to '.0' if EMS or NE cannot support this granularity); Z='Z' indicates UTC (rather than local time); {+|-}='+' or '-' delta from UTC; HH='00'..'23' time zone difference in hours; Mm='00'..'59' time zone difference in minutes."
+   ],
+   "uml-name": "timeStamp"
+  },
+  "problem-severity": {
+   "id": "problem-severity",
+   "uml-id": "_qInZ8KT4EeapooeghKN-dA",
+   "uml-type": "ownedAttribute",
+   "type": "_eIml0JH1EeWUdbnmmNiTAA",
+   "order-number": 3,
+   "is-read-only": true,
+   "description": [
+    "Severity of the alarm."
+   ],
+   "uml-name": "problemSeverity",
+   "controlType": [
+    "non-alarmed",
+    "warning",
+    "minor",
+    "major",
+    "critical"
+   ]
+  },
+  "channel-plan-type": {
+   "id": "channel-plan-type",
+   "uml-id": "_oQf6IPXSEeW9zIqh2WHHww",
+   "uml-type": "uml:DataType",
+   "uml-name": "ChannelPlanType"
+  },
+  "duplex-distance-is-variable": {
+   "id": "duplex-distance-is-variable",
+   "uml-id": "_OPxkQK42EeWxIavXll_b0A",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 2,
+   "is-read-only": true,
+   "description": [
+    "To be set on 'true', if the distance between transmitted and received frequency is variable."
+   ],
+   "uml-name": "duplexDistanceIsVariable",
+   "controlType": "checkbox"
+  },
+  "duplex-distance": {
+   "id": "duplex-distance",
+   "uml-id": "_BEr_wIMEEeWMcJAvkeTn2w",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 3,
+   "is-read-only": true,
+   "unit": "kHz",
+   "description": [
+    "Distance between transmitted and received frequency."
+   ],
+   "uml-name": "duplexDistance",
+   "controlType": "number"
+  },
+  "auto-freq-select-is-avail": {
+   "id": "auto-freq-select-is-avail",
+   "uml-id": "_te6XMIL8EeWMcJAvkeTn2w",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 4,
+   "is-read-only": true,
+   "description": [
+    "In case the microwave radio is capable of automatically selecting the transmit frequency in unlicensed bands, this field shall contain a 'true'."
+   ],
+   "uml-name": "autoFreqSelectIsAvail",
+   "controlType": "checkbox"
+  },
+  "transmission-mode-type": {
+   "id": "transmission-mode-type",
+   "uml-id": "_zG34sPXQEeW9zIqh2WHHww",
+   "uml-type": "uml:DataType",
+   "uml-name": "TransmissionModeType"
+  },
+  "transmission-mode-id": {
+   "id": "transmission-mode-id",
+   "uml-id": "_afdYoNumEeWHIeLurhMv0A",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg",
+   "order-number": 1,
+   "is-read-only": true,
+   "is-key": 1,
+   "description": [
+    "Indentifies the transmissionMode for internal reference."
+   ],
+   "uml-name": "transmissionModeId"
+  },
+  "channel-bandwidth": {
+   "id": "channel-bandwidth",
+   "uml-id": "_FteJEHfdEeW-h9gN8LYm4Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 2,
+   "is-read-only": true,
+   "unit": "kHz",
+   "description": [
+    "Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"
+   ],
+   "uml-name": "channelBandwidth",
+   "controlType": "number"
+  },
+  "modulation-scheme": {
+   "id": "modulation-scheme",
+   "uml-id": "_G4H-UHfdEeW-h9gN8LYm4Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 3,
+   "is-read-only": true,
+   "unit": "symbols",
+   "description": [
+    "Modulation scheme, which is base to the other characteristics described in the same transmissionModeType data type. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256')."
+   ],
+   "uml-name": "modulationScheme",
+   "controlType": "number"
+  },
+  "code-rate": {
+   "id": "code-rate",
+   "uml-id": "_jE7-EHf4EeW-h9gN8LYm4Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 4,
+   "is-read-only": true,
+   "unit": "%",
+   "description": [
+    "Code rate of the coding scheme in % (Net bit rate ≤ Gross bit rate · code rate)."
+   ],
+   "uml-name": "codeRate",
+   "controlType": "number"
+  },
+  "tx-power-min": {
+   "id": "tx-power-min",
+   "uml-id": "_I3nJ0HfdEeW-h9gN8LYm4Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 5,
+   "is-read-only": true,
+   "unit": "dBm",
+   "description": [
+    "Value of the minimum transmit power the modem can operate in dBm."
+   ],
+   "uml-name": "txPowerMin",
+   "controlType": "number"
+  },
+  "tx-power-max": {
+   "id": "tx-power-max",
+   "uml-id": "_KB7A0HfdEeW-h9gN8LYm4Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 6,
+   "is-read-only": true,
+   "unit": "dBm",
+   "description": [
+    "Value of the maximum transmit power the modem can operate in dBm."
+   ],
+   "uml-name": "txPowerMax",
+   "controlType": "number"
+  },
+  "rx-threshold": {
+   "id": "rx-threshold",
+   "uml-id": "_LCr6QHfdEeW-h9gN8LYm4Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 7,
+   "is-read-only": true,
+   "unit": "dBm",
+   "description": [
+    "Value of the receive level required to decode the received signal with a Bit Error Rate of 1e-6 or less."
+   ],
+   "uml-name": "rxThreshold",
+   "controlType": "number"
+  },
+  "am-upshift-level": {
+   "id": "am-upshift-level",
+   "uml-id": "_MGguwHfdEeW-h9gN8LYm4Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 8,
+   "is-read-only": true,
+   "unit": "dBm",
+   "description": [
+    "Value of the receive level that has to be exceeded to shift into a higher modulation scheme."
+   ],
+   "uml-name": "amUpshiftLevel",
+   "controlType": "number"
+  },
+  "am-downshift-level": {
+   "id": "am-downshift-level",
+   "uml-id": "_NIvAwHfdEeW-h9gN8LYm4Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 9,
+   "is-read-only": true,
+   "unit": "dBm",
+   "description": [
+    "Value of the receive level that has to be exceeded for not shifting into a lower modulation scheme."
+   ],
+   "uml-name": "amDownshiftLevel",
+   "controlType": "number"
+  },
+  "xpic-is-avail": {
+   "id": "xpic-is-avail",
+   "uml-id": "_QHd9kHfvEeW-h9gN8LYm4Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 10,
+   "is-read-only": true,
+   "description": [
+    "In case this air interface type is capable of XPIC, this field shall contain a 'true'. This information shall purely relate to capabilities of the equipment type, but not to the operational capability of a specific hardware composition on site. Means for example that this attribute might contain a 'true' statement, even if an additional cable would have been required to actually operate XPIC in a specific case."
+   ],
+   "uml-name": "xpicIsAvail",
+   "controlType": "checkbox"
+  },
+  "air-interface-problem-severity-type": {
+   "id": "air-interface-problem-severity-type",
+   "uml-id": "_ZKdWgGnuEeaZwMagYjVCHQ",
+   "uml-type": "uml:DataType",
+   "uml-name": "AirInterfaceProblemSeverityType"
+  },
+  "problem-kind-name": {
+   "id": "problem-kind-name",
+   "uml-id": "_OMQH0Gz0Eeaf-__BRLM84g",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": false,
+   "is-key": 1,
+   "description": [
+    "Name of the alarm according to Container::ContainerCapability::supportedAlarms"
+   ],
+   "uml-name": "problemKindName",
+   "controlType": "text"
+  },
+  "air-interface-current-problem-type": {
+   "id": "air-interface-current-problem-type",
+   "uml-id": "_umuZUMXjEeW3xsRKtpCLuA",
+   "uml-type": "uml:DataType",
+   "uml-name": "AirInterfaceCurrentProblemType"
+  },
+  "problem-name": {
+   "id": "problem-name",
+   "uml-id": "__h1n4cXpEeWJ6KZuc0h_vw",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": true,
+   "description": [
+    "Name of the alarm according to Container::ContainerCapability::supportedAlarms"
+   ],
+   "uml-name": "problemName",
+   "controlType": "text"
+  },
+  "air-interface-performance-type": {
+   "id": "air-interface-performance-type",
+   "uml-id": "_OvFYwEQbEea3g-FxAUaYRg",
+   "uml-type": "uml:DataType",
+   "description": [
+    "Consolidated performance information of the air interface."
+   ],
+   "uml-name": "AirInterfacePerformanceType"
+  },
+  "es": {
+   "id": "es",
+   "uml-id": "_DbVzpUQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 1,
+   "is-read-only": true,
+   "unit": "s",
+   "description": [
+    "Number of errored seconds."
+   ],
+   "uml-name": "es",
+   "controlType": "number"
+  },
+  "ses": {
+   "id": "ses",
+   "uml-id": "_DbVzqUQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 2,
+   "is-read-only": true,
+   "unit": "s",
+   "description": [
+    "Number of severely errored seconds."
+   ],
+   "uml-name": "ses",
+   "controlType": "number"
+  },
+  "cses": {
+   "id": "cses",
+   "uml-id": "_DbVzrUQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 3,
+   "is-read-only": true,
+   "unit": "s",
+   "description": [
+    "Number of consecutive severely errored seconds."
+   ],
+   "uml-name": "cses",
+   "controlType": "number"
+  },
+  "unavailability": {
+   "id": "unavailability",
+   "uml-id": "_DbVzsUQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 4,
+   "is-read-only": true,
+   "unit": "s",
+   "description": [
+    "Total time of unavailability in seconds."
+   ],
+   "uml-name": "unavailability",
+   "controlType": "number"
+  },
+  "tx-level-min": {
+   "id": "tx-level-min",
+   "uml-id": "_DbVztUQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 5,
+   "is-read-only": true,
+   "unit": "dBm",
+   "description": [
+    "Minimum transmit power. Signed integers are required."
+   ],
+   "uml-name": "txLevelMin",
+   "controlType": "number"
+  },
+  "tx-level-max": {
+   "id": "tx-level-max",
+   "uml-id": "_DbVzuUQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 6,
+   "is-read-only": true,
+   "unit": "dBm",
+   "description": [
+    "Maximum transmit power. Signed integers are required."
+   ],
+   "uml-name": "txLevelMax",
+   "controlType": "number"
+  },
+  "tx-level-avg": {
+   "id": "tx-level-avg",
+   "uml-id": "_DbVzvUQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 7,
+   "is-read-only": true,
+   "unit": "dBm",
+   "description": [
+    "Averaged transmit power. Signed integers are required."
+   ],
+   "uml-name": "txLevelAvg",
+   "controlType": "number"
+  },
+  "rx-level-min": {
+   "id": "rx-level-min",
+   "uml-id": "_DbVzwUQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 8,
+   "is-read-only": true,
+   "unit": "dBm",
+   "description": [
+    "Minimum receive level. Signed integers are required."
+   ],
+   "uml-name": "rxLevelMin",
+   "controlType": "number"
+  },
+  "rx-level-max": {
+   "id": "rx-level-max",
+   "uml-id": "_DbVzxUQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 9,
+   "is-read-only": true,
+   "unit": "dBm",
+   "description": [
+    "Maximum receive level. Signed integers are required."
+   ],
+   "uml-name": "rxLevelMax",
+   "controlType": "number"
+  },
+  "rx-level-avg": {
+   "id": "rx-level-avg",
+   "uml-id": "_DbVzyUQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 10,
+   "is-read-only": true,
+   "unit": "dBm",
+   "description": [
+    "Averaged receive level. Signed integers are required."
+   ],
+   "uml-name": "rxLevelAvg",
+   "controlType": "number"
+  },
+  "time2-states": {
+   "id": "time2-states",
+   "uml-id": "_DbVzzUQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 11,
+   "is-read-only": true,
+   "unit": "s",
+   "description": [
+    "Sum of all seconds the transmitter operated in e.g. BPSK."
+   ],
+   "uml-name": "time2States",
+   "controlType": "number"
+  },
+  "time4-states-s": {
+   "id": "time4-states-s",
+   "uml-id": "_DbVz0kQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 12,
+   "is-read-only": true,
+   "unit": "s",
+   "uml-name": "time4StatesS",
+   "controlType": "number"
+  },
+  "time4-states": {
+   "id": "time4-states",
+   "uml-id": "_DbVz2EQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 13,
+   "is-read-only": true,
+   "unit": "s",
+   "uml-name": "time4States",
+   "controlType": "number"
+  },
+  "time8-states": {
+   "id": "time8-states",
+   "uml-id": "_DbVz3UQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 14,
+   "is-read-only": true,
+   "unit": "s",
+   "uml-name": "time8States",
+   "controlType": "number"
+  },
+  "time16-states-s": {
+   "id": "time16-states-s",
+   "uml-id": "_DbVz4kQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 15,
+   "is-read-only": true,
+   "unit": "s",
+   "uml-name": "time16StatesS",
+   "controlType": "number"
+  },
+  "time16-states": {
+   "id": "time16-states",
+   "uml-id": "_DbVz50QbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 16,
+   "is-read-only": true,
+   "unit": "s",
+   "uml-name": "time16States",
+   "controlType": "number"
+  },
+  "time32-states": {
+   "id": "time32-states",
+   "uml-id": "_DbVz7EQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 17,
+   "is-read-only": true,
+   "unit": "s",
+   "uml-name": "time32States",
+   "controlType": "number"
+  },
+  "time64-states": {
+   "id": "time64-states",
+   "uml-id": "_DbVz8UQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 18,
+   "is-read-only": true,
+   "unit": "s",
+   "uml-name": "time64States",
+   "controlType": "number"
+  },
+  "time128-states": {
+   "id": "time128-states",
+   "uml-id": "_DbVz9kQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 19,
+   "is-read-only": true,
+   "unit": "s",
+   "uml-name": "time128States",
+   "controlType": "number"
+  },
+  "time256-states": {
+   "id": "time256-states",
+   "uml-id": "_DbVz-0QbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 20,
+   "is-read-only": true,
+   "unit": "s",
+   "uml-name": "time256States",
+   "controlType": "number"
+  },
+  "time512-states": {
+   "id": "time512-states",
+   "uml-id": "_DbV0AEQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 21,
+   "is-read-only": true,
+   "unit": "s",
+   "uml-name": "time512States",
+   "controlType": "number"
+  },
+  "time512-states-l": {
+   "id": "time512-states-l",
+   "uml-id": "_DbV0BUQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 22,
+   "is-read-only": true,
+   "unit": "s",
+   "uml-name": "time512StatesL",
+   "controlType": "number"
+  },
+  "time1024-states": {
+   "id": "time1024-states",
+   "uml-id": "_DbV0CkQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 23,
+   "is-read-only": true,
+   "unit": "s",
+   "uml-name": "time1024States",
+   "controlType": "number"
+  },
+  "time1024-states-l": {
+   "id": "time1024-states-l",
+   "uml-id": "_DbV0D0QbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 24,
+   "is-read-only": true,
+   "unit": "s",
+   "uml-name": "time1024StatesL",
+   "controlType": "number"
+  },
+  "time2048-states": {
+   "id": "time2048-states",
+   "uml-id": "_DbV0FEQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 25,
+   "is-read-only": true,
+   "unit": "s",
+   "uml-name": "time2048States",
+   "controlType": "number"
+  },
+  "time2048-states-l": {
+   "id": "time2048-states-l",
+   "uml-id": "_DbV0GUQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 26,
+   "is-read-only": true,
+   "unit": "s",
+   "uml-name": "time2048StatesL",
+   "controlType": "number"
+  },
+  "time4096-states": {
+   "id": "time4096-states",
+   "uml-id": "_DbV0HkQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 27,
+   "is-read-only": true,
+   "unit": "s",
+   "uml-name": "time4096States",
+   "controlType": "number"
+  },
+  "time4096-states-l": {
+   "id": "time4096-states-l",
+   "uml-id": "_DbV0I0QbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 28,
+   "is-read-only": true,
+   "unit": "s",
+   "uml-name": "time4096StatesL",
+   "controlType": "number"
+  },
+  "time8192-states": {
+   "id": "time8192-states",
+   "uml-id": "_DbV0KEQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 29,
+   "is-read-only": true,
+   "unit": "s",
+   "uml-name": "time8192States",
+   "controlType": "number"
+  },
+  "time8192-states-l": {
+   "id": "time8192-states-l",
+   "uml-id": "_DbV0LUQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 30,
+   "is-read-only": true,
+   "unit": "s",
+   "uml-name": "time8192StatesL",
+   "controlType": "number"
+  },
+  "snir-min": {
+   "id": "snir-min",
+   "uml-id": "_nG-NsEzvEeaRytIQfQ43Wg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 1,
+   "is-read-only": true,
+   "unit": "dB",
+   "description": [
+    "Minimum signal to (noise+interference) ratio of the combined signals."
+   ],
+   "uml-name": "snirMin",
+   "controlType": "number"
+  },
+  "snir-max": {
+   "id": "snir-max",
+   "uml-id": "_n_OEUEzvEeaRytIQfQ43Wg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 2,
+   "is-read-only": true,
+   "unit": "dB",
+   "description": [
+    "Maximum signal to (noise+interference) ratio of the combined signals."
+   ],
+   "uml-name": "snirMax",
+   "controlType": "number"
+  },
+  "snir-avg": {
+   "id": "snir-avg",
+   "uml-id": "_oU3kMEzvEeaRytIQfQ43Wg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 3,
+   "is-read-only": true,
+   "unit": "dB",
+   "description": [
+    "Average signal to (noise+interference) ratio of the combined signals."
+   ],
+   "uml-name": "snirAvg",
+   "controlType": "number"
+  },
+  "xpd-min": {
+   "id": "xpd-min",
+   "uml-id": "_DbV0PkQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 34,
+   "is-read-only": true,
+   "unit": "dB",
+   "description": [
+    "Minimum cross polarization discrimination."
+   ],
+   "uml-name": "xpdMin",
+   "controlType": "number"
+  },
+  "xpd-max": {
+   "id": "xpd-max",
+   "uml-id": "_DbV0QkQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 35,
+   "is-read-only": true,
+   "unit": "dB",
+   "description": [
+    "Maximum cross polarization discrimination."
+   ],
+   "uml-name": "xpdMax",
+   "controlType": "number"
+  },
+  "xpd-avg": {
+   "id": "xpd-avg",
+   "uml-id": "_DbV0RkQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 36,
+   "is-read-only": true,
+   "unit": "dB",
+   "description": [
+    "Averaged cross polarization discrimination."
+   ],
+   "uml-name": "xpdAvg",
+   "controlType": "number"
+  },
+  "rf-temp-min": {
+   "id": "rf-temp-min",
+   "uml-id": "_DbV0SkQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 37,
+   "is-read-only": true,
+   "unit": "C",
+   "description": [
+    "Lowest temperature (in degree Celsius) of the radio module inside the outdoor unit."
+   ],
+   "uml-name": "rfTempMin",
+   "controlType": "number"
+  },
+  "rf-temp-max": {
+   "id": "rf-temp-max",
+   "uml-id": "_DbV0TkQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 38,
+   "is-read-only": true,
+   "unit": "C",
+   "description": [
+    "Highest temperature (in degree Celsius) of the radio module inside the outdoor unit."
+   ],
+   "uml-name": "rfTempMax",
+   "controlType": "number"
+  },
+  "rf-temp-avg": {
+   "id": "rf-temp-avg",
+   "uml-id": "_DbV0UkQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 39,
+   "is-read-only": true,
+   "unit": "C",
+   "description": [
+    "Averaged temperature (in degree Celsius) of the radio module inside the outdoor unit."
+   ],
+   "uml-name": "rfTempAvg",
+   "controlType": "number"
+  },
+  "defect-blocks-sum": {
+   "id": "defect-blocks-sum",
+   "uml-id": "_DbV0VkQbEea3g-FxAUaYRg",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 40,
+   "is-read-only": true,
+   "unit": "blocks",
+   "description": [
+    "Total number of blocks that were defect after receiving and could not be corrected by the FEC."
+   ],
+   "uml-name": "defectBlocksSum",
+   "controlType": "number"
+  },
+  "time-period": {
+   "id": "time-period",
+   "uml-id": "_Nyme4H1IEeWHjMaYlqnBcw",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 4,
+   "is-read-only": true,
+   "unit": "s",
+   "description": [
+    "Total length of the measurement period in seconds."
+   ],
+   "uml-name": "timePeriod",
+   "controlType": "number"
+  },
+  "air-interface-current-performance-type": {
+   "id": "air-interface-current-performance-type",
+   "uml-id": "_pQ_y4GoHEeaZwMagYjVCHQ",
+   "uml-type": "uml:DataType",
+   "description": [
+    "Turns performance information into current performance information by inheriting from OTN_CurrentData."
+   ],
+   "uml-name": "AirInterfaceCurrentPerformanceType"
+  },
+  "performance-data": {
+   "id": "performance-data",
+   "uml-id": "_i5STYGz7Eeaf-__BRLM84g",
+   "uml-type": "ownedAttribute",
+   "type": "_U9tW0EQeEea3g-FxAUaYRg",
+   "order-number": 1,
+   "is-read-only": true,
+   "uml-name": "performanceData"
+  },
+  "air-interface-historical-performance-type": {
+   "id": "air-interface-historical-performance-type",
+   "uml-id": "_t18kwGoHEeaZwMagYjVCHQ",
+   "uml-type": "uml:DataType",
+   "description": [
+    "Turns performance information into historical performance information by inheriting from OTN_HistoryData."
+   ],
+   "uml-name": "AirInterfaceHistoricalPerformanceType"
+  },
+  "diversity-type": {
+   "id": "diversity-type",
+   "uml-id": "_pTliINyUEeW-SfXlFFFI0Q",
+   "uml-type": "uml:DataType",
+   "uml-name": "DiversityType"
+  },
+  "diversity-name": {
+   "id": "diversity-name",
+   "uml-id": "_uYhboNyUEeW-SfXlFFFI0Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": true,
+   "is-key": 1,
+   "description": [
+    "Names to be chosen from the following list: 'spaceDiversity', 'frequencyDiversity'"
+   ],
+   "uml-name": "diversityName",
+   "controlType": "text"
+  },
+  "number-of-air-interfaces-max": {
+   "id": "number-of-air-interfaces-max",
+   "uml-id": "_wKDDoNyUEeW-SfXlFFFI0Q",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 2,
+   "is-read-only": true,
+   "unit": "air interfaces",
+   "description": [
+    "Maximum number of air interfaces that could be part of this kind of diversity."
+   ],
+   "uml-name": "numberOfAirInterfacesMax",
+   "controlType": "number"
+  },
+  "air-interface-diversity-problem-severity-type": {
+   "id": "air-interface-diversity-problem-severity-type",
+   "uml-id": "_2kMRYGzzEeaf-__BRLM84g",
+   "uml-type": "uml:DataType",
+   "uml-name": "AirInterfaceDiversityProblemSeverityType"
+  },
+  "air-interface-diversity-current-problem-type": {
+   "id": "air-interface-diversity-current-problem-type",
+   "uml-id": "_z1XWgMXlEeWJ6KZuc0h_vw",
+   "uml-type": "uml:DataType",
+   "uml-name": "AirInterfaceDiversityCurrentProblemType"
+  },
+  "air-interface-diversity-performance-type": {
+   "id": "air-interface-diversity-performance-type",
+   "uml-id": "_EH3QgEQdEea3g-FxAUaYRg",
+   "uml-type": "uml:DataType",
+   "description": [
+    "Consolidated performance information of the air interface diversity group."
+   ],
+   "uml-name": "AirInterfaceDiversityPerformanceType"
+  },
+  "air-interface-diversity-current-performance-type": {
+   "id": "air-interface-diversity-current-performance-type",
+   "uml-id": "_n4wTgGz6Eeaf-__BRLM84g",
+   "uml-type": "uml:DataType",
+   "description": [
+    "Turns performance information into current performance information by inheriting from OTN_CurrentData."
+   ],
+   "uml-name": "AirInterfaceDiversityCurrentPerformanceType"
+  },
+  "air-interface-diversity-historical-performance-type": {
+   "id": "air-interface-diversity-historical-performance-type",
+   "uml-id": "_pG0pIGz6Eeaf-__BRLM84g",
+   "uml-type": "uml:DataType",
+   "description": [
+    "Turns performance information into historical performance information by inheriting from OTN_HistoryData."
+   ],
+   "uml-name": "AirInterfaceDiversityHistoricalPerformanceType"
+  },
+  "tdm-structure-type": {
+   "id": "tdm-structure-type",
+   "uml-id": "_jRAQsEdoEeax2rWez10Siw",
+   "uml-type": "uml:DataType",
+   "uml-name": "TdmStructureType"
+  },
+  "tdm-structure-name": {
+   "id": "tdm-structure-name",
+   "uml-id": "_1bJF4EdoEeax2rWez10Siw",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": true,
+   "is-key": 1,
+   "description": [
+    "Names to be chosen from the following list: 'e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"
+   ],
+   "uml-name": "tdmStructureName",
+   "controlType": "text"
+  },
+  "tdm-segment-size": {
+   "id": "tdm-segment-size",
+   "uml-id": "_hPq1oEdpEeax2rWez10Siw",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 2,
+   "is-read-only": true,
+   "unit": "kbit/s",
+   "description": [
+    "Size of the TDM segment in kbit/s. Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;"
+   ],
+   "uml-name": "tdmSegmentSize",
+   "controlType": "number"
+  },
+  "max-number-of-segments-reservable": {
+   "id": "max-number-of-segments-reservable",
+   "uml-id": "_EJnsgEdpEeax2rWez10Siw",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 3,
+   "is-read-only": true,
+   "unit": "segments",
+   "description": [
+    "Device specific maximum number of segments (not depending on current air interface configuration) that can be reserved for this type of segment on a single air interface."
+   ],
+   "uml-name": "maxNumberOfSegmentsReservable",
+   "controlType": "number"
+  },
+  "structure-problem-severity-type": {
+   "id": "structure-problem-severity-type",
+   "uml-id": "_LPgp4Gz0Eeaf-__BRLM84g",
+   "uml-type": "uml:DataType",
+   "uml-name": "StructureProblemSeverityType"
+  },
+  "structure-current-problem-type": {
+   "id": "structure-current-problem-type",
+   "uml-id": "_UC0gAMXnEeWJ6KZuc0h_vw",
+   "uml-type": "uml:DataType",
+   "uml-name": "StructureCurrentProblemType"
+  },
+  "structure-performance-type": {
+   "id": "structure-performance-type",
+   "uml-id": "_kzEicEQdEea3g-FxAUaYRg",
+   "uml-type": "uml:DataType",
+   "description": [
+    "Consolidated performance information of the Structure."
+   ],
+   "uml-name": "StructurePerformanceType"
+  },
+  "structure-current-performance-type": {
+   "id": "structure-current-performance-type",
+   "uml-id": "_o7jNQGz6Eeaf-__BRLM84g",
+   "uml-type": "uml:DataType",
+   "description": [
+    "Turns performance information into current performance information by inheriting from OTN_CurrentData."
+   ],
+   "uml-name": "StructureCurrentPerformanceType"
+  },
+  "structure-historical-performance-type": {
+   "id": "structure-historical-performance-type",
+   "uml-id": "_pNAJoGz6Eeaf-__BRLM84g",
+   "uml-type": "uml:DataType",
+   "description": [
+    "Turns performance information into historical performance information by inheriting from OTN_HistoryData."
+   ],
+   "uml-name": "StructureHistoricalPerformanceType"
+  },
+  "container-name": {
+   "id": "container-name",
+   "uml-id": "_o0IuQMWkEeW3xsRKtpCLuA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": true,
+   "is-key": 1,
+   "description": [
+    "Names to be chosen from the following list: 'ethernet','e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"
+   ],
+   "uml-name": "containerName",
+   "controlType": "text"
+  },
+  "number-of-time-slots-required": {
+   "id": "number-of-time-slots-required",
+   "uml-id": "_sZ82MMXXEeW3xsRKtpCLuA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 2,
+   "is-read-only": true,
+   "unit": "timeslots",
+   "description": [
+    "Number of time slots required for transporting this type of container. Value must be calculated by the vendor after defining the timeSlotCapacity. For containers of fixed size: numberOfTimeSlotsRequired = required bandwidth of the container divided by timeSlotCapacity. For containers of variable size the minimum (most probably 1) is to be stated."
+   ],
+   "uml-name": "numberOfTimeSlotsRequired",
+   "controlType": "number"
+  },
+  "tdm-time-slots-is-required": {
+   "id": "tdm-time-slots-is-required",
+   "uml-id": "_hIagINrWEeWcA7plcJPZ7A",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 3,
+   "is-read-only": true,
+   "description": [
+    "Shall be set to '1', if this container type requires bandwidth (times slots) reserved for TDM transport."
+   ],
+   "uml-name": "tdmTimeSlotsIsRequired",
+   "controlType": "checkbox"
+  },
+  "tdm-container-type": {
+   "id": "tdm-container-type",
+   "uml-id": "_rgbigEdjEeax2rWez10Siw",
+   "uml-type": "uml:DataType",
+   "uml-name": "TdmContainerType"
+  },
+  "tdm-container-name": {
+   "id": "tdm-container-name",
+   "uml-id": "_rgbigkdjEeax2rWez10Siw",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": true,
+   "is-key": 1,
+   "description": [
+    "Names to be chosen from the following list: 'e1','t1','j1','e3','t3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"
+   ],
+   "uml-name": "tdmContainerName",
+   "controlType": "text"
+  },
+  "tdm-container-size": {
+   "id": "tdm-container-size",
+   "uml-id": "_rgbihEdjEeax2rWez10Siw",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 2,
+   "is-read-only": true,
+   "unit": "kbit/s",
+   "description": [
+    "Capacity required for transporting this type of container (in kbit/s). Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;"
+   ],
+   "uml-name": "tdmContainerSize",
+   "controlType": "number"
+  },
+  "segment-id-type": {
+   "id": "segment-id-type",
+   "uml-id": "_Nd1F4MKuEeWwLJhHQlOGSQ",
+   "uml-type": "uml:DataType",
+   "description": [
+    "Identifies the segments, which are used to transport the container."
+   ],
+   "uml-name": "SegmentIDType"
+  },
+  "structure-id-ref": {
+   "id": "structure-id-ref",
+   "uml-id": "_N4GKkMKvEeWwLJhHQlOGSQ",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg",
+   "order-number": 1,
+   "is-read-only": false,
+   "is-key": 1,
+   "uml-name": "structureIdRef"
+  },
+  "segment-id-ref": {
+   "id": "segment-id-ref",
+   "uml-id": "_nVubgMKvEeWwLJhHQlOGSQ",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 2,
+   "is-read-only": false,
+   "is-key": 2,
+   "description": [
+    "Combinations of structureId and segmentId must be unique inside the device to assure that every resource is used just once."
+   ],
+   "uml-name": "segmentIdRef",
+   "controlType": "number"
+  },
+  "segment-status-type": {
+   "id": "segment-status-type",
+   "uml-id": "_KwZVcMUCEeW3xsRKtpCLuA",
+   "uml-type": "uml:DataType",
+   "uml-name": "SegmentStatusType"
+  },
+  "segment-status-type-id": {
+   "id": "segment-status-type-id",
+   "uml-id": "_7JBAYOLbEeWM2vUDE3Xqhw",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 1,
+   "is-read-only": true,
+   "is-key": 1,
+   "uml-name": "segmentStatusTypeId",
+   "controlType": "number"
+  },
+  "segment-is-reserved-for-tdm": {
+   "id": "segment-is-reserved-for-tdm",
+   "uml-id": "__1DMwMUCEeW3xsRKtpCLuA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 2,
+   "is-read-only": true,
+   "description": [
+    "The number of segments, which is configured by Structure::StructureConfiguration::tdmReservedNumberOfSegements, has to be reserved for TDM. Starting from the lowest index value, these segments have to be marked with a 'true' in segmentIsReservedForTdm."
+   ],
+   "uml-name": "segmentIsReservedForTdm",
+   "controlType": "checkbox"
+  },
+  "operational-status": {
+   "id": "operational-status",
+   "uml-id": "_ZA94EMUCEeW3xsRKtpCLuA",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel-CoreModel/CoreModel.uml#_lNclkLEtEeSZUdYfPSdgew",
+   "order-number": 3,
+   "is-read-only": true,
+   "description": [
+    "Current operational status of each segment."
+   ],
+   "uml-name": "operationalStatus"
+  },
+  "obsolete-priority-class": {
+   "id": "obsolete-priority-class",
+   "uml-id": "_ebslwMnAEeWYRsWW_rqpgw",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 4,
+   "is-read-only": true,
+   "description": [
+    "PriorityClass as inherited from the associated Container::ContainerConfiguration::priorityClass. In case the device is capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, priorityClass shall be considered, while calculating the dropOrderRank."
+   ],
+   "uml-name": "obsoletePriorityClass",
+   "controlType": "number"
+  },
+  "obsolete-drop-order-rank": {
+   "id": "obsolete-drop-order-rank",
+   "uml-id": "_DbJpMMnDEeWYRsWW_rqpgw",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 5,
+   "is-read-only": true,
+   "description": [
+    "In case the device is NOT capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, dropOrderRank is number of segments minus sequence number of the segment. In case the device is capable of adapting the sequence, dropOrderRank has to be calculated by the device in dependency to the assigned priorityClass. _unique: within Structure::StructureStatus::segmentStatusList"
+   ],
+   "uml-name": "obsoleteDropOrderRank",
+   "controlType": "number"
+  },
+  "container-problem-severity-type": {
+   "id": "container-problem-severity-type",
+   "uml-id": "_OMPgwGz0Eeaf-__BRLM84g",
+   "uml-type": "uml:DataType",
+   "uml-name": "ContainerProblemSeverityType"
+  },
+  "container-current-problem-type": {
+   "id": "container-current-problem-type",
+   "uml-id": "__h1n4MXpEeWJ6KZuc0h_vw",
+   "uml-type": "uml:DataType",
+   "uml-name": "ContainerCurrentProblemType"
+  },
+  "container-performance-type": {
+   "id": "container-performance-type",
+   "uml-id": "_U9tW0EQeEea3g-FxAUaYRg",
+   "uml-type": "uml:DataType",
+   "description": [
+    "Consolidated performance information of the Container."
+   ],
+   "uml-name": "ContainerPerformanceType"
+  },
+  "tx-ethernet-bytes-max-s": {
+   "id": "tx-ethernet-bytes-max-s",
+   "uml-id": "_MaHB8H1IEeWHjMaYlqnBcw",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 1,
+   "is-read-only": true,
+   "unit": "Bytes/s",
+   "description": [
+    "Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a second and keeps the highest value within the measurement period. Field to be left blank for all types of TDM containers."
+   ],
+   "uml-name": "txEthernetBytesMaxS",
+   "controlType": "number"
+  },
+  "tx-ethernet-bytes-max-m": {
+   "id": "tx-ethernet-bytes-max-m",
+   "uml-id": "_M3NNoH1IEeWHjMaYlqnBcw",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 2,
+   "is-read-only": true,
+   "unit": "Bytes/min",
+   "description": [
+    "Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a minute and keeps the highest value with in the measurement period. Field to be left blank for all types of TDM containers."
+   ],
+   "uml-name": "txEthernetBytesMaxM",
+   "controlType": "number"
+  },
+  "tx-ethernet-bytes-sum": {
+   "id": "tx-ethernet-bytes-sum",
+   "uml-id": "_NWtNEH1IEeWHjMaYlqnBcw",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 3,
+   "is-read-only": true,
+   "unit": "Bytes",
+   "description": [
+    "Total number of Bytes of Ethernet traffic (before header compression) transmitted (in direction out of the device) during the measurement period. Field to be left blank for all types of TDM containers."
+   ],
+   "uml-name": "txEthernetBytesSum",
+   "controlType": "number"
+  },
+  "container-current-performance-type": {
+   "id": "container-current-performance-type",
+   "uml-id": "_pA5AQGz6Eeaf-__BRLM84g",
+   "uml-type": "uml:DataType",
+   "description": [
+    "Turns performance information into current performance information by inheriting from OTN_CurrentData."
+   ],
+   "uml-name": "ContainerCurrentPerformanceType"
+  },
+  "container-historical-performance-type": {
+   "id": "container-historical-performance-type",
+   "uml-id": "_pTaToGz6Eeaf-__BRLM84g",
+   "uml-type": "uml:DataType",
+   "description": [
+    "Turns performance information into historical performance information by inheriting from OTN_HistoryData."
+   ],
+   "uml-name": "ContainerHistoricalPerformanceType"
+  },
+  "3-cz3-u-is-d-eead4-ers-mr-oj-bq": {
+   "id": "3-cz3-u-is-d-eead4-ers-mr-oj-bq",
+   "uml-id": "_3CZ3UIsDEead4ersMrOjBQ",
+   "enum": [
+    "NON",
+    "IF",
+    "RF"
+   ],
+   "is-read-only": false,
+   "uml-name": "_3CZ3UIsDEead4ersMrOjBQ"
+  },
+  "e-iml0-jh1-ee-w-udbnmm-ni-taa": {
+   "id": "e-iml0-jh1-ee-w-udbnmm-ni-taa",
+   "uml-id": "_eIml0JH1EeWUdbnmmNiTAA",
+   "enum": [
+    "NON_ALARMED",
+    "WARNING",
+    "MINOR",
+    "MAJOR",
+    "CRITICAL"
+   ],
+   "is-read-only": false,
+   "description": [
+    "According to ITU-T M.3160"
+   ],
+   "uml-name": "_eIml0JH1EeWUdbnmmNiTAA"
+  },
+  "e85-ns-i99-ee-w-fluv9-kl-ll5-a": {
+   "id": "e85-ns-i99-ee-w-fluv9-kl-ll5-a",
+   "uml-id": "_e85NsI99EeWFluv9KLLl5A",
+   "enum": [
+    "NOT_SPECIFIED",
+    "HORIZONTAL",
+    "VERTICAL"
+   ],
+   "is-read-only": false,
+   "uml-name": "_e85NsI99EeWFluv9KLLl5A"
+  },
+  "da-b5-ij-rg-ee-wx-ip-ew-zq-gmw": {
+   "id": "da-b5-ij-rg-ee-wx-ip-ew-zq-gmw",
+   "uml-id": "_DaB5IJRgEeWxIPEwZQ_gmw",
+   "enum": [
+    "HSB"
+   ],
+   "is-read-only": false,
+   "uml-name": "_DaB5IJRgEeWxIPEwZQ_gmw"
+  },
+  "01-d-yj-re-ee-wx-ip-ew-zq-gmw": {
+   "id": "01-d-yj-re-ee-wx-ip-ew-zq-gmw",
+   "uml-id": "_01_dYJReEeWxIPEwZQ_gmw",
+   "enum": [
+    "WORKING",
+    "PROTECTION",
+    "PROTECTED"
+   ],
+   "is-read-only": false,
+   "uml-name": "_01_dYJReEeWxIPEwZQ_gmw"
+  },
+  "du-js8-jox-ee-wz-6-sq-lz-uedw": {
+   "id": "du-js8-jox-ee-wz-6-sq-lz-uedw",
+   "uml-id": "_DUJs8JOXEeWz-6sqLzUedw",
+   "enum": [
+    "GROUP_DOWN",
+    "NOT_ALL_AI_ACTIVE",
+    "ALL_AI_ACTIVE"
+   ],
+   "is-read-only": false,
+   "uml-name": "_DUJs8JOXEeWz-6sqLzUedw"
+  }
+ }
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.yin.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.yin.json
new file mode 100755
index 0000000..0601324
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.yin.json
@@ -0,0 +1,257 @@
+{
+	"module": {
+		"name": "microwave-model",
+		"microwave-model": {
+			"wire-interface-pac": {
+				"type": "list",
+				"key": "layer-protocol",
+				"wirebased-interface-capability": {
+					"name": "wirebased-interface-capability",
+					"local-name": "capability",
+					"type": "container"
+				},
+				"wirebased-interface-configuration": {
+					"name": "wirebased-interface-configuration",
+					"local-name": "configuration",
+					"type": "container"
+				},
+				"wirebased-interface-status": {
+					"name": "wirebased-interface-status",
+					"local-name": "status",
+					"type": "container"
+				},
+				"wirebased-interface-current-problems": {
+					"name": "wirebased-interface-current-problems",
+					"local-name": "current-problems",
+					"type": "container"
+				},
+				"wirebased-interface-current-performance": {
+					"name": "wirebased-interface-current-performance",
+					"local-name": "current-performance",
+					"type": "container"
+				},
+				"wirebased-interface-historical-performances": {
+					"name": "wirebased-interface-historical-performances",
+					"local-name": "historical-performances",
+					"type": "container"
+				}
+			},
+			"mw-air-interface-pac": {
+				"type": "list",
+				"key": "layer-protocol",
+				"air-interface-capability": {
+					"name": "air-interface-capability",
+					"local-name": "capability",
+					"type": "container"
+				},
+				"air-interface-configuration": {
+					"name": "air-interface-configuration",
+					"local-name": "configuration",
+					"type": "container"
+				},
+				"air-interface-status": {
+					"name": "air-interface-status",
+					"local-name": "status",
+					"type": "container"
+				},
+				"air-interface-current-problems": {
+					"name": "air-interface-current-problems",
+					"local-name": "current-problems",
+					"type": "container"
+				},
+				"air-interface-current-performance": {
+					"name": "air-interface-current-performance",
+					"local-name": "current-performance",
+					"type": "container"
+				},
+				"air-interface-historical-performances": {
+					"name": "air-interface-historical-performances",
+					"local-name": "historical-performances",
+					"type": "container"
+				}
+			},
+			"co-channel-group": {
+				"type": "list",
+				"key": "co-channel-group-id"
+			},
+			"mw-air-interface-hsb-end-point-pac": {
+				"type": "list",
+				"key": "endpoint"
+			},
+			"mw-air-interface-hsb-fc-switch-pac": {
+				"type": "list",
+				"key": "fcswitch"
+			},
+			"mw-air-interface-diversity-pac": {
+				"type": "list",
+				"key": "layer-protocol",
+				"air-interface-diversity-capability": {
+					"name": "air-interface-diversity-capability",
+					"local-name": "capability",
+					"type": "container"
+				},
+				"air-interface-diversity-configuration": {
+					"name": "air-interface-diversity-configuration",
+					"local-name": "configuration",
+					"type": "container"
+				},
+				"air-interface-diversity-status": {
+					"name": "air-interface-diversity-status",
+					"local-name": "status",
+					"type": "container"
+				},
+				"air-interface-diversity-current-problems": {
+					"name": "air-interface-diversity-current-problems",
+					"local-name": "current-problems",
+					"type": "container"
+				},
+				"air-interface-diversity-current-performance": {
+					"name": "air-interface-diversity-current-performance",
+					"local-name": "current-performance",
+					"type": "container"
+				},
+				"air-interface-diversity-historical-performances": {
+					"name": "air-interface-diversity-historical-performances",
+					"local-name": "historical-performances",
+					"type": "container"
+				}
+			},
+			"mw-pure-ethernet-structure-pac": {
+				"type": "list",
+				"key": "layer-protocol",
+				"pure-ethernet-structure-capability": {
+					"name": "pure-ethernet-structure-capability",
+					"local-name": "capability",
+					"type": "container"
+				},
+				"pure-ethernet-structure-configuration": {
+					"name": "pure-ethernet-structure-configuration",
+					"local-name": "configuration",
+					"type": "container"
+				},
+				"pure-ethernet-structure-status": {
+					"name": "pure-ethernet-structure-status",
+					"local-name": "status",
+					"type": "container"
+				},
+				"pure-ethernet-structure-current-problems": {
+					"name": "pure-ethernet-structure-current-problems",
+					"local-name": "current-problems",
+					"type": "container"
+				},
+				"pure-ethernet-structure-current-performance": {
+					"name": "pure-ethernet-structure-current-performance",
+					"local-name": "current-performance",
+					"type": "container"
+				},
+				"pure-ethernet-structure-historical-performances": {
+					"name": "pure-ethernet-structure-historical-performances",
+					"local-name": "historical-performances",
+					"type": "container"
+				}
+			},
+			"mw-hybrid-mw-structure-pac": {
+				"type": "list",
+				"key": "layer-protocol",
+				"hybrid-mw-structure-capability": {
+					"name": "hybrid-mw-structure-capability",
+					"local-name": "capability",
+					"type": "container"
+				},
+				"hybrid-mw-structure-configuration": {
+					"name": "hybrid-mw-structure-configuration",
+					"local-name": "configuration",
+					"type": "container"
+				},
+				"hybrid-mw-structure-status": {
+					"name": "hybrid-mw-structure-status",
+					"local-name": "status",
+					"type": "container"
+				},
+				"hybrid-mw-structure-current-problems": {
+					"name": "hybrid-mw-structure-current-problems",
+					"local-name": "current-problems",
+					"type": "container"
+				},
+				"hybrid-mw-structure-current-performance": {
+					"name": "hybrid-mw-structure-current-performance",
+					"local-name": "current-performance",
+					"type": "container"
+				},
+				"hybrid-mw-structure-historical-performances": {
+					"name": "hybrid-mw-structure-historical-performances",
+					"local-name": "historical-performances",
+					"type": "container"
+				}
+			},
+			"mw-ethernet-container-pac": {
+				"type": "list",
+				"key": "layer-protocol",
+				"ethernet-container-capability": {
+					"name": "ethernet-container-capability",
+					"local-name": "capability",
+					"type": "container"
+				},
+				"ethernet-container-configuration": {
+					"name": "ethernet-container-configuration",
+					"local-name": "configuration",
+					"type": "container"
+				},
+				"ethernet-container-status": {
+					"name": "ethernet-container-status",
+					"local-name": "status",
+					"type": "container"
+				},
+				"ethernet-container-current-problems": {
+					"name": "ethernet-container-current-problems",
+					"local-name": "current-problems",
+					"type": "container"
+				},
+				"ethernet-container-current-performance": {
+					"name": "ethernet-container-current-performance",
+					"local-name": "current-performance",
+					"type": "container"
+				},
+				"ethernet-container-historical-performances": {
+					"name": "ethernet-container-historical-performances",
+					"local-name": "historical-performances",
+					"type": "container"
+				}
+			},
+			"mw-tdm-container-pac": {
+				"type": "list",
+				"key": "layer-protocol",
+				"tdm-container-capability": {
+					"name": "tdm-container-capability",
+					"local-name": "capability",
+					"type": "container"
+				},
+				"tdm-container-configuration": {
+					"name": "tdm-container-configuration",
+					"local-name": "configuration",
+					"type": "container"
+				},
+				"tdm-container-status": {
+					"name": "tdm-container-status",
+					"local-name": "status",
+					"type": "container"
+				},
+				"tdm-container-current-problems": {
+					"name": "tdm-container-current-problems",
+					"local-name": "current-problems",
+					"type": "container"
+				},
+				"tdm-container-current-performance": {
+					"name": "tdm-container-current-performance",
+					"local-name": "current-performance",
+					"type": "container"
+				},
+				"tdm-container-historical-performances": {
+					"name": "tdm-container-historical-performances",
+					"local-name": "historical-performances",
+					"type": "container"
+				}
+			}
+		}
+	}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/microwave-model@2018-10-10.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/microwave-model@2018-10-10.schema-information.json
new file mode 100644
index 0000000..16f966e
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/microwave-model@2018-10-10.schema-information.json
@@ -0,0 +1,3548 @@
+{ "schama-information": {
+
+"microwave-model": {
+"id": "microwave-model", 
+"is-read-only": false, 
+"description": ["This module contains a collection of YANG definitions for managing wireless networks. This model is for vendor agnostic management of wireless network elements."]
+},
+"rf-to-remote": {
+"id": "rf-to-remote", 
+"is-read-only": false, 
+"description": ["Returning the header information of the remote site back to the remote site on the radio interface between both outdoor units."]
+},
+"rf-to-local": {
+"id": "rf-to-local", 
+"is-read-only": false, 
+"description": ["Returning the header information of the local site back to the local site on the radio interface between both outdoor units."]
+},
+"if-to-remote": {
+"id": "if-to-remote", 
+"is-read-only": false, 
+"description": ["Returning the header information of the remote site back to the remote site on the intermediate frequency interface between local indoor unit and outdoor unit."]
+},
+"if-to-local": {
+"id": "if-to-local", 
+"is-read-only": false, 
+"description": ["Returning the header information of the local site back to the local site on the intermediate frequency interface between local indoor unit and outdoor unit."]
+},
+"none": {
+"id": "none", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"if": {
+"id": "if", 
+"is-read-only": false, 
+"description": ["Intermediate Frequency on the interface between indoor and outdoor unit."]
+},
+"rf": {
+"id": "rf", 
+"is-read-only": false, 
+"description": ["Radio Frequency on the interface between outdoor unit and outdoor unit at the remote site."]
+},
+"loop-back-type": {
+"id": "loop-back-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"non-alarmed": {
+"id": "non-alarmed", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"warning": {
+"id": "warning", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"minor": {
+"id": "minor", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"major": {
+"id": "major", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"critical": {
+"id": "critical", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"severity-type": {
+"id": "severity-type", 
+"is-read-only": false, 
+"description": ["According to ITU-T M.3160"]
+},
+"supported-channel-plan": {
+"id": "supported-channel-plan", 
+"is-read-only": false, 
+"description": ["Unique name (e.g. ECC/REC/(01)04_Annex 5) of a document, which describes a frequency grid that can be adjusted at the air interface. Corresponding channel plans to be delivered by the hardware vendor and to be stored by the operator in an controller/application attached database."]
+},
+"duplex-distance-is-variable": {
+"id": "duplex-distance-is-variable", 
+"is-read-only": false, 
+"description": ["To be set on 'true', if the distance between transmitted and received frequency is variable."]
+},
+"duplex-distance-list": {
+"id": "duplex-distance-list", 
+"is-read-only": false, 
+"description": ["Distance between transmitted and received frequency. To be filled with single value, in case duplex distance is not variable. To be filled with all configurable values, in case duplex distance is variable."]
+},
+"duplex-distance": {
+"id": "duplex-distance", 
+"is-read-only": false, 
+"description": ["Distance between transmitted and received frequency."]
+},
+"auto-freq-select-is-avail": {
+"id": "auto-freq-select-is-avail", 
+"is-read-only": false, 
+"description": ["In case the microwave radio is capable of automatically selecting the transmit frequency in unlicensed bands, this field shall contain a 'true'."]
+},
+"transmission-mode-list": {
+"id": "transmission-mode-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"channel-plan-type-g": {
+"id": "channel-plan-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"transmission-mode-id": {
+"id": "transmission-mode-id", 
+"is-read-only": false, 
+"description": ["Indentifies the transmissionMode for internal reference."]
+},
+"transmission-mode-name": {
+"id": "transmission-mode-name", 
+"is-read-only": false, 
+"description": ["Name of the transmission mode. BBBB-m*-i*/t*-r*. B=four digits of channel bandwidth in MHz. m*=required number of digits for modulation name. (i*/t*=code rate.) i*=required number of digits for number of information bits. t*=required number of digits for total bits. r*=required number of digits for rate reduction factor. Example: 028-4QAM-188/204-1"]
+},
+"channel-bandwidth": {
+"id": "channel-bandwidth", 
+"is-read-only": false, 
+"description": ["Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"]
+},
+"modulation-scheme": {
+"id": "modulation-scheme", 
+"is-read-only": false, 
+"description": ["Modulation scheme, which is base to the other characteristics described in the same transmissionModeType data type. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256')."]
+},
+"code-rate": {
+"id": "code-rate", 
+"is-read-only": false, 
+"description": ["Code rate of the coding scheme in % (Net bit rate ≤ Gross bit rate · code rate)."]
+},
+"symbol-rate-reduction-factor": {
+"id": "symbol-rate-reduction-factor", 
+"is-read-only": false, 
+"description": ["Reduction factor for the symbol rate. Example: value would be 4 for 1/4BPSK."]
+},
+"tx-power-min": {
+"id": "tx-power-min", 
+"is-read-only": false, 
+"description": ["Value of the minimum transmit power the modem can operate in dBm."]
+},
+"tx-power-max": {
+"id": "tx-power-max", 
+"is-read-only": false, 
+"description": ["Value of the maximum transmit power the modem can operate in dBm."]
+},
+"rx-threshold": {
+"id": "rx-threshold", 
+"is-read-only": false, 
+"description": ["Value of the receive level required to decode the received signal with a Bit Error Rate of 1e-6 or less."]
+},
+"am-upshift-level": {
+"id": "am-upshift-level", 
+"is-read-only": false, 
+"description": ["Value of the receive level that has to be exceeded to shift into a higher modulation scheme."]
+},
+"am-downshift-level": {
+"id": "am-downshift-level", 
+"is-read-only": false, 
+"description": ["Value of the receive level that has to be exceeded for not shifting into a lower modulation scheme."]
+},
+"xpic-is-avail": {
+"id": "xpic-is-avail", 
+"is-read-only": false, 
+"description": ["In case this air interface type is capable of XPIC, this field shall contain a 'true'. This information shall purely relate to capabilities of the equipment type, but not to the operational capability of a specific hardware composition on site. Means for example that this attribute might contain a 'true' statement, even if an additional cable would have been required to actually operate XPIC in a specific case."]
+},
+"transmission-mode-type-g": {
+"id": "transmission-mode-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"not-specified": {
+"id": "not-specified", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"horizontal": {
+"id": "horizontal", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"vertical": {
+"id": "vertical", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"polarization-type": {
+"id": "polarization-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"es": {
+"id": "es", 
+"is-read-only": false, 
+"description": ["Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::es ."]
+},
+"ses": {
+"id": "ses", 
+"is-read-only": false, 
+"description": ["Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::ses ."]
+},
+"cses": {
+"id": "cses", 
+"is-read-only": false, 
+"description": ["Consecutive Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::cses ."]
+},
+"not-specified": {
+"id": "not-specified", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"g826-type": {
+"id": "g826-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"g826-value-kind": {
+"id": "g826-value-kind", 
+"is-read-only": false, 
+"description": ["Kind of performance value that shall be equipped with a threshold alarm."]
+},
+"granularity-period": {
+"id": "granularity-period", 
+"is-read-only": false, 
+"description": ["Period of the performance data collection."]
+},
+"alarm-raising-threshold": {
+"id": "alarm-raising-threshold", 
+"is-read-only": false, 
+"description": ["Number of events required for raising the threshold cross alarm."]
+},
+"alarm-clearing-threshold": {
+"id": "alarm-clearing-threshold", 
+"is-read-only": false, 
+"description": ["Number of events required for clearing the threshold cross alarm."]
+},
+"threshold-cross-alarm-type-g": {
+"id": "threshold-cross-alarm-type-g", 
+"is-read-only": false, 
+"description": ["Allows defining a threshold cross alarm."]
+},
+"problem-kind-name": {
+"id": "problem-kind-name", 
+"is-read-only": false, 
+"description": ["Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms"]
+},
+"problem-kind-severity": {
+"id": "problem-kind-severity", 
+"is-read-only": false, 
+"description": ["Severity of this type of alarm."]
+},
+"air-interface-problem-severity-type-g": {
+"id": "air-interface-problem-severity-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"problem-name": {
+"id": "problem-name", 
+"is-read-only": false, 
+"description": ["Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms"]
+},
+"air-interface-current-problem-type-g": {
+"id": "air-interface-current-problem-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"transmission-mode": {
+"id": "transmission-mode", 
+"is-read-only": false, 
+"description": ["Operated transmission mode."]
+},
+"time": {
+"id": "time", 
+"is-read-only": false, 
+"description": ["Sum of all seconds the transmitter operated the transmission mode."]
+},
+"time-x-states-type-g": {
+"id": "time-x-states-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"es": {
+"id": "es", 
+"is-read-only": false, 
+"description": ["Number of errored seconds."]
+},
+"ses": {
+"id": "ses", 
+"is-read-only": false, 
+"description": ["Number of severely errored seconds."]
+},
+"cses": {
+"id": "cses", 
+"is-read-only": false, 
+"description": ["Number of consecutive severely errored seconds."]
+},
+"unavailability": {
+"id": "unavailability", 
+"is-read-only": false, 
+"description": ["Total time of unavailability in seconds."]
+},
+"tx-level-min": {
+"id": "tx-level-min", 
+"is-read-only": false, 
+"description": ["Minimum transmit power. Signed integers are required."]
+},
+"tx-level-max": {
+"id": "tx-level-max", 
+"is-read-only": false, 
+"description": ["Maximum transmit power. Signed integers are required."]
+},
+"tx-level-avg": {
+"id": "tx-level-avg", 
+"is-read-only": false, 
+"description": ["Averaged transmit power. Signed integers are required."]
+},
+"rx-level-min": {
+"id": "rx-level-min", 
+"is-read-only": false, 
+"description": ["Minimum receive level. Signed integers are required."]
+},
+"rx-level-max": {
+"id": "rx-level-max", 
+"is-read-only": false, 
+"description": ["Maximum receive level. Signed integers are required."]
+},
+"rx-level-avg": {
+"id": "rx-level-avg", 
+"is-read-only": false, 
+"description": ["Averaged receive level. Signed integers are required."]
+},
+"time-x-states-list": {
+"id": "time-x-states-list", 
+"is-read-only": false, 
+"description": ["Time period the transmitter operated in the respective transmission mode."]
+},
+"time2-states": {
+"id": "time2-states", 
+"is-read-only": false, 
+"description": ["Sum of all seconds the transmitter operated in e.g. BPSK."]
+},
+"time4-states-s": {
+"id": "time4-states-s", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time4-states": {
+"id": "time4-states", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time8-states": {
+"id": "time8-states", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time16-states-s": {
+"id": "time16-states-s", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time16-states": {
+"id": "time16-states", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time32-states": {
+"id": "time32-states", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time64-states": {
+"id": "time64-states", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time128-states": {
+"id": "time128-states", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time256-states": {
+"id": "time256-states", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time512-states": {
+"id": "time512-states", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time512-states-l": {
+"id": "time512-states-l", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time1024-states": {
+"id": "time1024-states", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time1024-states-l": {
+"id": "time1024-states-l", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time2048-states": {
+"id": "time2048-states", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time2048-states-l": {
+"id": "time2048-states-l", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time4096-states": {
+"id": "time4096-states", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time4096-states-l": {
+"id": "time4096-states-l", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time8192-states": {
+"id": "time8192-states", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time8192-states-l": {
+"id": "time8192-states-l", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"snir-min": {
+"id": "snir-min", 
+"is-read-only": false, 
+"description": ["Minimum signal to (noise+interference) ratio."]
+},
+"snir-max": {
+"id": "snir-max", 
+"is-read-only": false, 
+"description": ["Maximum signal to (noise+interference) ratio."]
+},
+"snir-avg": {
+"id": "snir-avg", 
+"is-read-only": false, 
+"description": ["Averaged signal to (noise+interference) ratio."]
+},
+"xpd-min": {
+"id": "xpd-min", 
+"is-read-only": false, 
+"description": ["Minimum cross polarization discrimination."]
+},
+"xpd-max": {
+"id": "xpd-max", 
+"is-read-only": false, 
+"description": ["Maximum cross polarization discrimination."]
+},
+"xpd-avg": {
+"id": "xpd-avg", 
+"is-read-only": false, 
+"description": ["Averaged cross polarization discrimination."]
+},
+"rf-temp-min": {
+"id": "rf-temp-min", 
+"is-read-only": false, 
+"description": ["Lowest temperature (in degree Celsius) of the radio module inside the outdoor unit."]
+},
+"rf-temp-max": {
+"id": "rf-temp-max", 
+"is-read-only": false, 
+"description": ["Highest temperature (in degree Celsius) of the radio module inside the outdoor unit."]
+},
+"rf-temp-avg": {
+"id": "rf-temp-avg", 
+"is-read-only": false, 
+"description": ["Averaged temperature (in degree Celsius) of the radio module inside the outdoor unit."]
+},
+"defect-blocks-sum": {
+"id": "defect-blocks-sum", 
+"is-read-only": false, 
+"description": ["Total number of blocks that were defect after receiving and could not be corrected by the FEC."]
+},
+"time-period": {
+"id": "time-period", 
+"is-read-only": false, 
+"description": ["Total length of the measurement period."]
+},
+"air-interface-performance-type-g": {
+"id": "air-interface-performance-type-g", 
+"is-read-only": false, 
+"description": ["Consolidated performance information of the air interface."]
+},
+"performance-data": {
+"id": "performance-data", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"air-interface-current-performance-type-g": {
+"id": "air-interface-current-performance-type-g", 
+"is-read-only": false, 
+"description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."]
+},
+"performance-data": {
+"id": "performance-data", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"air-interface-historical-performance-type-g": {
+"id": "air-interface-historical-performance-type-g", 
+"is-read-only": false, 
+"description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."]
+},
+"hsb": {
+"id": "hsb", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"protection-type": {
+"id": "protection-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"working": {
+"id": "working", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"protection": {
+"id": "protection", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"protected": {
+"id": "protected", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"role-type": {
+"id": "role-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"diversity-name": {
+"id": "diversity-name", 
+"is-read-only": false, 
+"description": ["Names to be chosen from the following list: 'spaceDiversity', 'frequencyDiversity'"]
+},
+"number-of-air-interfaces-max": {
+"id": "number-of-air-interfaces-max", 
+"is-read-only": false, 
+"description": ["Maximum number of air interfaces that could be part of this kind of diversity."]
+},
+"diversity-type-g": {
+"id": "diversity-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"group-down": {
+"id": "group-down", 
+"is-read-only": false, 
+"description": ["All air interfaces that are members of the diversity configuration are down."]
+},
+"not-all-ai-active": {
+"id": "not-all-ai-active", 
+"is-read-only": false, 
+"description": ["At least one, but not all of the air interfaces that are part of the diversity configuration is not working."]
+},
+"all-ai-active": {
+"id": "all-ai-active", 
+"is-read-only": false, 
+"description": ["All air interfaces that are part of the diversity configuration are working."]
+},
+"air-interface-diversity-status-type": {
+"id": "air-interface-diversity-status-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"problem-kind-name": {
+"id": "problem-kind-name", 
+"is-read-only": false, 
+"description": ["Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms"]
+},
+"problem-kind-severity": {
+"id": "problem-kind-severity", 
+"is-read-only": false, 
+"description": ["Severity of this type of alarm."]
+},
+"air-interface-diversity-problem-severity-type-g": {
+"id": "air-interface-diversity-problem-severity-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"problem-name": {
+"id": "problem-name", 
+"is-read-only": false, 
+"description": ["Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms"]
+},
+"air-interface-diversity-current-problem-type-g": {
+"id": "air-interface-diversity-current-problem-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"snir-min": {
+"id": "snir-min", 
+"is-read-only": false, 
+"description": ["Minimum signal to (noise+interference) ratio of the combined signals."]
+},
+"snir-max": {
+"id": "snir-max", 
+"is-read-only": false, 
+"description": ["Maximum signal to (noise+interference) ratio of the combined signals."]
+},
+"snir-avg": {
+"id": "snir-avg", 
+"is-read-only": false, 
+"description": ["Average signal to (noise+interference) ratio of the combined signals."]
+},
+"air-interface-diversity-performance-type-g": {
+"id": "air-interface-diversity-performance-type-g", 
+"is-read-only": false, 
+"description": ["Consolidated performance information of the air interface diversity group."]
+},
+"performance-data": {
+"id": "performance-data", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"air-interface-diversity-current-performance-type-g": {
+"id": "air-interface-diversity-current-performance-type-g", 
+"is-read-only": false, 
+"description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."]
+},
+"performance-data": {
+"id": "performance-data", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"air-interface-diversity-historical-performance-type-g": {
+"id": "air-interface-diversity-historical-performance-type-g", 
+"is-read-only": false, 
+"description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."]
+},
+"tdm-structure-name": {
+"id": "tdm-structure-name", 
+"is-read-only": false, 
+"description": ["Names to be chosen from the following list: 'e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"]
+},
+"tdm-segment-size": {
+"id": "tdm-segment-size", 
+"is-read-only": false, 
+"description": ["Size of the TDM segment in kbit/s. Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;"]
+},
+"max-number-of-segments-reservable": {
+"id": "max-number-of-segments-reservable", 
+"is-read-only": false, 
+"description": ["Device specific maximum number of segments (not depending on current air interface configuration) that can be reserved for this type of segment on a single air interface."]
+},
+"tdm-structure-type-g": {
+"id": "tdm-structure-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"problem-kind-name": {
+"id": "problem-kind-name", 
+"is-read-only": false, 
+"description": ["Name of the alarm according to Structure::StructureCapability::supportedAlarms"]
+},
+"problem-kind-severity": {
+"id": "problem-kind-severity", 
+"is-read-only": false, 
+"description": ["Severity of this type of alarm."]
+},
+"structure-problem-severity-type-g": {
+"id": "structure-problem-severity-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"problem-name": {
+"id": "problem-name", 
+"is-read-only": false, 
+"description": ["Name of the alarm according to Structure::StructureCapability::supportedAlarms"]
+},
+"structure-current-problem-type-g": {
+"id": "structure-current-problem-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time-period": {
+"id": "time-period", 
+"is-read-only": false, 
+"description": ["Total length of the measurement period in seconds."]
+},
+"es": {
+"id": "es", 
+"is-read-only": false, 
+"description": ["Number of errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals."]
+},
+"ses": {
+"id": "ses", 
+"is-read-only": false, 
+"description": ["Number of severely errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals."]
+},
+"cses": {
+"id": "cses", 
+"is-read-only": false, 
+"description": ["Number of consecutive severely errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals."]
+},
+"unavailability": {
+"id": "unavailability", 
+"is-read-only": false, 
+"description": ["Total time of unavailability in seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals."]
+},
+"rx-level-min": {
+"id": "rx-level-min", 
+"is-read-only": false, 
+"description": ["Minimum receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value."]
+},
+"rx-level-max": {
+"id": "rx-level-max", 
+"is-read-only": false, 
+"description": ["Maximum receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value."]
+},
+"rx-level-avg": {
+"id": "rx-level-avg", 
+"is-read-only": false, 
+"description": ["Averaged receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value."]
+},
+"structure-performance-type-g": {
+"id": "structure-performance-type-g", 
+"is-read-only": false, 
+"description": ["Consolidated performance information of the Structure."]
+},
+"performance-data": {
+"id": "performance-data", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"structure-current-performance-type-g": {
+"id": "structure-current-performance-type-g", 
+"is-read-only": false, 
+"description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."]
+},
+"performance-data": {
+"id": "performance-data", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"structure-historical-performance-type-g": {
+"id": "structure-historical-performance-type-g", 
+"is-read-only": false, 
+"description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."]
+},
+"container-name": {
+"id": "container-name", 
+"is-read-only": false, 
+"description": ["Names to be chosen from the following list: 'ethernet','e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"]
+},
+"number-of-time-slots-required": {
+"id": "number-of-time-slots-required", 
+"is-read-only": false, 
+"description": ["Number of time slots required for transporting this type of container. Value must be calculated by the vendor after defining the timeSlotCapacity. For containers of fixed size: numberOfTimeSlotsRequired = required bandwidth of the container divided by timeSlotCapacity. For containers of variable size the minimum (most probably 1) is to be stated."]
+},
+"tdm-time-slots-is-required": {
+"id": "tdm-time-slots-is-required", 
+"is-read-only": false, 
+"description": ["Shall be set to '1', if this container type requires bandwidth (times slots) reserved for TDM transport."]
+},
+"bundling-is-avail": {
+"id": "bundling-is-avail", 
+"is-read-only": false, 
+"description": ["If it is possible to combine transport resources of several radio links to transport this container type, this attribute shall be set to '1'."]
+},
+"container-type-g": {
+"id": "container-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tdm-container-name": {
+"id": "tdm-container-name", 
+"is-read-only": false, 
+"description": ["Names to be chosen from the following list: 'e1','t1','j1','e3','t3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"]
+},
+"tdm-container-size": {
+"id": "tdm-container-size", 
+"is-read-only": false, 
+"description": ["Capacity required for transporting this type of container (in kbit/s). Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;"]
+},
+"tdm-container-type-g": {
+"id": "tdm-container-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"structure-id-ref": {
+"id": "structure-id-ref", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"segment-id-ref": {
+"id": "segment-id-ref", 
+"is-read-only": false, 
+"description": ["Combinations of structureId and segmentId must be unique inside the device to assure that every resource is used just once."]
+},
+"segment-id-type-g": {
+"id": "segment-id-type-g", 
+"is-read-only": false, 
+"description": ["Identifies the segments, which are used to transport the container."]
+},
+"segment-status-type-id": {
+"id": "segment-status-type-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"segment-is-reserved-for-tdm": {
+"id": "segment-is-reserved-for-tdm", 
+"is-read-only": false, 
+"description": ["The number of segments, which is configured by Structure::StructureConfiguration::tdmReservedNumberOfSegements, has to be reserved for TDM. Starting from the lowest index value, these segments have to be marked with a 'true' in segmentIsReservedForTdm."]
+},
+"operational-status": {
+"id": "operational-status", 
+"is-read-only": false, 
+"description": ["Current operational status of each segment."]
+},
+"obsolete-priority-class": {
+"id": "obsolete-priority-class", 
+"is-read-only": false, 
+"description": ["PriorityClass as inherited from the associated Container::ContainerConfiguration::priorityClass. In case the device is capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, priorityClass shall be considered, while calculating the dropOrderRank."]
+},
+"obsolete-drop-order-rank": {
+"id": "obsolete-drop-order-rank", 
+"is-read-only": false, 
+"description": ["In case the device is NOT capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, dropOrderRank is number of segments minus sequence number of the segment. In case the device is capable of adapting the sequence, dropOrderRank has to be calculated by the device in dependency to the assigned priorityClass. _unique: within Structure::StructureStatus::segmentStatusList"]
+},
+"segment-status-type-g": {
+"id": "segment-status-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"problem-kind-name": {
+"id": "problem-kind-name", 
+"is-read-only": false, 
+"description": ["Name of the alarm according to Container::ContainerCapability::supportedAlarms"]
+},
+"problem-kind-severity": {
+"id": "problem-kind-severity", 
+"is-read-only": false, 
+"description": ["Severity of this type of alarm."]
+},
+"container-problem-severity-type-g": {
+"id": "container-problem-severity-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"problem-name": {
+"id": "problem-name", 
+"is-read-only": false, 
+"description": ["Name of the alarm according to Container::ContainerCapability::supportedAlarms"]
+},
+"container-current-problem-type-g": {
+"id": "container-current-problem-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tx-ethernet-bytes-max-s": {
+"id": "tx-ethernet-bytes-max-s", 
+"is-read-only": false, 
+"description": ["Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a second and keeps the highest value within the measurement period. Field to be left blank for all types of TDM containers."]
+},
+"tx-ethernet-bytes-max-m": {
+"id": "tx-ethernet-bytes-max-m", 
+"is-read-only": false, 
+"description": ["Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a minute and keeps the highest value with in the measurement period. Field to be left blank for all types of TDM containers."]
+},
+"tx-ethernet-bytes-sum": {
+"id": "tx-ethernet-bytes-sum", 
+"is-read-only": false, 
+"description": ["Total number of Bytes of Ethernet traffic (before header compression) transmitted (in direction out of the device) during the measurement period. Field to be left blank for all types of TDM containers."]
+},
+"time-period": {
+"id": "time-period", 
+"is-read-only": false, 
+"description": ["Total length of the measurement period in seconds."]
+},
+"container-performance-type-g": {
+"id": "container-performance-type-g", 
+"is-read-only": false, 
+"description": ["Consolidated performance information of the Container."]
+},
+"performance-data": {
+"id": "performance-data", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"container-current-performance-type-g": {
+"id": "container-current-performance-type-g", 
+"is-read-only": false, 
+"description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."]
+},
+"performance-data": {
+"id": "performance-data", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"container-historical-performance-type-g": {
+"id": "container-historical-performance-type-g", 
+"is-read-only": false, 
+"description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."]
+},
+"gbic": {
+"id": "gbic", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"soldered-connector": {
+"id": "soldered-connector", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"sfp-sfp-plus-sfp28": {
+"id": "sfp-sfp-plus-sfp28", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"xbi-300-pin": {
+"id": "xbi-300-pin", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"xenpak": {
+"id": "xenpak", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"xfp": {
+"id": "xfp", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"xfp-e": {
+"id": "xfp-e", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"xpak": {
+"id": "xpak", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"x2": {
+"id": "x2", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"dwdm-sfp-sfp-plus": {
+"id": "dwdm-sfp-sfp-plus", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"qsfp": {
+"id": "qsfp", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"qsfp-plus": {
+"id": "qsfp-plus", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"cxp": {
+"id": "cxp", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"shielded-mini-multilane-hd-4-x": {
+"id": "shielded-mini-multilane-hd-4-x", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"shielded-mini-multilane-hd-8-x": {
+"id": "shielded-mini-multilane-hd-8-x", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"qsfp28": {
+"id": "qsfp28", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"cxp2": {
+"id": "cxp2", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"cdfp-style1-style2": {
+"id": "cdfp-style1-style2", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"shielded-mini-multilane-hd-4-x-fan-out": {
+"id": "shielded-mini-multilane-hd-4-x-fan-out", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"shielded-mini-multilane-hd-8-x-fan-out": {
+"id": "shielded-mini-multilane-hd-8-x-fan-out", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"cdfp-style3": {
+"id": "cdfp-style3", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"qsfp-micro": {
+"id": "qsfp-micro", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"qsfp-dd": {
+"id": "qsfp-dd", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"qsfp-plus-rate-select-v1": {
+"id": "qsfp-plus-rate-select-v1", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"qsfp-plus-rate-select-v2": {
+"id": "qsfp-plus-rate-select-v2", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"not-yet-defined": {
+"id": "not-yet-defined", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mii-kind-type": {
+"id": "mii-kind-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"sc": {
+"id": "sc", 
+"is-read-only": false, 
+"description": ["Subscriber Connector"]
+},
+"fibre-channel-style-1": {
+"id": "fibre-channel-style-1", 
+"is-read-only": false, 
+"description": ["Copper connector"]
+},
+"fibre-channel-style-2": {
+"id": "fibre-channel-style-2", 
+"is-read-only": false, 
+"description": ["Copper connector"]
+},
+"bnc-tnc": {
+"id": "bnc-tnc", 
+"is-read-only": false, 
+"description": ["Bayonet/Threaded Neill-Concelman"]
+},
+"fc": {
+"id": "fc", 
+"is-read-only": false, 
+"description": ["Fibre Channel coax headers"]
+},
+"fiber-jack": {
+"id": "fiber-jack", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"lc": {
+"id": "lc", 
+"is-read-only": false, 
+"description": ["Lucent Connector"]
+},
+"mt-rj": {
+"id": "mt-rj", 
+"is-read-only": false, 
+"description": ["Mechanical Transfer - Registered Jack"]
+},
+"mu": {
+"id": "mu", 
+"is-read-only": false, 
+"description": ["Multiple Optical"]
+},
+"sg": {
+"id": "sg", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"optical-pigtail": {
+"id": "optical-pigtail", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mpo1-x12": {
+"id": "mpo1-x12", 
+"is-read-only": false, 
+"description": ["Multifiber Parallel Optic"]
+},
+"mpo2-x16": {
+"id": "mpo2-x16", 
+"is-read-only": false, 
+"description": ["Multifiber Parallel Optic"]
+},
+"hssdc-ii": {
+"id": "hssdc-ii", 
+"is-read-only": false, 
+"description": ["High Speed Serial Data Connector"]
+},
+"copper-pigtail": {
+"id": "copper-pigtail", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"rj45": {
+"id": "rj45", 
+"is-read-only": false, 
+"description": ["8P8C, according to Clause 3 and Figures 1 through 5 of IEC 60603-7"]
+},
+"no-seperable-connector": {
+"id": "no-seperable-connector", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mxc2-x16": {
+"id": "mxc2-x16", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"st": {
+"id": "st", 
+"is-read-only": false, 
+"description": ["according to IEC 60874-10:1992, also often called BFOC/2.5"]
+},
+"not-yet-defined": {
+"id": "not-yet-defined", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mdi-kind-type": {
+"id": "mdi-kind-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tp-cat3": {
+"id": "tp-cat3", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tp-cat5": {
+"id": "tp-cat5", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tp-cat6": {
+"id": "tp-cat6", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tp-cat8": {
+"id": "tp-cat8", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"single-mode": {
+"id": "single-mode", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"multi-mode": {
+"id": "multi-mode", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"not-yet-defined": {
+"id": "not-yet-defined", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"medium-kind-type": {
+"id": "medium-kind-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"10-base5": {
+"id": "10-base5", 
+"is-read-only": false, 
+"description": ["Thick coax Medium Attachment Unit (MAU) as specified in 802.3 Clause 8"]
+},
+"foirl": {
+"id": "foirl", 
+"is-read-only": false, 
+"description": ["FOIRL Medium Attachment Unit (MAU) as specified in 802.3 Clause 9.9"]
+},
+"10-base2": {
+"id": "10-base2", 
+"is-read-only": false, 
+"description": ["Thin coax Medium Attachment Unit (MAU) as specified in 802.3 Clause 10"]
+},
+"10-broad36": {
+"id": "10-broad36", 
+"is-read-only": false, 
+"description": ["Broadband DTE Medium Attachment Unit (MAU) as specified in 802.3 Clause 11"]
+},
+"10-base-t": {
+"id": "10-base-t", 
+"is-read-only": false, 
+"description": ["Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14. Only to be applied when duplex mode unknown"]
+},
+"10-base-thd": {
+"id": "10-base-thd", 
+"is-read-only": false, 
+"description": ["Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14 in half duplex mode"]
+},
+"10-base-tfd": {
+"id": "10-base-tfd", 
+"is-read-only": false, 
+"description": ["Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14 in full duplex mode"]
+},
+"10-base-fp": {
+"id": "10-base-fp", 
+"is-read-only": false, 
+"description": ["Passive fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 16"]
+},
+"10-base-fb": {
+"id": "10-base-fb", 
+"is-read-only": false, 
+"description": ["Synchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 17"]
+},
+"10-base-fl": {
+"id": "10-base-fl", 
+"is-read-only": false, 
+"description": ["Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18. Only to be applied when duplex mode unknown"]
+},
+"10-base-flhd": {
+"id": "10-base-flhd", 
+"is-read-only": false, 
+"description": ["Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18 in half duplex mode"]
+},
+"10-base-flfd": {
+"id": "10-base-flfd", 
+"is-read-only": false, 
+"description": ["Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18 in full duplex mode"]
+},
+"100-base-t4": {
+"id": "100-base-t4", 
+"is-read-only": false, 
+"description": ["Four-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 23"]
+},
+"100-base-tx": {
+"id": "100-base-tx", 
+"is-read-only": false, 
+"description": ["Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25. Only to be applied when duplex mode unknown"]
+},
+"100-base-txhd": {
+"id": "100-base-txhd", 
+"is-read-only": false, 
+"description": ["Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25 in half duplex mode"]
+},
+"100-base-txfd": {
+"id": "100-base-txfd", 
+"is-read-only": false, 
+"description": ["Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25 in full duplex mode"]
+},
+"100-base-bx10-d": {
+"id": "100-base-bx10-d", 
+"is-read-only": false, 
+"description": ["One single-mode fiber Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 58"]
+},
+"100-base-bx10-u": {
+"id": "100-base-bx10-u", 
+"is-read-only": false, 
+"description": ["One single-mode fiber Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 58"]
+},
+"100-base-fx": {
+"id": "100-base-fx", 
+"is-read-only": false, 
+"description": ["X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26. Only to be applied when duplex mode unknown"]
+},
+"100-base-fxhd": {
+"id": "100-base-fxhd", 
+"is-read-only": false, 
+"description": ["X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26 in half duplex mode"]
+},
+"100-base-fxfd": {
+"id": "100-base-fxfd", 
+"is-read-only": false, 
+"description": ["X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26 in full duplex mode"]
+},
+"100-base-lx10": {
+"id": "100-base-lx10", 
+"is-read-only": false, 
+"description": ["Two fiber Physical layer entity (PHY) as specified in 802.3 Clause 58"]
+},
+"100-base-t2": {
+"id": "100-base-t2", 
+"is-read-only": false, 
+"description": ["Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32. Only to be applied when duplex mode unknown"]
+},
+"100-base-t2-hd": {
+"id": "100-base-t2-hd", 
+"is-read-only": false, 
+"description": ["Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32 in half duplex mode"]
+},
+"100-base-t2-fd": {
+"id": "100-base-t2-fd", 
+"is-read-only": false, 
+"description": ["Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32 in full duplex mode"]
+},
+"1000-base-x": {
+"id": "1000-base-x", 
+"is-read-only": false, 
+"description": ["X as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD and duplex mode unknown"]
+},
+"1000-base-bx10-d": {
+"id": "1000-base-bx10-d", 
+"is-read-only": false, 
+"description": ["One single-mode fiber Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 59"]
+},
+"1000-base-bx10-u": {
+"id": "1000-base-bx10-u", 
+"is-read-only": false, 
+"description": ["One single-mode fiber Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 59"]
+},
+"1000-base-xhd": {
+"id": "1000-base-xhd", 
+"is-read-only": false, 
+"description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD) in half duplex mode. Not to be configured and only to be returned when underlying PMD unknown"]
+},
+"1000-base-xfd": {
+"id": "1000-base-xfd", 
+"is-read-only": false, 
+"description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD) in full duplex mode. Not to be configured and only to be returned when underlying PMD unknown"]
+},
+"1000-base-lx": {
+"id": "1000-base-lx", 
+"is-read-only": false, 
+"description": ["X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38. Only to be applied when duplex mode unknown"]
+},
+"1000-base-lxhd": {
+"id": "1000-base-lxhd", 
+"is-read-only": false, 
+"description": ["X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in half duplex mode"]
+},
+"1000-base-lxfd": {
+"id": "1000-base-lxfd", 
+"is-read-only": false, 
+"description": ["X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in full duplex mode"]
+},
+"1000-base-lx10": {
+"id": "1000-base-lx10", 
+"is-read-only": false, 
+"description": ["Two fiber 10km Physical layer entity (PHY) as specified in 802.3 Clause 59"]
+},
+"1000-base-sx": {
+"id": "1000-base-sx", 
+"is-read-only": false, 
+"description": ["X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38. Only to be applied when duplex mode unknown"]
+},
+"1000-base-sxhd": {
+"id": "1000-base-sxhd", 
+"is-read-only": false, 
+"description": ["X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in half duplex mode"]
+},
+"1000-base-sxfd": {
+"id": "1000-base-sxfd", 
+"is-read-only": false, 
+"description": ["X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in full duplex mode"]
+},
+"1000-base-cx": {
+"id": "1000-base-cx", 
+"is-read-only": false, 
+"description": ["X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39. Only to be applied when duplex mode unknown"]
+},
+"1000-base-cxhd": {
+"id": "1000-base-cxhd", 
+"is-read-only": false, 
+"description": ["X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39 in half duplex mode"]
+},
+"1000-base-cxfd": {
+"id": "1000-base-cxfd", 
+"is-read-only": false, 
+"description": ["X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39 in full duplex mode"]
+},
+"1000-base-kx": {
+"id": "1000-base-kx", 
+"is-read-only": false, 
+"description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 70"]
+},
+"1000-base-t": {
+"id": "1000-base-t", 
+"is-read-only": false, 
+"description": ["Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40. Only to be applied when duplex mode unknown"]
+},
+"1000-base-thd": {
+"id": "1000-base-thd", 
+"is-read-only": false, 
+"description": ["Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40 in half duplex mode"]
+},
+"1000-base-tfd": {
+"id": "1000-base-tfd", 
+"is-read-only": false, 
+"description": ["Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40 in full duplex mode"]
+},
+"10-gbase-x": {
+"id": "10-gbase-x", 
+"is-read-only": false, 
+"description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 48 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown"]
+},
+"10-gbase-lx4": {
+"id": "10-gbase-lx4", 
+"is-read-only": false, 
+"description": ["X fiber over 4 lane 1310nm optics as specified in 802.3 Clause 53"]
+},
+"10-gbase-cx4": {
+"id": "10-gbase-cx4", 
+"is-read-only": false, 
+"description": ["X copper over 8 pair 100-Ohm balanced cable as specified in 802.3 Clause 54"]
+},
+"10-gbase-kx4": {
+"id": "10-gbase-kx4", 
+"is-read-only": false, 
+"description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 71"]
+},
+"10-gbase-r": {
+"id": "10-gbase-r", 
+"is-read-only": false, 
+"description": ["R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 49 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown"]
+},
+"10-gbase-er": {
+"id": "10-gbase-er", 
+"is-read-only": false, 
+"description": ["R fiber over 1550nm optics as specified in 802.3 Clause 52"]
+},
+"10-gbase-lr": {
+"id": "10-gbase-lr", 
+"is-read-only": false, 
+"description": ["R fiber over 1310nm optics as specified in 802.3 Clause 52"]
+},
+"10-gbase-sr": {
+"id": "10-gbase-sr", 
+"is-read-only": false, 
+"description": ["R fiber over 850nm optics as specified in 802.3 Clause 52"]
+},
+"10-gbase-lrm": {
+"id": "10-gbase-lrm", 
+"is-read-only": false, 
+"description": ["R fiber over 1310 nm optics as specified in 802.3 Clause 68"]
+},
+"10-gbase-kr": {
+"id": "10-gbase-kr", 
+"is-read-only": false, 
+"description": ["R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 72"]
+},
+"10-gbase-t": {
+"id": "10-gbase-t", 
+"is-read-only": false, 
+"description": ["Four-pair twisted-pair balanced copper cabling Physical layer entity (PHY) as specified in 802.3 Clause 55"]
+},
+"10-gbase-pr-d1": {
+"id": "10-gbase-pr-d1", 
+"is-read-only": false, 
+"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75"]
+},
+"10-gbase-pr-d2": {
+"id": "10-gbase-pr-d2", 
+"is-read-only": false, 
+"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75"]
+},
+"10-gbase-pr-d3": {
+"id": "10-gbase-pr-d3", 
+"is-read-only": false, 
+"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75"]
+},
+"10-gbase-pr-d4": {
+"id": "10-gbase-pr-d4", 
+"is-read-only": false, 
+"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75"]
+},
+"10-gbase-pr-u1": {
+"id": "10-gbase-pr-u1", 
+"is-read-only": false, 
+"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75"]
+},
+"10-gbase-pr-u2": {
+"id": "10-gbase-pr-u2", 
+"is-read-only": false, 
+"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75"]
+},
+"10-gbase-pr-u3": {
+"id": "10-gbase-pr-u3", 
+"is-read-only": false, 
+"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75"]
+},
+"10-gbase-pr-u4": {
+"id": "10-gbase-pr-u4", 
+"is-read-only": false, 
+"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75"]
+},
+"40-gbase-r": {
+"id": "40-gbase-r", 
+"is-read-only": false, 
+"description": ["Multi-lane PCS as specified in 802.3 Clause 82 over undefined Physical Medium Attachment (PMA) and Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown"]
+},
+"40-gbase-kr4": {
+"id": "40-gbase-kr4", 
+"is-read-only": false, 
+"description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 84"]
+},
+"40-gbase-cr4": {
+"id": "40-gbase-cr4", 
+"is-read-only": false, 
+"description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 85"]
+},
+"40-gbase-sr4": {
+"id": "40-gbase-sr4", 
+"is-read-only": false, 
+"description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 86"]
+},
+"4-x10-gbase-sr": {
+"id": "4-x10-gbase-sr", 
+"is-read-only": false, 
+"description": ["4 times 10GBASE-S compatible to 802.3 Clause 52 over 4 lane multimode fiber"]
+},
+"40-gbase-lr4": {
+"id": "40-gbase-lr4", 
+"is-read-only": false, 
+"description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with long reach, as specified in 802.3 Clause 87"]
+},
+"40-gbase-er4": {
+"id": "40-gbase-er4", 
+"is-read-only": false, 
+"description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with extended reach, as specified in 802.3 Clause 87"]
+},
+"40-gbase-fr": {
+"id": "40-gbase-fr", 
+"is-read-only": false, 
+"description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over single mode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 89"]
+},
+"100-gbase-r": {
+"id": "100-gbase-r", 
+"is-read-only": false, 
+"description": ["Multi-lane PCS as specified in 802.3 Clause 82 over undefined 100GBASE-R or 100GBASE-P Physical Medium Attachment (PMA) and Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown"]
+},
+"100-gbase-cr4": {
+"id": "100-gbase-cr4", 
+"is-read-only": false, 
+"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 92"]
+},
+"100-gbase-kr4": {
+"id": "100-gbase-kr4", 
+"is-read-only": false, 
+"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 93"]
+},
+"100-gbase-kp4": {
+"id": "100-gbase-kp4", 
+"is-read-only": false, 
+"description": ["100GBASE-P Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 94"]
+},
+"100-gbase-cr10": {
+"id": "100-gbase-cr10", 
+"is-read-only": false, 
+"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 10 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 85"]
+},
+"100-gbase-sr4": {
+"id": "100-gbase-sr4", 
+"is-read-only": false, 
+"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 95"]
+},
+"100-gbase-sr10": {
+"id": "100-gbase-sr10", 
+"is-read-only": false, 
+"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 10 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 86"]
+},
+"2-x40-gbase-sr": {
+"id": "2-x40-gbase-sr", 
+"is-read-only": false, 
+"description": ["2 times 40GBASE-S compatible to 802.3 Clause 86 over 10 lane multimode fiber"]
+},
+"10-x10-gbase-sr": {
+"id": "10-x10-gbase-sr", 
+"is-read-only": false, 
+"description": ["10 times 10GBASE-S compatible to 802.3 Clause 52 over 10 lane multimode fiber"]
+},
+"12-x10-gbase-sr": {
+"id": "12-x10-gbase-sr", 
+"is-read-only": false, 
+"description": ["12 times 10GBASE-S compatible to 802.3 Clause 52 over 12 lane multimode fiber"]
+},
+"100-gbase-lr4": {
+"id": "100-gbase-lr4", 
+"is-read-only": false, 
+"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with long reach, as specified in 802.3 Clause 88"]
+},
+"100-gbase-er4": {
+"id": "100-gbase-er4", 
+"is-read-only": false, 
+"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with extended reach, as specified in 802.3 Clause 88"]
+},
+"not-yet-defined": {
+"id": "not-yet-defined", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pmd-name-type": {
+"id": "pmd-name-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"signal-ordering-kind-name": {
+"id": "signal-ordering-kind-name", 
+"is-read-only": false, 
+"description": ["To be filled according to TR-541. Must be unique for referencing during configuration of the interface."]
+},
+"signal-list": {
+"id": "signal-list", 
+"is-read-only": false, 
+"description": ["Desciption of the signals on the Media Dependent Interface (MDI), might be e.g. 'TX+' in case of e.g. 10BASE-T, might be e.g. '1,295.56 nm' in case of e.g. 100GBASE-LR4"]
+},
+"signal-ordering-type-g": {
+"id": "signal-ordering-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mau-id": {
+"id": "mau-id", 
+"is-read-only": false, 
+"description": ["802.3 according to 30.5.1.1.1 aMAUID Unique identifier of the Medium Attachment Unit (MAU) instance within the data about the device"]
+},
+"mii-kind": {
+"id": "mii-kind", 
+"is-read-only": false, 
+"description": ["SFF8472_SFF8636 Kind of Medium Independent Interface (MII) provided by this Medium Attachment Unit (MAU) (e.g. SFP, moldered port)"]
+},
+"mdi-kind": {
+"id": "mdi-kind", 
+"is-read-only": false, 
+"description": ["Kind of Medium Dependent Interface (MDI) provided by this Medium Attachment Unit (MAU)"]
+},
+"required-medium-kind": {
+"id": "required-medium-kind", 
+"is-read-only": false, 
+"description": ["Kind of medium required for operating this Medium Attachment Unit (MAU), more like an information field"]
+},
+"wavelength-min": {
+"id": "wavelength-min", 
+"is-read-only": false, 
+"description": ["SFF-8690 Minimum laser wavelength in pico meter, -1 = not applicable, 0 = not known, wavelengthMax = wavelength cannot be configured; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5"]
+},
+"wavelength-max": {
+"id": "wavelength-max", 
+"is-read-only": false, 
+"description": ["Maximum laser wavelength in pico meter, -1 = not applicable, 0 = not known, wavelengthMin = wavelength cannot be configured; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5 SFF-8690"]
+},
+"wavelength-grid-min": {
+"id": "wavelength-grid-min", 
+"is-read-only": false, 
+"description": ["Minimum grid spacing supported by the transceiver, -1 = not applicable, 0 = not known SFF-8690"]
+},
+"link-length-max": {
+"id": "link-length-max", 
+"is-read-only": false, 
+"description": ["Indicates the maximum link length that is supported by the transceiver on the medium, which is specified in the standard referenced in TypeDefinitions::phyType::phyKind."]
+},
+"vendor-name": {
+"id": "vendor-name", 
+"is-read-only": false, 
+"description": ["Name of the vendor of the transceiver Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::ManufacturerProperties::manufacturerName"]
+},
+"vendor-oui": {
+"id": "vendor-oui", 
+"is-read-only": false, 
+"description": ["Describes the IEEE Company identifier of the vendor of the transceiver (1st part of 802.3 ResourceTypeID) 802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::ManufacturerProperties::manufacturerIdentifier"]
+},
+"part-number": {
+"id": "part-number", 
+"is-read-only": false, 
+"description": ["802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier as six bit model number Uniquely identifies the transceiver in the vendor's product lists Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentType::partTypeIdentifier"]
+},
+"revision-number": {
+"id": "revision-number", 
+"is-read-only": false, 
+"description": ["Identifies the revision number of the transceiver (3rd part of 802.3 ResourceTypeID) 802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier as four-bit revision number Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentType::version"]
+},
+"serial-number": {
+"id": "serial-number", 
+"is-read-only": false, 
+"description": ["Vendor's serial number for the transceiver. 0 = not applicable Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentInstance::serialNumber"]
+},
+"date-code": {
+"id": "date-code", 
+"is-read-only": false, 
+"description": ["Vendor's date code for the transceiver Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentInstance::manufactureDate"]
+},
+"pmd-list": {
+"id": "pmd-list", 
+"is-read-only": false, 
+"description": ["List of Physical Medium Dependent (PMD) that can be operated *** In case ordering of the signals depends on the PMD, pmdList has to be put into the datatype for the signal ordering ***"]
+},
+"signal-ordering-list": {
+"id": "signal-ordering-list", 
+"is-read-only": false, 
+"description": ["Describes the different (e.g. MDI, MDI-X) ways of ordering the signals on the physical medium"]
+},
+"auto-signal-ordering-is-avail": {
+"id": "auto-signal-ordering-is-avail", 
+"is-read-only": false, 
+"description": ["1 = there is a mechanism for automatically crossing over tx and rx implemented"]
+},
+"short-reach-mode-is-avail": {
+"id": "short-reach-mode-is-avail", 
+"is-read-only": false, 
+"description": ["1 = Indicates that Short Reach Mode for 10GBASE-T according to 802.3 45.2.1.64 is available"]
+},
+"eee-is-avail": {
+"id": "eee-is-avail", 
+"is-read-only": false, 
+"description": ["1 = Indicates that Energy-Efficient Ethernet (EEE) is available at the device."]
+},
+"unidirectional-operation-is-avail": {
+"id": "unidirectional-operation-is-avail", 
+"is-read-only": false, 
+"description": ["1 = Medium Attachment Unit (MAU) able to transmit from Media Independent Interface (MII) regardless of whether the MAU has determined that a valid link has been established, 0 = MAU able to transmit from MII only when the MAU has determined that a valid link has been established 802.3"]
+},
+"supported-alarms": {
+"id": "supported-alarms", 
+"is-read-only": false, 
+"description": ["MW IM Available alarms to be listed. Mandatory:'txFault', 'rxLos', 'tempHigh', 'tempLow', 'rxLevelHigh', 'rxLevelLow'. Optional:'vccHigh', 'vccLow', 'txBiasHigh', 'txBiasLow', 'txPowerHigh', 'txPowerLow', 'laserTempHigh', 'laserTempLow', 'tecCurrentHigh', 'tecCurrentLow'. Further alarms might be added by the device. Names are to be separated by commas."]
+},
+"mau-type-g": {
+"id": "mau-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"problem-kind-name": {
+"id": "problem-kind-name", 
+"is-read-only": false, 
+"description": ["Name of the alarm according to WireInterface::WireInterfaceCapability::supportedAlarms"]
+},
+"problem-kind-severity": {
+"id": "problem-kind-severity", 
+"is-read-only": false, 
+"description": ["Severity of this type of alarm."]
+},
+"wire-interface-problem-severity-type-g": {
+"id": "wire-interface-problem-severity-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"problem-name": {
+"id": "problem-name", 
+"is-read-only": false, 
+"description": ["Name of the alarm according to WireInterface::WireInterfaceCapability::supportedAlarms"]
+},
+"wire-interface-current-problem-type-g": {
+"id": "wire-interface-current-problem-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"es": {
+"id": "es", 
+"is-read-only": false, 
+"description": ["802.3 30.8.1.1.13 aLineESs Number of errored seconds"]
+},
+"ses": {
+"id": "ses", 
+"is-read-only": false, 
+"description": ["802.3 30.8.1.1.12 aLineSESs Number of severely errored seconds"]
+},
+"symbol-error-during-carrier": {
+"id": "symbol-error-during-carrier", 
+"is-read-only": false, 
+"description": ["802.3 according to 30.3.2.1.5 aSymbolErrorDuringCarrier Number of times when valid carrier was present and an invalid data symbol occured."]
+},
+"low-power-idle-transmitter-ms": {
+"id": "low-power-idle-transmitter-ms", 
+"is-read-only": false, 
+"description": ["802.3 similar to 30.3.2.1.8 aTransmitLPIMicroseconds Number of milliseconds (original counter expresses microseconds), during which the transmitter was in power save mode"]
+},
+"low-power-idle-receiver-ms": {
+"id": "low-power-idle-receiver-ms", 
+"is-read-only": false, 
+"description": ["802.3 similar to 30.3.2.1.9 aReceiveLPIMicroseconds Number of milliseconds (original counter expresses microseconds), during which the receiver was in power save mode"]
+},
+"wire-interface-performance-type-g": {
+"id": "wire-interface-performance-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"performance-data": {
+"id": "performance-data", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"wire-interface-current-performance-type-g": {
+"id": "wire-interface-current-performance-type-g", 
+"is-read-only": false, 
+"description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."]
+},
+"performance-data": {
+"id": "performance-data", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"wire-interface-historical-performance-type-g": {
+"id": "wire-interface-historical-performance-type-g", 
+"is-read-only": false, 
+"description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."]
+},
+"layer-protocol": {
+"id": "layer-protocol", 
+"is-read-only": false, 
+"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"]
+},
+"air-interface-capability": {
+"id": "air-interface-capability", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"air-interface-configuration": {
+"id": "air-interface-configuration", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"air-interface-status": {
+"id": "air-interface-status", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"air-interface-current-problems": {
+"id": "air-interface-current-problems", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"air-interface-current-performance": {
+"id": "air-interface-current-performance", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"air-interface-historical-performances": {
+"id": "air-interface-historical-performances", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mw-air-interface-pac": {
+"id": "mw-air-interface-pac", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"type-of-equipment": {
+"id": "type-of-equipment", 
+"is-read-only": false, 
+"description": ["This parameter indicates the equipment type. Instead of uploading the complete set of capabilities, capabilities of the same equipment type could be reused. Should be unique for a combination of modem, radio and their respective firmware."]
+},
+"tx-frequency-min": {
+"id": "tx-frequency-min", 
+"is-read-only": false, 
+"description": ["Value of the minimum transmit frequency tunable at the air interface."]
+},
+"tx-frequency-max": {
+"id": "tx-frequency-max", 
+"is-read-only": false, 
+"description": ["Value of the maximum transmit frequency tunable at the air interface."]
+},
+"rx-frequency-min": {
+"id": "rx-frequency-min", 
+"is-read-only": false, 
+"description": ["Value of the minimum receive frequency tunable at the air interface."]
+},
+"rx-frequency-max": {
+"id": "rx-frequency-max", 
+"is-read-only": false, 
+"description": ["Value of the maximum receive frequency tunable at the air interface."]
+},
+"adaptive-modulation-is-avail": {
+"id": "adaptive-modulation-is-avail", 
+"is-read-only": false, 
+"description": ["In case the device is capable of adaptive modulation, this field shall contain a 'true'."]
+},
+"mimo-is-avail": {
+"id": "mimo-is-avail", 
+"is-read-only": false, 
+"description": ["In case the device is capable of MIMO, this field shall contain a 'true'."]
+},
+"mimo-channels": {
+"id": "mimo-channels", 
+"is-read-only": false, 
+"description": ["Maximum number (n) of spatial multiplexing streams that can be conveyed by an n x n MIMO configuration."]
+},
+"alic-is-avail": {
+"id": "alic-is-avail", 
+"is-read-only": false, 
+"description": ["In case the microwave radio is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), this field shall contain a 'true'."]
+},
+"atpc-is-avail": {
+"id": "atpc-is-avail", 
+"is-read-only": false, 
+"description": ["In case the microwave radio is capable of ATPC, this field shall contain a 'true'."]
+},
+"atpc-range": {
+"id": "atpc-range", 
+"is-read-only": false, 
+"description": ["Extent of the ATPC range. This value represents a device specific maximum value. The actual range of the ATPC at a specific link might be limited by the difference between configured transmit power (AirInterface::AirInterfaceConfiguration::txPower) and minimum transmit power of the device (TypeDefinitions::TransmissionModeType::txPowerMin)."]
+},
+"encryption-is-avail": {
+"id": "encryption-is-avail", 
+"is-read-only": false, 
+"description": ["Shall be marked 'true', if payload encryption is available."]
+},
+"supported-loop-back-kind-list": {
+"id": "supported-loop-back-kind-list", 
+"is-read-only": false, 
+"description": ["List of supported kinds of looping back of header information to the remote site."]
+},
+"maintenance-timer-range": {
+"id": "maintenance-timer-range", 
+"is-read-only": false, 
+"description": ["Available time periods for maintenance configurations (e.g. the loop back of microwave header information) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360')."]
+},
+"supported-alarm-list": {
+"id": "supported-alarm-list", 
+"is-read-only": false, 
+"description": ["Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','signalIDMismatching','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the vendor."]
+},
+"supported-alarms": {
+"id": "supported-alarms", 
+"is-read-only": false, 
+"description": ["Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the device. Names are to be separated by commas."]
+},
+"supported-channel-plan-list": {
+"id": "supported-channel-plan-list", 
+"is-read-only": false, 
+"description": ["List of channel spacing that are supported by the device."]
+},
+"air-interface-capability-g": {
+"id": "air-interface-capability-g", 
+"is-read-only": false, 
+"description": ["Describes the 'analog' capabilities of modem and transmitter of the microwave device. Value ranges of attributes are not independently (e.g. min. and max. transmit power depends on modulation). Legal combinations of values are expressed in transmissionModeTypes."]
+},
+"air-interface-name": {
+"id": "air-interface-name", 
+"is-read-only": false, 
+"description": ["Operator specific microwave link ID (often used for coding area, type of element and sequential number)."]
+},
+"remote-air-interface-name": {
+"id": "remote-air-interface-name", 
+"is-read-only": false, 
+"description": ["Name of the air interface, which belongs to the same link, at the remote site."]
+},
+"expected-signal-id": {
+"id": "expected-signal-id", 
+"is-read-only": false, 
+"description": ["If set on '0', the receiver ignores the signal ID of the received signal. If set on any other value, the receiver exclusively synchronizes on signals with the same signal ID."]
+},
+"transmitted-signal-id": {
+"id": "transmitted-signal-id", 
+"is-read-only": false, 
+"description": ["Transmitted radio signal ID for synchronizing the receiver."]
+},
+"radio-signal-id": {
+"id": "radio-signal-id", 
+"is-read-only": false, 
+"description": ["The radioSignalId is transmitted on the air interface so the remote site of the link synchronizes on the correct transmitter. The local radio MUST NOT synchronize on a radio signal with a different radioSignalId. The link ID is neither an ID necessary to span the model nor an ID referencing external data. It is just some sort of name of the link transmitted so the correct remote site can be identified in an interference situation. The value zero might be used to make the microwave to disable the link ID check."]
+},
+"tx-frequency": {
+"id": "tx-frequency", 
+"is-read-only": false, 
+"description": ["Center frequency of the transmit channel. The values to be configured have to exactly match the values listed in the international agreement referenced in channelPlanID. In case of automated selection of the transmit frequency this field shall describe the lowest center frequency selectable."]
+},
+"rx-frequency": {
+"id": "rx-frequency", 
+"is-read-only": false, 
+"description": ["Center frequency of the receive channel."]
+},
+"transmission-mode-min": {
+"id": "transmission-mode-min", 
+"is-read-only": false, 
+"description": ["Minimum transmission mode to be configured (in case adaptive modulation is not used, this value represents also the fixed transmission mode)."]
+},
+"transmission-mode-max": {
+"id": "transmission-mode-max", 
+"is-read-only": false, 
+"description": ["Maximum transmission mode to be configured."]
+},
+"tx-channel-bandwidth": {
+"id": "tx-channel-bandwidth", 
+"is-read-only": false, 
+"description": ["Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"]
+},
+"rx-channel-bandwidth": {
+"id": "rx-channel-bandwidth", 
+"is-read-only": false, 
+"description": ["Bandwidth of the receive channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"]
+},
+"polarization": {
+"id": "polarization", 
+"is-read-only": false, 
+"description": ["Allows documenting the polarization of the air interface."]
+},
+"power-is-on": {
+"id": "power-is-on", 
+"is-read-only": false, 
+"description": ["Power ON. Activation of the entire radio in a split mount configuration shall be expressed as a 'true'."]
+},
+"transmitter-is-on": {
+"id": "transmitter-is-on", 
+"is-read-only": false, 
+"description": ["Activation of the transmitter inside the radio shall be expressed as a 'true'."]
+},
+"receiver-is-on": {
+"id": "receiver-is-on", 
+"is-read-only": false, 
+"description": ["Maintenance Feature. Activation of the receiver inside the radio shall be expressed as a 'true'. Attribute shall also be used for RX main and RX diversity squelches in case of diversity configurations."]
+},
+"tx-power": {
+"id": "tx-power", 
+"is-read-only": false, 
+"description": ["Transmit power to be configured on the microwave link. Signed Byte is required. The actually operated transmit power might be lower depending on adaptive modulation and ATPC."]
+},
+"adaptive-modulation-is-on": {
+"id": "adaptive-modulation-is-on", 
+"is-read-only": false, 
+"description": ["Adaptive Modulation. Activation of adaptive modulation shall be expressed as a 'true'."]
+},
+"modulation-min": {
+"id": "modulation-min", 
+"is-read-only": false, 
+"description": ["Minimum modulation to be configured (in case adaptive modulation is not used, this value represents also the fixed modulation). The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."]
+},
+"modulation-max": {
+"id": "modulation-max", 
+"is-read-only": false, 
+"description": ["Maximum modulation to be configured. The value of this field is only relevant, if Adaptive Modulation has been activated. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."]
+},
+"xpic-is-on": {
+"id": "xpic-is-on", 
+"is-read-only": false, 
+"description": ["Activation of Cross Polarization Interference Cancelation shall be expressed as a 'true'. In case XPIC is not available for the current combination of channel bandwidth and modulation or the hardware in general, this parameter shall always be set to 'false'."]
+},
+"mimo-is-on": {
+"id": "mimo-is-on", 
+"is-read-only": false, 
+"description": ["Activation of Multiple Input Multiple Output (MIMO) shall be expressed as a 'true'."]
+},
+"alic-is-on": {
+"id": "alic-is-on", 
+"is-read-only": false, 
+"description": ["Activation of Adjacent Link Interference Cancelation (ALIC) shall be expressed as a 'true'."]
+},
+"atpc-is-on": {
+"id": "atpc-is-on", 
+"is-read-only": false, 
+"description": ["ATPC. Activation of Automated Transmit Power Control shall be expressed as a 'true'."]
+},
+"atpc-thresh-upper": {
+"id": "atpc-thresh-upper", 
+"is-read-only": false, 
+"description": ["If the receive level is higher than the upper threshold value, the transmitter is notified to decrease transmit power."]
+},
+"atpc-thresh-lower": {
+"id": "atpc-thresh-lower", 
+"is-read-only": false, 
+"description": ["If the receive level is lower than the lower threshold value, the transmitter is notified to increase transmit power."]
+},
+"atpc-tx-power-min": {
+"id": "atpc-tx-power-min", 
+"is-read-only": false, 
+"description": ["Transmit power, which is not to be undercut, while operating ATPC."]
+},
+"auto-freq-select-is-on": {
+"id": "auto-freq-select-is-on", 
+"is-read-only": false, 
+"description": ["Activation of automatically selecting the transmit frequency in unlicensed bands shall be expressed as a 'true'."]
+},
+"auto-freq-select-range": {
+"id": "auto-freq-select-range", 
+"is-read-only": false, 
+"description": ["Number of transmit channels (starting at the center frequency defined in txFrequency and with channel bandwidth according to txChannelBandwidth) that define the range within the transmit frequency can automatically been chosen."]
+},
+"modulation-is-on": {
+"id": "modulation-is-on", 
+"is-read-only": false, 
+"description": ["Maintenance Feature. De-activation of the modulation of the carrier signal for fault management shall be expressed as a 'false'."]
+},
+"encryption-is-on": {
+"id": "encryption-is-on", 
+"is-read-only": false, 
+"description": ["Activates encryption of the payload."]
+},
+"cryptographic-key": {
+"id": "cryptographic-key", 
+"is-read-only": false, 
+"description": ["Key for transforming plaintext into ciphertext data."]
+},
+"performance-monitoring-collection-is-on": {
+"id": "performance-monitoring-collection-is-on", 
+"is-read-only": false, 
+"description": ["Enables measurement, collection, storage and access to performance data."]
+},
+"threshold-cross-alarm-list": {
+"id": "threshold-cross-alarm-list", 
+"is-read-only": false, 
+"description": ["List of threshold cross alarms to be configured."]
+},
+"loop-back-kind-on": {
+"id": "loop-back-kind-on", 
+"is-read-only": false, 
+"description": ["Maintenance Feature. The currently configured type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site."]
+},
+"maintenance-timer": {
+"id": "maintenance-timer", 
+"is-read-only": false, 
+"description": ["Time of existence of any maintenance configuration (e.g. the loop back of microwave header information). Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange."]
+},
+"problem-kind-severity-list": {
+"id": "problem-kind-severity-list", 
+"is-read-only": false, 
+"description": ["Severity of the problem to be configured."]
+},
+"air-interface-configuration-g": {
+"id": "air-interface-configuration-g", 
+"is-read-only": false, 
+"description": ["Configuration of the radio link."]
+},
+"tx-frequency-cur": {
+"id": "tx-frequency-cur", 
+"is-read-only": false, 
+"description": ["Center frequency of the currently operated transmit channel."]
+},
+"rx-frequency-cur": {
+"id": "rx-frequency-cur", 
+"is-read-only": false, 
+"description": ["Center frequency of the currently operated receive channel."]
+},
+"tx-level-cur": {
+"id": "tx-level-cur", 
+"is-read-only": false, 
+"description": ["Current transmit level."]
+},
+"rx-level-cur": {
+"id": "rx-level-cur", 
+"is-read-only": false, 
+"description": ["Current receive level."]
+},
+"transmission-mode-cur": {
+"id": "transmission-mode-cur", 
+"is-read-only": false, 
+"description": ["Currently operated transmission mode according to definitions in Capabilities."]
+},
+"modulation-cur": {
+"id": "modulation-cur", 
+"is-read-only": false, 
+"description": ["Currently operated modulation on transmit path. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."]
+},
+"code-rate-cur": {
+"id": "code-rate-cur", 
+"is-read-only": false, 
+"description": ["Code rate of the currently operated coding scheme (Net bit rate ? Gross bit rate ? code rate)."]
+},
+"received-signal-id": {
+"id": "received-signal-id", 
+"is-read-only": false, 
+"description": ["ID of the signal, which the receiver is currently synchronized on."]
+},
+"snir-cur": {
+"id": "snir-cur", 
+"is-read-only": false, 
+"description": ["Currently measured signal to (noise+interference) ratio."]
+},
+"xpd-cur": {
+"id": "xpd-cur", 
+"is-read-only": false, 
+"description": ["Currently measured cross polarization discrimination."]
+},
+"rf-temp-cur": {
+"id": "rf-temp-cur", 
+"is-read-only": false, 
+"description": ["Current temperature (in degree Celsius) of the radio module inside the outdoor unit."]
+},
+"last-status-change": {
+"id": "last-status-change", 
+"is-read-only": false, 
+"description": ["Time the Air Interface entered its current operational status."]
+},
+"radio-power-is-up": {
+"id": "radio-power-is-up", 
+"is-read-only": false, 
+"description": ["If the radio unit has power and is switched on, this shall be expressed as a 'true'."]
+},
+"link-is-up": {
+"id": "link-is-up", 
+"is-read-only": false, 
+"description": ["If connection is established to the remote site with the same linkID, this shall be expressed as a 'true'."]
+},
+"xpic-is-up": {
+"id": "xpic-is-up", 
+"is-read-only": false, 
+"description": ["If XPIC is currently actually working (not just configured), this shall be expressed as a 'true'."]
+},
+"mimo-is-up": {
+"id": "mimo-is-up", 
+"is-read-only": false, 
+"description": ["If MIMO is currently actually working (not just configured), this shall be expressed as a 'true'."]
+},
+"alic-is-up": {
+"id": "alic-is-up", 
+"is-read-only": false, 
+"description": ["If Adjacent Link Interference Cancelation (ALIC) is currently actually working (not just configured), this shall be expressed as a 'true'."]
+},
+"atpc-is-up": {
+"id": "atpc-is-up", 
+"is-read-only": false, 
+"description": ["If ATPC is currently actually working (not just configured), this shall be expressed as a 'true'."]
+},
+"auto-freq-select-is-up": {
+"id": "auto-freq-select-is-up", 
+"is-read-only": false, 
+"description": ["If automated frequency selection is currently actually working (not just configured), this shall be expressed as a 'true'."]
+},
+"loop-back-kind-up": {
+"id": "loop-back-kind-up", 
+"is-read-only": false, 
+"description": ["The currently active (not just configured) type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site."]
+},
+"local-end-point-id": {
+"id": "local-end-point-id", 
+"is-read-only": false, 
+"description": ["The value of the localEndPointId is a vendor specific identifier of the air interface, used by the node to discover a microwave radio link."]
+},
+"remote-end-point-id": {
+"id": "remote-end-point-id", 
+"is-read-only": false, 
+"description": ["The value of the remoteEndPointId is a vendor specific identifier or the airinterface at the remote side, used to by the node to discover a microwave radio link."]
+},
+"air-interface-status-g": {
+"id": "air-interface-status-g", 
+"is-read-only": false, 
+"description": ["Measurements of current values on the air interface and operational status of the device."]
+},
+"current-problem-list": {
+"id": "current-problem-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"air-interface-current-problems-g": {
+"id": "air-interface-current-problems-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"current-performance-data-list": {
+"id": "current-performance-data-list", 
+"is-read-only": false, 
+"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."]
+},
+"air-interface-current-performance-g": {
+"id": "air-interface-current-performance-g", 
+"is-read-only": false, 
+"description": ["Aggregated performance information of the air interface at a particular moment."]
+},
+"historical-performance-data-list": {
+"id": "historical-performance-data-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"air-interface-historical-performances-g": {
+"id": "air-interface-historical-performances-g", 
+"is-read-only": false, 
+"description": ["Aggregated performance information of the air interface for a pre-defined measurement interval."]
+},
+"co-channel-group": {
+"id": "co-channel-group", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"co-channel-group-id": {
+"id": "co-channel-group-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"air-interface-list": {
+"id": "air-interface-list", 
+"is-read-only": false, 
+"description": ["List of air interfaces, which are part of the co-channel (XPIC, MIMO, ALIC) group."]
+},
+"sort-of-co-channel-group": {
+"id": "sort-of-co-channel-group", 
+"is-read-only": false, 
+"description": ["Type of group of air interfaces with the same transmit and receive frequency. The values shall be chosen from the following _list:'XPIC', 'MIMO', 'ALIC';"]
+},
+"logical-termination-point": {
+"id": "logical-termination-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"co-channel-group-g": {
+"id": "co-channel-group-g", 
+"is-read-only": false, 
+"description": ["Required for configuring XPIC, MIMO and ALIC."]
+},
+"role": {
+"id": "role", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"endpoint": {
+"id": "endpoint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mw-air-interface-hsb-end-point-pac": {
+"id": "mw-air-interface-hsb-end-point-pac", 
+"is-read-only": false, 
+"description": ["The EndPoint (EP) object class models the access to the FC function. Each EndPoint instance has a role (e.g., working, protection, protected, hub, spoke, leaf, root, etc.) with respect to the FC function. The association of the FC to LTPs is made via EndPoints (essentially the ports of the FC) where each EndPoint (EP) of the FC has a role in the context of the FC. The traffic forwarding between the associated End PointsEPs of the FC depends upon the type of FC and may be associated with FCSwitch object instances. In cases where there is protection conveys the protecting role of the access to the FC. The EP replaces the Protection Unit of a traditional protection model. It represents a protected (resilient/reliable) point or a protecting (unreliable working or protection) point."]
+},
+"prot-type": {
+"id": "prot-type", 
+"is-read-only": false, 
+"description": ["Indicates the protection scheme that is used for the ProtectionGroup."]
+},
+"air-interface-hsb-configuration-is-faulty-severity": {
+"id": "air-interface-hsb-configuration-is-faulty-severity", 
+"is-read-only": false, 
+"description": ["The level of severity of an airInterfaceHsbConfigurationIsFaulty alarm shall be chosen from an enumeration."]
+},
+"air-interface-hsb-is-partly-down-severity": {
+"id": "air-interface-hsb-is-partly-down-severity", 
+"is-read-only": false, 
+"description": ["The level of severity for one link out of the HSB configuration being down shall be chosen from an enumeration."]
+},
+"air-interface-hsb-is-down-severity": {
+"id": "air-interface-hsb-is-down-severity", 
+"is-read-only": false, 
+"description": ["The level of severity of the total HSB configuration being down shall be chosen from an enumeration."]
+},
+"fcswitch": {
+"id": "fcswitch", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mw-air-interface-hsb-fc-switch-pac": {
+"id": "mw-air-interface-hsb-fc-switch-pac", 
+"is-read-only": false, 
+"description": ["Represents and defines a protection switch structure encapsulated in the forwarding construct. Essentially performs the function of Protection Group. Associates to 2 or more Endpoints each playing the role of a Protection Unit. One or more protection EndPoints (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) Endpoints where either protection or working can feed one or more protected Endpoint. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 ane 1:1). May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state."]
+},
+"layer-protocol": {
+"id": "layer-protocol", 
+"is-read-only": false, 
+"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"]
+},
+"air-interface-diversity-capability": {
+"id": "air-interface-diversity-capability", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"air-interface-diversity-configuration": {
+"id": "air-interface-diversity-configuration", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"air-interface-diversity-status": {
+"id": "air-interface-diversity-status", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"air-interface-diversity-current-problems": {
+"id": "air-interface-diversity-current-problems", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"air-interface-diversity-current-performance": {
+"id": "air-interface-diversity-current-performance", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"air-interface-diversity-historical-performances": {
+"id": "air-interface-diversity-historical-performances", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mw-air-interface-diversity-pac": {
+"id": "mw-air-interface-diversity-pac", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"available-kinds-of-diversity": {
+"id": "available-kinds-of-diversity", 
+"is-read-only": false, 
+"description": ["Available types of diversity to be listed."]
+},
+"supported-alarm-list": {
+"id": "supported-alarm-list", 
+"is-read-only": false, 
+"description": ["Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the vendor."]
+},
+"supported-alarms": {
+"id": "supported-alarms", 
+"is-read-only": false, 
+"description": ["Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the device. Names are to be separated by commas."]
+},
+"air-interface-diversity-capability-g": {
+"id": "air-interface-diversity-capability-g", 
+"is-read-only": false, 
+"description": ["Describes the capabilities in implementing different types of air interface diversity."]
+},
+"air-interface-diversity": {
+"id": "air-interface-diversity", 
+"is-read-only": false, 
+"description": ["Type of air interface diversity configured at the link."]
+},
+"air-interface-ltp-list": {
+"id": "air-interface-ltp-list", 
+"is-read-only": false, 
+"description": ["_multiplicity:2-ThisAirInterfaceDiversity::AirInterfaceDiversityConfiguration::airInterfaceDiversity::diversityType::numberOfAirInterfacesMax"]
+},
+"performance-monitoring-collection-is-on": {
+"id": "performance-monitoring-collection-is-on", 
+"is-read-only": false, 
+"description": ["Enables measurement, collection, storage and access to performance data."]
+},
+"threshold-cross-alarm-list": {
+"id": "threshold-cross-alarm-list", 
+"is-read-only": false, 
+"description": ["List of threshold cross alarms to be configured."]
+},
+"problem-kind-severity-list": {
+"id": "problem-kind-severity-list", 
+"is-read-only": false, 
+"description": ["Severity of the problem to be configured."]
+},
+"air-interface-diversity-configuration-g": {
+"id": "air-interface-diversity-configuration-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"snir-cur": {
+"id": "snir-cur", 
+"is-read-only": false, 
+"description": ["Currently measured signal to (noise+interference) ratio of the combined signals."]
+},
+"air-interface-diversity-status": {
+"id": "air-interface-diversity-status", 
+"is-read-only": false, 
+"description": ["Status of the air interface bundle."]
+},
+"last-status-change": {
+"id": "last-status-change", 
+"is-read-only": false, 
+"description": ["Time the Diversity Group entered its current operational status."]
+},
+"air-interface-diversity-status-g": {
+"id": "air-interface-diversity-status-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"current-problem-list": {
+"id": "current-problem-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"air-interface-diversity-current-problems-g": {
+"id": "air-interface-diversity-current-problems-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"current-performance-data-list": {
+"id": "current-performance-data-list", 
+"is-read-only": false, 
+"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."]
+},
+"air-interface-diversity-current-performance-g": {
+"id": "air-interface-diversity-current-performance-g", 
+"is-read-only": false, 
+"description": ["Aggregated performance information of the air interface diversity configuration at a particular moment."]
+},
+"historical-performance-data-list": {
+"id": "historical-performance-data-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"air-interface-diversity-historical-performances-g": {
+"id": "air-interface-diversity-historical-performances-g", 
+"is-read-only": false, 
+"description": ["Aggregated performance information of the air interface diversity configuration for a pre-defined measurement interval."]
+},
+"layer-protocol": {
+"id": "layer-protocol", 
+"is-read-only": false, 
+"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"]
+},
+"pure-ethernet-structure-capability": {
+"id": "pure-ethernet-structure-capability", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pure-ethernet-structure-configuration": {
+"id": "pure-ethernet-structure-configuration", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pure-ethernet-structure-status": {
+"id": "pure-ethernet-structure-status", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pure-ethernet-structure-current-problems": {
+"id": "pure-ethernet-structure-current-problems", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pure-ethernet-structure-current-performance": {
+"id": "pure-ethernet-structure-current-performance", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pure-ethernet-structure-historical-performances": {
+"id": "pure-ethernet-structure-historical-performances", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mw-pure-ethernet-structure-pac": {
+"id": "mw-pure-ethernet-structure-pac", 
+"is-read-only": false, 
+"description": ["The pureEthernetStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting Ethernet traffic only."]
+},
+"structure-id": {
+"id": "structure-id", 
+"is-read-only": false, 
+"description": ["Identifies the Structure for bundling and container."]
+},
+"supported-alarm-list": {
+"id": "supported-alarm-list", 
+"is-read-only": false, 
+"description": ["Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor."]
+},
+"supported-alarms": {
+"id": "supported-alarms", 
+"is-read-only": false, 
+"description": ["Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device."]
+},
+"pure-ethernet-structure-capability-g": {
+"id": "pure-ethernet-structure-capability-g", 
+"is-read-only": false, 
+"description": ["Describes the logical structuring of the physical capacity provided by a pure Ethernet microwave device. Segmentation is not available. No fixed segment size. No TDM transport."]
+},
+"performance-monitoring-collection-is-on": {
+"id": "performance-monitoring-collection-is-on", 
+"is-read-only": false, 
+"description": ["Enables measurement, collection, storage and access to performance data."]
+},
+"problem-kind-severity-list": {
+"id": "problem-kind-severity-list", 
+"is-read-only": false, 
+"description": ["Severity of the type of problem to be configured."]
+},
+"pure-ethernet-structure-configuration-g": {
+"id": "pure-ethernet-structure-configuration-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"segment-status-list": {
+"id": "segment-status-list", 
+"is-read-only": false, 
+"description": ["Status of the Ethernet transport segment. Always just one segment."]
+},
+"last-status-change": {
+"id": "last-status-change", 
+"is-read-only": false, 
+"description": ["Time and date of the last update of the status information."]
+},
+"pure-ethernet-structure-status-g": {
+"id": "pure-ethernet-structure-status-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"current-problem-list": {
+"id": "current-problem-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pure-ethernet-structure-current-problems-g": {
+"id": "pure-ethernet-structure-current-problems-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"current-performance-data-list": {
+"id": "current-performance-data-list", 
+"is-read-only": false, 
+"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."]
+},
+"pure-ethernet-structure-current-performance-g": {
+"id": "pure-ethernet-structure-current-performance-g", 
+"is-read-only": false, 
+"description": ["Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment."]
+},
+"historical-performance-data-list": {
+"id": "historical-performance-data-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pure-ethernet-structure-historical-performances-g": {
+"id": "pure-ethernet-structure-historical-performances-g", 
+"is-read-only": false, 
+"description": ["Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval."]
+},
+"pure-ethernet": {
+"id": "pure-ethernet", 
+"is-read-only": false, 
+"description": ["Feature 'pure-ethernet' is mandatory for device types transporting pure Ethernet."]
+},
+"layer-protocol": {
+"id": "layer-protocol", 
+"is-read-only": false, 
+"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"]
+},
+"hybrid-mw-structure-capability": {
+"id": "hybrid-mw-structure-capability", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"hybrid-mw-structure-configuration": {
+"id": "hybrid-mw-structure-configuration", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"hybrid-mw-structure-status": {
+"id": "hybrid-mw-structure-status", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"hybrid-mw-structure-current-problems": {
+"id": "hybrid-mw-structure-current-problems", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"hybrid-mw-structure-current-performance": {
+"id": "hybrid-mw-structure-current-performance", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"hybrid-mw-structure-historical-performances": {
+"id": "hybrid-mw-structure-historical-performances", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mw-hybrid-mw-structure-pac": {
+"id": "mw-hybrid-mw-structure-pac", 
+"is-read-only": false, 
+"description": ["The HybridMwStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM and Ethernet traffic."]
+},
+"structure-id": {
+"id": "structure-id", 
+"is-read-only": false, 
+"description": ["Identifies the Structure for bundling and container."]
+},
+"supported-tdm-structure-types-list": {
+"id": "supported-tdm-structure-types-list", 
+"is-read-only": false, 
+"description": ["Lists the TDM frame types that are supported."]
+},
+"supported-alarm-list": {
+"id": "supported-alarm-list", 
+"is-read-only": false, 
+"description": ["Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor."]
+},
+"supported-alarms": {
+"id": "supported-alarms", 
+"is-read-only": false, 
+"description": ["Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device."]
+},
+"hybrid-mw-structure-capability-g": {
+"id": "hybrid-mw-structure-capability-g", 
+"is-read-only": false, 
+"description": ["Describes the logical structuring of the physical capacity provided by a hybrid microwave device (TDM + Ethernet). Segmentation is available. TDM transport is available."]
+},
+"structure-kind": {
+"id": "structure-kind", 
+"is-read-only": false, 
+"description": ["TDM frame to be applied."]
+},
+"structure-type": {
+"id": "structure-type", 
+"is-read-only": false, 
+"description": ["TDM frame to be applied."]
+},
+"number-of-tdm-segments-to-be-reserved": {
+"id": "number-of-tdm-segments-to-be-reserved", 
+"is-read-only": false, 
+"description": ["Allows to configure the number of segments reserved for TDM frames of the type specified in HybridMwStructure::HybridMwStructureConfiguration::structureType"]
+},
+"performance-monitoring-collection-is-on": {
+"id": "performance-monitoring-collection-is-on", 
+"is-read-only": false, 
+"description": ["Enables measurement, collection, storage and access to performance data."]
+},
+"problem-kind-severity-list": {
+"id": "problem-kind-severity-list", 
+"is-read-only": false, 
+"description": ["Severity of the type of problem to be configured."]
+},
+"hybrid-mw-structure-configuration-g": {
+"id": "hybrid-mw-structure-configuration-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"segment-status-list": {
+"id": "segment-status-list", 
+"is-read-only": false, 
+"description": ["Status of each segment (all TDM and one Ethernet). Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1"]
+},
+"last-status-change": {
+"id": "last-status-change", 
+"is-read-only": false, 
+"description": ["Time and date of the last update of the status information."]
+},
+"hybrid-mw-structure-status-g": {
+"id": "hybrid-mw-structure-status-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"current-problem-list": {
+"id": "current-problem-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"hybrid-mw-structure-current-problems-g": {
+"id": "hybrid-mw-structure-current-problems-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"current-performance-data-list": {
+"id": "current-performance-data-list", 
+"is-read-only": false, 
+"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."]
+},
+"hybrid-mw-structure-current-performance-g": {
+"id": "hybrid-mw-structure-current-performance-g", 
+"is-read-only": false, 
+"description": ["Aggregated performance information of the structure of a hybrid microwave at a particular moment."]
+},
+"historical-performance-data-list": {
+"id": "historical-performance-data-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"hybrid-mw-structure-historical-performances-g": {
+"id": "hybrid-mw-structure-historical-performances-g", 
+"is-read-only": false, 
+"description": ["Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval."]
+},
+"hybrid-microwave": {
+"id": "hybrid-microwave", 
+"is-read-only": false, 
+"description": ["Feature 'hybrid-microwave' is mandatory for device types transporting Ethernet + TDM."]
+},
+"layer-protocol": {
+"id": "layer-protocol", 
+"is-read-only": false, 
+"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"]
+},
+"ethernet-container-capability": {
+"id": "ethernet-container-capability", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ethernet-container-configuration": {
+"id": "ethernet-container-configuration", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ethernet-container-status": {
+"id": "ethernet-container-status", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ethernet-container-current-problems": {
+"id": "ethernet-container-current-problems", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ethernet-container-current-performance": {
+"id": "ethernet-container-current-performance", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ethernet-container-historical-performances": {
+"id": "ethernet-container-historical-performances", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mw-ethernet-container-pac": {
+"id": "mw-ethernet-container-pac", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"bundling-is-avail": {
+"id": "bundling-is-avail", 
+"is-read-only": false, 
+"description": ["This attribute has to be set on 'true', if the device allows combining resources from several air interfaces for transporting this Ethernet container."]
+},
+"packet-compression-is-avail": {
+"id": "packet-compression-is-avail", 
+"is-read-only": false, 
+"description": ["In case packet compression can be activated, but not configured to a certain type, packetCompressionAvail shall be set on 'true', but none of the compression level specific booleans."]
+},
+"layer2-compression-is-avail": {
+"id": "layer2-compression-is-avail", 
+"is-read-only": false, 
+"description": ["Packet compression on layer 2 available at the device."]
+},
+"vlan-compression-is-avail": {
+"id": "vlan-compression-is-avail", 
+"is-read-only": false, 
+"description": ["Packet compression on VLAN layer available at the device."]
+},
+"q-in-q-compression-is-avail": {
+"id": "q-in-q-compression-is-avail", 
+"is-read-only": false, 
+"description": ["Packet compression on layer of a second VLAN available at the device."]
+},
+"mpls-compression-is-avail": {
+"id": "mpls-compression-is-avail", 
+"is-read-only": false, 
+"description": ["Packet compression on mpls layer available at the device."]
+},
+"ipv4-compression-is-avail": {
+"id": "ipv4-compression-is-avail", 
+"is-read-only": false, 
+"description": ["Packet compression on layer 3 for IPv4 available at the device."]
+},
+"ipv6-compression-is-avail": {
+"id": "ipv6-compression-is-avail", 
+"is-read-only": false, 
+"description": ["Packet compression on layer 3 for IPv6 available at the device."]
+},
+"layer4-compression-is-avail": {
+"id": "layer4-compression-is-avail", 
+"is-read-only": false, 
+"description": ["Packet compression on layer 4 (TCP and UDP header) available at the device."]
+},
+"encryption-is-avail": {
+"id": "encryption-is-avail", 
+"is-read-only": false, 
+"description": ["Shall be marked 'true', if Ethernet payload encryption is available."]
+},
+"supported-alarm-list": {
+"id": "supported-alarm-list", 
+"is-read-only": false, 
+"description": ["Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the vendor."]
+},
+"supported-alarms": {
+"id": "supported-alarms", 
+"is-read-only": false, 
+"description": ["Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device."]
+},
+"ethernet-container-capability-g": {
+"id": "ethernet-container-capability-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"container-id": {
+"id": "container-id", 
+"is-read-only": false, 
+"description": ["ContainterID in Netconf must be the same as EthernetPortID in OpenFlow so a connection can be made between the two items, which separately exist in the controller."]
+},
+"segments-id-list": {
+"id": "segments-id-list", 
+"is-read-only": false, 
+"description": ["Lists the segments used for transporting this Ethernet container. In case EthernetContainer::ContainerCapability::bundlingIsAvail==0, all TypeDefinitions::segmentIdType::structureId must be identical in the list."]
+},
+"packet-compression-is-on": {
+"id": "packet-compression-is-on", 
+"is-read-only": false, 
+"description": ["In case packet compression is activated, but no type is activated, it is assumed that the device chooses the optimum."]
+},
+"layer2-compression-is-on": {
+"id": "layer2-compression-is-on", 
+"is-read-only": false, 
+"description": ["Packet compression on layer 2 configured at the device."]
+},
+"vlan-compression-is-on": {
+"id": "vlan-compression-is-on", 
+"is-read-only": false, 
+"description": ["Packet compression on VLAN layer configured at the device."]
+},
+"q-in-q-compression-is-on": {
+"id": "q-in-q-compression-is-on", 
+"is-read-only": false, 
+"description": ["Packet compression on layer of a second VLAN configured at the device."]
+},
+"mpls-compression-is-on": {
+"id": "mpls-compression-is-on", 
+"is-read-only": false, 
+"description": ["Packet compression on MPLS layer configured at the device."]
+},
+"ipv4-compression-is-on": {
+"id": "ipv4-compression-is-on", 
+"is-read-only": false, 
+"description": ["Packet compression on layer 3 for IPv4 configured at the device."]
+},
+"ipv6-compression-is-on": {
+"id": "ipv6-compression-is-on", 
+"is-read-only": false, 
+"description": ["Packet compression on layer 3 for IPv6 configured at the device."]
+},
+"layer4-compression-is-on": {
+"id": "layer4-compression-is-on", 
+"is-read-only": false, 
+"description": ["Packet compression on layer 4 (TCP and UDP header) configured at the device."]
+},
+"encryption-is-on": {
+"id": "encryption-is-on", 
+"is-read-only": false, 
+"description": ["Activates encryption of the Ethernet payload."]
+},
+"cryptographic-key": {
+"id": "cryptographic-key", 
+"is-read-only": false, 
+"description": ["Key for transforming plaintext into cipher text data."]
+},
+"performance-monitoring-collection-is-on": {
+"id": "performance-monitoring-collection-is-on", 
+"is-read-only": false, 
+"description": ["Enables measurement, collection, storage and access to performance data."]
+},
+"problem-kind-severity-list": {
+"id": "problem-kind-severity-list", 
+"is-read-only": false, 
+"description": ["Severity of the problem to be configured."]
+},
+"ethernet-container-configuration-g": {
+"id": "ethernet-container-configuration-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"last-status-change": {
+"id": "last-status-change", 
+"is-read-only": false, 
+"description": ["Time the Container entered its current operational status."]
+},
+"ethernet-container-status-g": {
+"id": "ethernet-container-status-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"current-problem-list": {
+"id": "current-problem-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ethernet-container-current-problems-g": {
+"id": "ethernet-container-current-problems-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"current-performance-data-list": {
+"id": "current-performance-data-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ethernet-container-current-performance-g": {
+"id": "ethernet-container-current-performance-g", 
+"is-read-only": false, 
+"description": ["Aggregated performance information of the Ethernet container at a particular moment."]
+},
+"historical-performance-data-list": {
+"id": "historical-performance-data-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ethernet-container-historical-performances-g": {
+"id": "ethernet-container-historical-performances-g", 
+"is-read-only": false, 
+"description": ["Aggregated performance information of the Ethernet container for a pre-defined measurement interval."]
+},
+"layer-protocol": {
+"id": "layer-protocol", 
+"is-read-only": false, 
+"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"]
+},
+"tdm-container-capability": {
+"id": "tdm-container-capability", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tdm-container-configuration": {
+"id": "tdm-container-configuration", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tdm-container-status": {
+"id": "tdm-container-status", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tdm-container-current-problems": {
+"id": "tdm-container-current-problems", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tdm-container-current-performance": {
+"id": "tdm-container-current-performance", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tdm-container-historical-performances": {
+"id": "tdm-container-historical-performances", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mw-tdm-container-pac": {
+"id": "mw-tdm-container-pac", 
+"is-read-only": false, 
+"description": ["The TdmContainer_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM traffic."]
+},
+"supported-tdm-container-types-list": {
+"id": "supported-tdm-container-types-list", 
+"is-read-only": false, 
+"description": ["Lists the TDM containers that are supported."]
+},
+"supported-alarm-list": {
+"id": "supported-alarm-list", 
+"is-read-only": false, 
+"description": ["Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the vendor."]
+},
+"supported-alarms": {
+"id": "supported-alarms", 
+"is-read-only": false, 
+"description": ["Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device."]
+},
+"tdm-container-capability-g": {
+"id": "tdm-container-capability-g", 
+"is-read-only": false, 
+"description": ["Bundling is not available."]
+},
+"container-id": {
+"id": "container-id", 
+"is-read-only": false, 
+"description": ["ContainterID in Netconf must be the same as TDM Flow ID so a connection can be made between the two items, which separately exist in the controller."]
+},
+"container-type": {
+"id": "container-type", 
+"is-read-only": false, 
+"description": ["Type of TDM container."]
+},
+"segment-id": {
+"id": "segment-id", 
+"is-read-only": false, 
+"description": ["Multiplicity = 1; One segment per TDM container; Type of segment must match type of container;"]
+},
+"performance-monitoring-collection-is-on": {
+"id": "performance-monitoring-collection-is-on", 
+"is-read-only": false, 
+"description": ["Enables measurement, collection, storage and access to performance data."]
+},
+"problem-kind-severity-list": {
+"id": "problem-kind-severity-list", 
+"is-read-only": false, 
+"description": ["Severity of the problem to be configured."]
+},
+"tdm-container-configuration-g": {
+"id": "tdm-container-configuration-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"last-status-change": {
+"id": "last-status-change", 
+"is-read-only": false, 
+"description": ["Time the Container entered its current operational status."]
+},
+"tdm-container-status-g": {
+"id": "tdm-container-status-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"current-problem-list": {
+"id": "current-problem-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tdm-container-current-problems-g": {
+"id": "tdm-container-current-problems-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"current-performance-data-list": {
+"id": "current-performance-data-list", 
+"is-read-only": false, 
+"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."]
+},
+"tdm-container-current-performance-g": {
+"id": "tdm-container-current-performance-g", 
+"is-read-only": false, 
+"description": ["Aggregated performance information of the TDM container at a particular moment."]
+},
+"historical-performance-data-list": {
+"id": "historical-performance-data-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tdm-container-historical-performances-g": {
+"id": "tdm-container-historical-performances-g", 
+"is-read-only": false, 
+"description": ["Aggregated performance information of the TDM container for a pre-defined measurement interval."]
+},
+"layer-protocol": {
+"id": "layer-protocol", 
+"is-read-only": false, 
+"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"]
+},
+"wirebased-interface-capability": {
+"id": "wirebased-interface-capability", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"wirebased-interface-configuration": {
+"id": "wirebased-interface-configuration", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"wirebased-interface-status": {
+"id": "wirebased-interface-status", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"wirebased-interface-current-problems": {
+"id": "wirebased-interface-current-problems", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"wirebased-interface-current-performance": {
+"id": "wirebased-interface-current-performance", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"wirebased-interface-historical-performances": {
+"id": "wirebased-interface-historical-performances", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"wire-interface-pac": {
+"id": "wire-interface-pac", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"available-mau-list": {
+"id": "available-mau-list", 
+"is-read-only": false, 
+"description": ["List of Medium Attachment Units (MAUs) that are available for being selected. If rate and service configuration (e.g. SFF-8079) are not supported, the MAU determined by hardware shall be described."]
+},
+"auto-pmd-negotiation-is-avail": {
+"id": "auto-pmd-negotiation-is-avail", 
+"is-read-only": false, 
+"description": ["Parameter 1 = Indicates that device is supporting Auto-negotiation"]
+},
+"auto-pmd-negotiation-max-is-avail": {
+"id": "auto-pmd-negotiation-max-is-avail", 
+"is-read-only": false, 
+"description": ["1 = Indicates that device is supporting definition of the maximum speed/Medium Attached Unit (MAU) automatically chosen when (autoNegotiationIsOn=1)"]
+},
+"supported-loop-back-kind-list": {
+"id": "supported-loop-back-kind-list", 
+"is-read-only": false, 
+"description": ["List of supported kinds of looping back of header information to the remote site. 802.3 45.2.1.12.1 PMA remote loopback ability"]
+},
+"maintenance-timer-range": {
+"id": "maintenance-timer-range", 
+"is-read-only": false, 
+"description": ["MW IM Available time periods for maintenance configurations (e.g. the loop back) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360')."]
+},
+"supported-alarm-list": {
+"id": "supported-alarm-list", 
+"is-read-only": false, 
+"description": ["Available alarms to be listed. Mandatory:'txFault', 'rxLos', 'tempHigh', 'tempLow', 'rxLevelHigh', 'rxLevelLow'. Optional:'vccHigh', 'vccLow', 'txBiasHigh', 'txBiasLow', 'txPowerHigh', 'txPowerLow', 'laserTempHigh', 'laserTempLow', 'tecCurrentHigh', 'tecCurrentLow'. Further alarms might be added by the device. Names are to be separated by commas."]
+},
+"wire-interface-capability-g": {
+"id": "wire-interface-capability-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"wire-interface-name": {
+"id": "wire-interface-name", 
+"is-read-only": false, 
+"description": ["Text field for the wire interface being named by the operator. Ideally used for entering unique numbers or names for unambiguously identifying the connection within the network Parameter"]
+},
+"remote-wire-interface-name": {
+"id": "remote-wire-interface-name", 
+"is-read-only": false, 
+"description": ["Learning from MW IM Text field for defining the wire interface this one is connected with. Ideally used for entering unique numbers or names for unambiguously identifying the connection within the network"]
+},
+"interface-is-on": {
+"id": "interface-is-on", 
+"is-read-only": false, 
+"description": ["1 = Activation of the interface (it gets powered and can be managed even if the transceiver is not yet transmitting or receiving). In case there is no Medium Attachment Unit (MAU) (e.g. no SFP in the cage) SETting (interfaceIsOn=1) must be ignored and GETing must return (interfaceIsOn=0) 802.3 according 30.3.2.2.1 acPhyAdminControl"]
+},
+"transceiver-is-on-list": {
+"id": "transceiver-is-on-list", 
+"is-read-only": false, 
+"description": ["802.3 22.?.? and additionally 802.3 45.2.1.8 PMD transmit disable register (Register 1.9) 1 = Activation of the transmitter and receiver (e.g. laser) of the PHY; transceiverIsOnList[0]:total interface; transceiverIsOnList[1..10] different lanes of a multilane Medium Attachment Unit (MAU)"]
+},
+"auto-pmd-negotiation-is-on": {
+"id": "auto-pmd-negotiation-is-on", 
+"is-read-only": false, 
+"description": ["Parameter 1 = Auto-negotiation is switched on"]
+},
+"fixed-pmd": {
+"id": "fixed-pmd", 
+"is-read-only": false, 
+"description": ["If (autoPmdNegotiationIsOn=0) configuration of the concrete kind of Physical Medium Dependent (PMD). If (autoNegotiationIsOn=1) value of this field becomes irrelevant"]
+},
+"auto-pmd-negotiation-max": {
+"id": "auto-pmd-negotiation-max", 
+"is-read-only": false, 
+"description": ["Parameter If (autoNegotiationIsOn=1) AND (autoNegotiationMauMaxIsAvail=1) configuration of the maximum speed/Physical Medium Dependent (PMD), which is automatically chosen by Auto-negotiation"]
+},
+"auto-signal-ordering-is-on": {
+"id": "auto-signal-ordering-is-on", 
+"is-read-only": false, 
+"description": ["1 = e.g. auto-MDI-X is switched on"]
+},
+"fixed-signal-ordering": {
+"id": "fixed-signal-ordering", 
+"is-read-only": false, 
+"description": ["If (autoSignalOrderingIsOn=0) configuration of the concrete kind of signal ordering on the media (e.g. MDI, or MDI-X). If (autoSignalOrderingIsOn=1) value of this field becomes irrelevant"]
+},
+"short-reach-mode-is-on": {
+"id": "short-reach-mode-is-on", 
+"is-read-only": false, 
+"description": ["Activation of the Short Reach Mode for 10GBASE-T according to 802.3 45.2.1.64"]
+},
+"unidirectional-operation-is-on": {
+"id": "unidirectional-operation-is-on", 
+"is-read-only": false, 
+"description": ["If (autoNegotiationIsOn=1) OR manualDuplexSelection=0 (=half duplex), this bit is ignored. When autoNegotiationIsOn=0 AND manualDuplexSelection=1 (=full duplex): 1 = Enable transmit from media independent interface regardless of whether the PHY has determined that a valid link has been established, 0 = Enable transmit from media independent interface only when the PHY has determined that a valid link has been established 802.3 Parameter"]
+},
+"wavelength-list": {
+"id": "wavelength-list", 
+"is-read-only": false, 
+"description": ["Wavelength of the signal of laser in pico meter; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5 SFF-8690"]
+},
+"temperature-high-threshold": {
+"id": "temperature-high-threshold", 
+"is-read-only": false, 
+"description": ["Threshold for alarming high temperature values. Will move to somewhere in the Physical Segment of the Core IM"]
+},
+"temperature-low-threshold": {
+"id": "temperature-low-threshold", 
+"is-read-only": false, 
+"description": ["Threshold for alarming low temperature values. Will move to somewhere in the Physical Segment of the Core IM"]
+},
+"rxlevel-high-threshold": {
+"id": "rxlevel-high-threshold", 
+"is-read-only": false, 
+"description": ["Threshold for alarming high RX levels."]
+},
+"rxlevel-low-threshold": {
+"id": "rxlevel-low-threshold", 
+"is-read-only": false, 
+"description": ["Threshold for alarming low RX levels."]
+},
+"loop-back-kind-on": {
+"id": "loop-back-kind-on", 
+"is-read-only": false, 
+"description": ["Parameter 802.3 according 22.2.4.1.2 Loopback Maintenance Feature. The currently configured type of looping back of the wire interface header shall be expressed here. The received header is returned to the remote site. Activation of local loopback mode on physical layer"]
+},
+"isolation-is-on": {
+"id": "isolation-is-on", 
+"is-read-only": false, 
+"description": ["1 = Activation of the separation of the PHY from higher network layers 802.3"]
+},
+"restart-pmd-negotiation-is-on": {
+"id": "restart-pmd-negotiation-is-on", 
+"is-read-only": false, 
+"description": ["Restarts the auto negotiation process 802.3"]
+},
+"reset-mau-is-on": {
+"id": "reset-mau-is-on", 
+"is-read-only": false, 
+"description": ["802.3 Resets the entire Medium Access Unit (MAU)"]
+},
+"maintenance-timer": {
+"id": "maintenance-timer", 
+"is-read-only": false, 
+"description": ["Parameter and MW IM Time of existence of any maintenance configuration (e.g. the loop back). Valid values are defined in WireInterface::WireInterfaceCapability::maintenanceTimerRange"]
+},
+"problem-kind-severity-list": {
+"id": "problem-kind-severity-list", 
+"is-read-only": false, 
+"description": ["Severity of the problem to be configured."]
+},
+"wire-interface-configuration-g": {
+"id": "wire-interface-configuration-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"interface-is-up": {
+"id": "interface-is-up", 
+"is-read-only": false, 
+"description": ["802.3 according 30.3.2.1.7 aPhyAdminState 1 = A Physical layer entity (PHY) exists (including Medium Attachment Unit (e.g. SFP) ) and it is powered and can be managed"]
+},
+"receive-signal-is-detected": {
+"id": "receive-signal-is-detected", 
+"is-read-only": false, 
+"description": ["802.3 45.2.1.9 PMD receive signal detect 1 = Receiver (e.g. laser) detects signal; receiveSignalIsDetected[0]:total interface; receiveSignalIsDetected[1..10] different lanes of a multilane Medium Attachment Unit (MAU)"]
+},
+"pmd-is-up": {
+"id": "pmd-is-up", 
+"is-read-only": false, 
+"description": ["Inverse of 802.3 45.2.1.2.3 Fault (1.1.7) If (interfaceIsUp=1) BUT 0 = there is a fault in either transmit or receive path"]
+},
+"pmd-cur": {
+"id": "pmd-cur", 
+"is-read-only": false, 
+"description": ["Indicates the kind of Physical Medium Dependent (PMD) currently operated at this interface"]
+},
+"signal-ordering-kind-cur": {
+"id": "signal-ordering-kind-cur", 
+"is-read-only": false, 
+"description": ["Reference on a SignalOrderingType for expressing the currently active way of ordering the signals on the physical medium. Must contain a value as defined in TypeDefinitions::SignalOrderingType::signalOrderingKindName"]
+},
+"eee-is-up": {
+"id": "eee-is-up", 
+"is-read-only": false, 
+"description": ["1 = Energy Efficient Ethernet is supported at both ends of the link and it is activated"]
+},
+"link-is-up": {
+"id": "link-is-up", 
+"is-read-only": false, 
+"description": ["Parameter 1 = (transceiverIsUp=1) AND communication is established to the remote site"]
+},
+"link-is-idle": {
+"id": "link-is-idle", 
+"is-read-only": false, 
+"description": ["1 = (linkIsUp=1) AND (eeeIsAvail=1) AND (eeeIsOn=1) AND link is currently in idle mode. If Energy Efficient Ethernet is not supported or switched off, this attribute must be 0."]
+},
+"tx-level-cur": {
+"id": "tx-level-cur", 
+"is-read-only": false, 
+"description": ["Current transmit power"]
+},
+"rx-level-cur": {
+"id": "rx-level-cur", 
+"is-read-only": false, 
+"description": ["Current receive power; Also used for receive signal power measured at the Medium Dependent Interface (MDI) of 10GBASE-T during training as described in 802.3 55.4.3.1"]
+},
+"temp-cur": {
+"id": "temp-cur", 
+"is-read-only": false, 
+"description": ["Current temperature (in degree Celsius) inside the transceiver To be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::DynamicDetails::PhysicalProperties"]
+},
+"loop-back-kind-up": {
+"id": "loop-back-kind-up", 
+"is-read-only": false, 
+"description": ["Paramter and MW IM The currently active (not just configured) type of looping back of the wire interface header shall be expressed here. The received header is returned to the remote site."]
+},
+"wire-interface-status-g": {
+"id": "wire-interface-status-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"current-problem-list": {
+"id": "current-problem-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"wire-interface-current-problems-g": {
+"id": "wire-interface-current-problems-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"current-performance-data-list": {
+"id": "current-performance-data-list", 
+"is-read-only": false, 
+"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."]
+},
+"wire-interface-current-performance-g": {
+"id": "wire-interface-current-performance-g", 
+"is-read-only": false, 
+"description": ["Aggregated performance information of the air interface at a particular moment."]
+},
+"historical-performance-data-list": {
+"id": "historical-performance-data-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"wire-interface-historical-performances-g": {
+"id": "wire-interface-historical-performances-g", 
+"is-read-only": false, 
+"description": ["Aggregated performance information of the air interface for a pre-defined measurement interval."]
+},
+"sequence-number": {
+"id": "sequence-number", 
+"is-read-only": false, 
+"description": ["Unique sequence number of the current problem object."]
+},
+"time-stamp": {
+"id": "time-stamp", 
+"is-read-only": false, 
+"description": ["Time and date of the problem."]
+},
+"problem-severity": {
+"id": "problem-severity", 
+"is-read-only": false, 
+"description": ["Severity of the alarm."]
+},
+"mw-current-problem-g": {
+"id": "mw-current-problem-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"object-creation-notification": {
+"id": "object-creation-notification", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"counter": {
+"id": "counter", 
+"is-read-only": false, 
+"description": ["Counts object creation notifications."]
+},
+"time-stamp": {
+"id": "time-stamp", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"object-id-ref": {
+"id": "object-id-ref", 
+"is-read-only": false, 
+"description": ["ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."]
+},
+"object-type": {
+"id": "object-type", 
+"is-read-only": false, 
+"description": ["Type of Object to be chosen from the following list of values: 'MW_AirInterface_Pac', 'MW_AirInterfaceDiversity_Pac', 'MW_Structure_Pac', 'MW_PureEthernetStructure_Pac', 'MW_HybridMwStructure_Pac', 'MW_Container_Pac', 'MW_EthernetContainer_Pac' or 'MW_TdmContainer_Pac'."]
+},
+"object-creation-notification-g": {
+"id": "object-creation-notification-g", 
+"is-read-only": false, 
+"description": ["To be sent when a new MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac has to be instancieted in the controller."]
+},
+"object-deletion-notification": {
+"id": "object-deletion-notification", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"counter": {
+"id": "counter", 
+"is-read-only": false, 
+"description": ["Counts object deletion notifications."]
+},
+"time-stamp": {
+"id": "time-stamp", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"object-id-ref": {
+"id": "object-id-ref", 
+"is-read-only": false, 
+"description": ["ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."]
+},
+"object-deletion-notification-g": {
+"id": "object-deletion-notification-g", 
+"is-read-only": false, 
+"description": ["To be sent when a new MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac instance has to be deleted in the controller."]
+},
+"attribute-value-changed-notification": {
+"id": "attribute-value-changed-notification", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"counter": {
+"id": "counter", 
+"is-read-only": false, 
+"description": ["Counts attribute value changed notifications."]
+},
+"time-stamp": {
+"id": "time-stamp", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"object-id-ref": {
+"id": "object-id-ref", 
+"is-read-only": false, 
+"description": ["ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."]
+},
+"attribute-name": {
+"id": "attribute-name", 
+"is-read-only": false, 
+"description": ["Name of the attribute that has been changed."]
+},
+"new-value": {
+"id": "new-value", 
+"is-read-only": false, 
+"description": ["Attribute value converted to a string (xml, json, ...)"]
+},
+"attribute-value-changed-notification-g": {
+"id": "attribute-value-changed-notification-g", 
+"is-read-only": false, 
+"description": ["To be sent when an attribute has changed and one or more controllers have to update their data."]
+},
+"problem-notification": {
+"id": "problem-notification", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"counter": {
+"id": "counter", 
+"is-read-only": false, 
+"description": ["Counts problem notifications"]
+},
+"time-stamp": {
+"id": "time-stamp", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"object-id-ref": {
+"id": "object-id-ref", 
+"is-read-only": false, 
+"description": ["ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."]
+},
+"problem": {
+"id": "problem", 
+"is-read-only": false, 
+"description": ["Name of the problem according to AirInterface::AirInterfaceCapability::supportedAlarms or AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms or Structure::StructureCapability::supportedAlarms or PureEthernetStructure::PureEthernetStructureCapability::supportedAlarms or HybridMwStructure::HybridMwStructureCapability::supportedAlarms or Container::ContainerCapability::supportedAlarms or EthernetContainer::EthernetContainerCapability::supportedAlarms or TdmContainer::TdmContainerCapability::supportedAlarms."]
+},
+"severity": {
+"id": "severity", 
+"is-read-only": false, 
+"description": ["Severity of the problem according to AirInterface::AirInterfaceConfiguration::problemSeverityList, AirInterfaceDiversity::AirInterfaceDiversityConfiguration::problemSeverityList, Structure::StructureConfiguration::problemSeverityList, PureEthernetStructure::PureEthernetStructureConfiguration::problemSeverityList, HybridMwStructure::HybridMwStructureConfiguration::problemSeverityList, Container::ContainerConfiguration::problemSeverityList, EthernetContainer::EthernetContainerConfiguration::problemSeverityList or TdmContainer::TdmContainerConfiguration::problemSeverityList"]
+},
+"problem-notification-g": {
+"id": "problem-notification-g", 
+"is-read-only": false, 
+"description": ["To be sent when a problem occurs at a MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."]
+}}
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.schema-information.json
new file mode 100644
index 0000000..5d3014f
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.schema-information.json
@@ -0,0 +1,337 @@
+{
+ "schema-information": {
+  "network-element-pac": {
+   "id": "network-element-pac",
+   "uml-id": "_RamCUPaMEeaW9u5N6usiTA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "NetworkElement_Pac"
+  },
+  "network-element": {
+   "id": "network-element",
+   "uml-id": "_5z06cPaNEeaW9u5N6usiTA",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel/CoreModel.uml#_oGqnr1LNEeO75dO39GbF8Q",
+   "order-number": 1,
+   "is-read-only": false,
+   "uml-name": "_networkElement"
+  },
+  "network-element-capability": {
+   "id": "network-element-capability",
+   "uml-id": "_1_TVYPaMEeaW9u5N6usiTA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "NetworkElementCapability"
+  },
+  "network-element-configuration": {
+   "id": "network-element-configuration",
+   "uml-id": "_Pu6HIPaNEeaW9u5N6usiTA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "NetworkElementConfiguration"
+  },
+  "network-element-status": {
+   "id": "network-element-status",
+   "uml-id": "_g5u0YPaNEeaW9u5N6usiTA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "NetworkElementStatus"
+  },
+  "network-element-current-problems": {
+   "id": "network-element-current-problems",
+   "uml-id": "_Pu6HIfaNEeaW9u5N6usiTA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "NetworkElementCurrentProblems"
+  },
+  "supported-alarms": {
+   "id": "supported-alarms",
+   "uml-id": "_444DuBd_EeegALpYen9G6g",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": true,
+   "description": [
+    "Available alarms to be listed. Names are to be separated by commas."
+   ],
+   "uml-name": "supportedAlarms",
+   "controlType": "text"
+  },
+  "problem-type-severity": {
+   "id": "problem-type-severity",
+   "uml-id": "_rvDABPasEeaW9u5N6usiTA",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel-MicrowaveTransportNetwork/MicrowaveModel.uml#_eIml0JH1EeWUdbnmmNiTAA",
+   "order-number": 2,
+   "is-read-only": false,
+   "description": [
+    "Severity of this type of alarm."
+   ],
+   "uml-name": "problemTypeSeverity"
+  },
+  "trigger-refresh": {
+   "id": "trigger-refresh",
+   "uml-id": "_F6C-8Pm7EeaOH6heSczBpQ",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
+   "order-number": 2,
+   "is-read-only": false,
+   "description": [
+    "A trigger to instuct the netconf server to refresh its internal database/cache. It is primary used for alarms status, but could used for anything else too. It is assumed that the refresh mechanismn takes somes time. In order to indictate the process to the controller a refreshStatus attribute is used."
+   ],
+   "uml-name": "triggerRefresh",
+   "controlType": "checkbox"
+  },
+  "refresh-status": {
+   "id": "refresh-status",
+   "uml-id": "_w0x8wPm3EeaOH6heSczBpQ",
+   "uml-type": "ownedAttribute",
+   "type": "_7HZcEPm3EeaOH6heSczBpQ",
+   "order-number": 1,
+   "is-read-only": true,
+   "uml-name": "refreshStatus",
+   "controlType": [
+    "done",
+    "processing"
+   ]
+  },
+  "current-problem-list": {
+   "id": "current-problem-list",
+   "uml-id": "_444DwRd_EeegALpYen9G6g",
+   "uml-type": "ownedAttribute",
+   "type": "_TBaooPasEeaW9u5N6usiTA",
+   "order-number": 1,
+   "is-read-only": true,
+   "uml-name": "currentProblemList"
+  },
+  "equipment-pac": {
+   "id": "equipment-pac",
+   "uml-id": "_VtO8MPaMEeaW9u5N6usiTA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "Equipment_Pac"
+  },
+  "equipment": {
+   "id": "equipment",
+   "uml-id": "_92PqMfaREeaW9u5N6usiTA",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel/CoreModel.uml#_8SXNej-HEeaRI-H69PghuA",
+   "order-number": 1,
+   "is-read-only": false,
+   "is-key": 1,
+   "uml-name": "_equipment"
+  },
+  "equipment-capability": {
+   "id": "equipment-capability",
+   "uml-id": "_g5u0YfaNEeaW9u5N6usiTA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "EquipmentCapability"
+  },
+  "equipment-configuration": {
+   "id": "equipment-configuration",
+   "uml-id": "_OGWN4PaNEeaW9u5N6usiTA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "EquipmentConfiguration"
+  },
+  "equipment-status": {
+   "id": "equipment-status",
+   "uml-id": "_gJH6APaREeaW9u5N6usiTA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "EquipmentStatus"
+  },
+  "equipment-current-problems": {
+   "id": "equipment-current-problems",
+   "uml-id": "_kRHqIPaREeaW9u5N6usiTA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "EquipmentCurrentProblems"
+  },
+  "holder-pac": {
+   "id": "holder-pac",
+   "uml-id": "_dECKoPaMEeaW9u5N6usiTA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "Holder_Pac"
+  },
+  "holder": {
+   "id": "holder",
+   "uml-id": "_TNk0IfaSEeaW9u5N6usiTA",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel/CoreModel.uml#_8SXNjj-HEeaRI-H69PghuA",
+   "order-number": 1,
+   "is-read-only": false,
+   "is-key": 1,
+   "uml-name": "_holder"
+  },
+  "holder-capability": {
+   "id": "holder-capability",
+   "uml-id": "_gtTvsPaSEeaW9u5N6usiTA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "HolderCapability"
+  },
+  "holder-configuration": {
+   "id": "holder-configuration",
+   "uml-id": "_g8TN8PaSEeaW9u5N6usiTA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "HolderConfiguration"
+  },
+  "holder-status": {
+   "id": "holder-status",
+   "uml-id": "_hDSmwPaSEeaW9u5N6usiTA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "HolderStatus"
+  },
+  "holder-current-problems": {
+   "id": "holder-current-problems",
+   "uml-id": "_hJQE0PaSEeaW9u5N6usiTA",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "HolderCurrentProblems"
+  },
+  "connector-pac": {
+   "id": "connector-pac",
+   "uml-id": "_444DsRd_EeegALpYen9G6g",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "Connector_Pac"
+  },
+  "connector": {
+   "id": "connector",
+   "uml-id": "_eDZ5QBeDEeegALpYen9G6g",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel/CoreModel.uml#_8SXNcD-HEeaRI-H69PghuA",
+   "order-number": 1,
+   "is-read-only": false,
+   "is-key": 1,
+   "uml-name": "_connector"
+  },
+  "connector-capability": {
+   "id": "connector-capability",
+   "uml-id": "_444Dtxd_EeegALpYen9G6g",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "ConnectorCapability"
+  },
+  "connector-configuration": {
+   "id": "connector-configuration",
+   "uml-id": "_444Duhd_EeegALpYen9G6g",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "ConnectorConfiguration"
+  },
+  "connector-status": {
+   "id": "connector-status",
+   "uml-id": "_444Dvxd_EeegALpYen9G6g",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "ConnectorStatus"
+  },
+  "connector-current-problems": {
+   "id": "connector-current-problems",
+   "uml-id": "_444DwBd_EeegALpYen9G6g",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "ConnectorCurrentProblems"
+  },
+  "remote-end-point": {
+   "id": "remote-end-point",
+   "uml-id": "_RDCPsBeCEeegALpYen9G6g",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 2,
+   "is-read-only": false,
+   "description": [
+    "A network wide identifier of the remote connector. The value is used for topology discovery. Please see also ConnectorStatus::localEndPoint."
+   ],
+   "uml-name": "remoteEndPoint",
+   "controlType": "text"
+  },
+  "local-end-point": {
+   "id": "local-end-point",
+   "uml-id": "_NZGKABeBEeegALpYen9G6g",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "A network wide global identifier of the this connector, which can be used to discover the physical connectivitiy. The value should contain the network element name, because the network element software can assume that the network element name is unique in the network. The value should be formated: <connector:uuid>@<network-element-name> Please see also ConnectorConfiguration::remoteEndPoint"
+   ],
+   "uml-name": "localEndPoint",
+   "controlType": "text"
+  },
+  "current-problem-type": {
+   "id": "current-problem-type",
+   "uml-id": "_TBaooPasEeaW9u5N6usiTA",
+   "uml-type": "uml:DataType",
+   "uml-name": "CurrentProblemType"
+  },
+  "problem-name": {
+   "id": "problem-name",
+   "uml-id": "_0XQ-UvmyEeaOH6heSczBpQ",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": true,
+   "description": [
+    "Name of the alarm according capability::supportedAlarms."
+   ],
+   "uml-name": "problemName",
+   "controlType": "text"
+  },
+  "network-element-current-problem-type": {
+   "id": "network-element-current-problem-type",
+   "uml-id": "_0XQ-UPmyEeaOH6heSczBpQ",
+   "uml-type": "uml:DataType",
+   "uml-name": "NetworkElementCurrentProblemType"
+  },
+  "object-reference": {
+   "id": "object-reference",
+   "uml-id": "_BW8g0PmzEeaOH6heSczBpQ",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 2,
+   "is-read-only": true,
+   "description": [
+    "An explaining string of the related object class. This is necesseary, because the current problem list of the NetworkElement object class acts as a container for all alarms, where its object classes are not modeled."
+   ],
+   "uml-name": "objectReference",
+   "controlType": "text"
+  },
+  "problem-severity-type": {
+   "id": "problem-severity-type",
+   "uml-id": "_rvDAAPasEeaW9u5N6usiTA",
+   "uml-type": "uml:DataType",
+   "uml-name": "ProblemSeverityType"
+  },
+  "problem-type-name": {
+   "id": "problem-type-name",
+   "uml-id": "_rvDAAfasEeaW9u5N6usiTA",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
+   "order-number": 1,
+   "is-read-only": false,
+   "is-key": 1,
+   "description": [
+    "Name of the alarm according to Capability::supportedAlarms"
+   ],
+   "uml-name": "problemTypeName",
+   "controlType": "text"
+  },
+  "7-h-zc-e-pm3-eea-oh6-he-scz-bp-q": {
+   "id": "7-h-zc-e-pm3-eea-oh6-he-scz-bp-q",
+   "uml-id": "_7HZcEPm3EeaOH6heSczBpQ",
+   "enum": [
+    "DONE",
+    "PROCESSING"
+   ],
+   "is-read-only": false,
+   "uml-name": "_7HZcEPm3EeaOH6heSczBpQ"
+  }
+ }
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.yin.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.yin.json
new file mode 100755
index 0000000..ae603d5
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.yin.json
@@ -0,0 +1,79 @@
+{
+	"module": {
+		"name": "onf-core-model-conditional-packages",
+		"onf-core-model-conditional-packages": {
+			"equipment-pac": {
+				"type": "list",
+				"key": "equipment",
+				"equipment-capability": {
+					"name": "equipment-capability",
+					"local-name": "capability",
+					"type": "container"
+				},
+				"equipment-configuration": {
+					"name": "equipment-configuration",
+					"local-name": "configuration",
+					"type": "container"
+				},
+				"equipment-status": {
+					"name": "equipment-status",
+					"local-name": "status",
+					"type": "container"
+				},
+				"equipment-current-problems": {
+					"name": "equipment-current-problems",
+					"local-name": "current-problems",
+					"type": "container"
+				}
+			},
+			"holder-pac": {
+				"type": "list",
+				"key": "holder",
+				"holder-capability": {
+					"name": "holder-capability",
+					"local-name": "capability",
+					"type": "container"
+				},
+				"holder-configuration": {
+					"name": "holder-configuration",
+					"local-name": "configuration",
+					"type": "container"
+				},
+				"holder-status": {
+					"name": "holder-status",
+					"local-name": "status",
+					"type": "container"
+				},
+				"holder-current-problems": {
+					"name": "holder-current-problems",
+					"local-name": "current-problems",
+					"type": "container"
+				}
+			},
+			"connector-pac": {
+				"type": "list",
+				"key": "connector",
+				"connector-capability": {
+					"name": "connector-capability",
+					"local-name": "capability",
+					"type": "container"
+				},
+				"connector-configuration": {
+					"name": "connector-configuration",
+					"local-name": "configuration",
+					"type": "container"
+				},
+				"connector-status": {
+					"name": "connector-status",
+					"local-name": "status",
+					"type": "container"
+				},
+				"connector-current-problems": {
+					"name": "connector-current-problems",
+					"local-name": "current-problems",
+					"type": "container"
+				}
+			}
+		}
+	}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.schema-information.json
new file mode 100644
index 0000000..50a8d3b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.schema-information.json
@@ -0,0 +1,76 @@
+{
+ "schema-information": {
+  "ethernet-pac": {
+   "id": "ethernet-pac",
+   "uml-id": "_fytUABOvEeeV4YL-goyoXw",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "Ethernet_Pac"
+  },
+  "layer-protocol": {
+   "id": "layer-protocol",
+   "uml-id": "_D0ijgBOwEeeV4YL-goyoXw",
+   "uml-type": "ownedAttribute",
+   "type": "../OnfModel/CoreModel.uml#_gROecFYXEeOVGaP4lO41SQ",
+   "order-number": 1,
+   "is-read-only": false,
+   "is-key": 1,
+   "uml-name": "_layerProtocol"
+  },
+  "ethernet-capability": {
+   "id": "ethernet-capability",
+   "uml-id": "_1ukHUBOvEeeV4YL-goyoXw",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "EthernetCapability"
+  },
+  "ethernet-configuration": {
+   "id": "ethernet-configuration",
+   "uml-id": "_mZ64kBOvEeeV4YL-goyoXw",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "EthernetConfiguration"
+  },
+  "ethernet-status": {
+   "id": "ethernet-status",
+   "uml-id": "_3WQd4BOvEeeV4YL-goyoXw",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "EthernetStatus"
+  },
+  "ethernet-current-problems": {
+   "id": "ethernet-current-problems",
+   "uml-id": "_-VkZYBOvEeeV4YL-goyoXw",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "EthernetCurrentProblems"
+  },
+  "ethernet-current-performance": {
+   "id": "ethernet-current-performance",
+   "uml-id": "_4nyXMBOvEeeV4YL-goyoXw",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "EthernetCurrentPerformance"
+  },
+  "ethernet-historical-performances": {
+   "id": "ethernet-historical-performances",
+   "uml-id": "_A2670BOwEeeV4YL-goyoXw",
+   "uml-type": "uml:Class",
+   "is-read-only": false,
+   "uml-name": "EthernetHistoricalPerformances"
+  },
+  "vlan-id": {
+   "id": "vlan-id",
+   "uml-id": "_14axcBOwEeeV4YL-goyoXw",
+   "uml-type": "ownedAttribute",
+   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
+   "order-number": 1,
+   "is-read-only": false,
+   "description": [
+    "value = 0: frames on ingress must be untagged, frames on egress get untagged; value = any other positive integer < 4096: frames on ingress must be tagged with this VLAN ID, frames on egress either already have or get this VLAN ID attached;"
+   ],
+   "uml-name": "vlanId",
+   "controlType": "number"
+  }
+ }
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.yin.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.yin.json
new file mode 100755
index 0000000..67cedf4
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.yin.json
@@ -0,0 +1,41 @@
+{
+	"module": {
+		"name": "onf-ethernet-conditional-packages",
+		"onf-ethernet-conditional-packages": {
+			"ethernet-pac": {
+				"type": "list",
+				"key": "layer-protocol",
+				"ethernet-capability": {
+					"name": "ethernet-capability",
+					"local-name": "capability",
+					"type": "container"
+				},
+				"ethernet-configuration": {
+					"name": "ethernet-configuration",
+					"local-name": "configuration",
+					"type": "container"
+				},
+				"ethernet-status": {
+					"name": "ethernet-status",
+					"local-name": "status",
+					"type": "container"
+				},
+				"ethernet-current-problems": {
+					"name": "ethernet-current-problems",
+					"local-name": "current-problems",
+					"type": "container"
+				},
+				"ethernet-current-performance": {
+					"name": "ethernet-current-performance",
+					"local-name": "current-performance",
+					"type": "container"
+				},
+				"ethernet-historical-performances": {
+					"name": "ethernet-historical-performances",
+					"local-name": "historical-performances",
+					"type": "container"
+				}
+			}
+		}
+	}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/onf-ptp-dataset.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/onf-ptp-dataset.schema-information.json
new file mode 100644
index 0000000..5c6e41a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/onf-ptp-dataset.schema-information.json
@@ -0,0 +1,435 @@
+{
+    "schema-information": {
+        "instance-number": {
+            "id": "instance-number",
+            "type": "uint16",
+            "order-number": 1,
+            "is-read-only": true,
+            "description": ["There is only one clock per device in the 4th PoC - value 1 should be used as instance-number."]
+        },
+        "two-step-flag": {
+            "id": "two-step-flag",
+            "type": "boolean",
+            "order-number": 80,
+            "is-read-only": true,
+            "description": ["Indicates whether PTP clock is a two-step clock"]
+        },
+        "clock-quality": {
+            "id": "clock-quality",
+            "type": "",
+            "order-number": 6,
+            "is-read-only": true,
+            "description": [""]
+        },
+        "clock-class": {
+            "id": "clock-class",
+            "type": "",
+            "order-number": 7,
+            "is-read-only": true,
+            "description": ["Clock Class acc. to IEEE 1588-2008, 7.6.2.4 and ITU-T G.8275.1, 6.4"]
+        },
+        "clock-accuracy": {
+            "id": "clock-accuracy",
+            "type": "",
+            "order-number": 8,
+            "is-read-only": true,
+            "description": ["Clock accuracy acc. to IEEE 1588-2008, 7.6.2.5 and ITU-T G.8275.1, 6.3.5"]
+        },
+        "offset-scaled-log-variance": {
+            "id": "offset-scaled-log-variance",
+            "type": "",
+            "order-number": 9,
+            "is-read-only": true,
+            "description": ["Offset of scaled log variance acc. to IEEE 1588-2008, 7.6.3.5 and ITU-T G.8275.1, 6.3.5"]
+        },
+        "priority1": {
+            "id": "priority1",
+            "type": "number",
+            "min": 0,
+            "max": 255,
+            "order-number": 10,
+            "is-read-only": true,
+            "description": ["Priority 1 acc. to IEEE 1588-2008, 7.6.2.2"]
+        },
+        "priority2": {
+            "id": "priority2",
+            "type": "number",
+            "min": 0,
+            "max": 255,
+            "order-number": 11,
+            "is-read-only": false,
+            "description": ["Priority 2 acc. to IEEE 1588-2008, 7.6.2.3"]
+        },
+        "domain-number": {
+            "id": "domain-number",
+            "type": "number",
+            "min": 24,
+            "max": 43,
+            "order-number": 12,
+            "is-read-only": false,
+            "description": ["PTP domain number acc. to IEEE 1588-2008, 7.1. See ptpDS.domainNumber."]
+        },
+        "slave-only": {
+            "id": "slave-only",
+            "type": "boolean",
+            "order-number": 81,
+            "is-read-only": false,
+            "description": ["Indicates whether PTP clock may only operate as SC. See IEEE 1588-2008, 9.2."]
+        },
+        "current-ds": {
+            "id": "current-ds",
+            "type": "",
+            "order-number": 14,
+            "is-read-only": true,
+            "description": [""]
+        },
+        "steps-removed": {
+            "id": "steps-removed",
+            "type": "",
+            "order-number": 15,
+            "is-read-only": true,
+            "description": ["Number of communication paths traversed between local clock and GM"]
+        },
+        "offset-from-master": {
+            "id": "offset-from-master",
+            "type": "",
+            "order-number": 16,
+            "is-read-only": true,
+            "unit": "ns*2^16",
+            "description": ["Time off-set from master"]
+        },
+        "mean-path-delay": {
+            "id": "mean-path-delay",
+            "type": "",
+            "order-number": 17,
+            "is-read-only": true,
+            "unit": "ns*2^16",
+            "description": ["Mean propagation time between master and slave"]
+        },
+        "parrent-ds": {
+            "id": "parrent-ds",
+            "type": "",
+            "order-number": 18,
+            "is-read-only": true,
+            "description": [""]
+        },
+        "parent-port-identity": {
+            "id": "parent-port-identity",
+            "type": "",
+            "order-number": 19,
+            "is-read-only": true,
+            "description": [""]
+        },
+        "parent-stats": {
+            "id": "parent-stats",
+            "type": "",
+            "order-number": 22,
+            "is-read-only": true,
+            "description": ["Indicates whether there are valid parent stats."]
+        },
+        "observed-parent-offset-scaled-log-variance": {
+            "id": "observed-parent-offset-scaled-log-variance",
+            "type": "",
+            "order-number": 23,
+            "is-read-only": true,
+            "description": ["Estimate of parent's clock PTP variance as observed by slave clock acc. to IEEE 1588-2008, 7.6.4.4."]
+        },
+        "observed-parent-clock-phase-change-rate": {
+            "id": "observed-parent-clock-phase-change-rate",
+            "type": "",
+            "order-number": 24,
+            "is-read-only": true,
+            "description": ["Estimate of parent's clock PTP phase change rate as observed by slave clock acc. to IEEE 1588-2008, 7.6.4.4."]
+        },
+        "grandmaster-identity": {
+            "id": "grandmaster-identity",
+            "type": "",
+            "order-number": 25,
+            "is-read-only": true,
+            "description": ["Grandmaster clock ID acc. to IEEE 1588-2008, 7.6.2.1"]
+        },
+        "grandmaster-clock-quality": {
+            "id": "grandmaster-clock-quality",
+            "type": "",
+            "order-number": 26,
+            "is-read-only": true,
+            "description": [""]
+        },
+        "grandmaster-priority1": {
+            "id": "grandmaster-priority1",
+            "type": "",
+            "order-number": 30,
+            "is-read-only": true,
+            "description": ["Grandmaster's priority 1 acc. to IEEE 1588-2008, 7.6.2.2"]
+        },
+        "grandmaster-priority2": {
+            "id": "grandmaster-priority2",
+            "type": "",
+            "order-number": 31,
+            "is-read-only": true,
+            "description": ["Grandmaster's priority 2 acc. to IEEE 1588-2008, 7.6.2.3"]
+        },
+        "time-properties-ds": {
+            "id": "time-properties-ds",
+            "type": "",
+            "order-number": 32,
+            "is-read-only": true,
+            "description": [""]
+        },
+        "current-utc-offset-valid": {
+            "id": "current-utc-offset-valid",
+            "type": "",
+            "order-number": 33,
+            "is-read-only": true,
+            "description": ["Indicates wheterh current UTC offset is correct."]
+        },
+        "current-utc-offset": {
+            "id": "current-utc-offset",
+            "type": "",
+            "order-number": 34,
+            "is-read-only": true,
+            "description": ["Offset between TAI and UTC acc. to IEEE 1588-2008, 7.2.3"]
+        },
+        "leap59": {
+            "id": "leap59",
+            "type": "",
+            "order-number": 35,
+            "is-read-only": true,
+            "description": ["Inidcates that last minute of current UTC day has 59 seconds."]
+        },
+        "leap61": {
+            "id": "leap61",
+            "type": "",
+            "order-number": 36,
+            "is-read-only": true,
+            "description": ["Inidcates that last minute of current UTC day has 61 seconds."]
+        },
+        "time-tracable": {
+            "id": "time-tracable",
+            "type": "",
+            "order-number": 37,
+            "is-read-only": true,
+            "description": ["Indicates that current UTC offset and timescale are traceable to a PRC"]
+        },
+        "frequency-tracable": {
+            "id": "frequency-tracable",
+            "type": "",
+            "order-number": 38,
+            "is-read-only": true,
+            "description": ["Indicates that frequency determining timescale is traceable to a PRC"]
+        },
+        "ptp-timescale": {
+            "id": "ptp-timescale",
+            "type": "",
+            "order-number": 39,
+            "is-read-only": true,
+            "description": ["Indicates thet timescale of grandmaster clock is PTP."]
+        },
+        "time-source": {
+            "id": "time-source",
+            "type": "",
+            "order-number": 40,
+            "is-read-only": true,
+            "description": ["Time source used by grandmaster. See IEEE 1588-2008, 7.6.2.6."]
+        },
+        "port-state": {
+            "id": "port-state",
+            "type": "",
+            "order-number": 45,
+            "is-read-only": true,
+            "description": ["State of this local port"]
+        },
+        "log-min-delay-req-interval": {
+            "id": "log-min-delay-req-interval",
+            "type": "",
+            "order-number": 46,
+            "is-read-only": true,
+            "description": ["Minimum permitted mean time interval between successive Delay_Req messages"]
+        },
+        "peer-mean-path-delay": {
+            "id": "peer-mean-path-delay",
+            "type": "",
+            "order-number": 47,
+            "is-read-only": true,
+            "unit": "ns*2^16",
+            "description": ["Not applicable with this profile"]
+        },
+        "log-announce-interval": {
+            "id": "log-announce-interval",
+            "type": "",
+            "order-number": 48,
+            "is-read-only": true,
+            "description": ["Mean time interval between successive Announce messages"]
+        },
+        "announce-receipt-timeout": {
+            "id": "announce-receipt-timeout",
+            "type": "",
+            "order-number": 49,
+            "is-read-only": true,
+            "description": ["Number of announce intervals w/o announce message before timeout acc. to IEEE 1588-2008, 7.7.3.1."]
+        },
+        "log-sync-interval": {
+            "id": "log-sync-interval",
+            "type": "",
+            "order-number": 50,
+            "is-read-only": true,
+            "description": ["Mean SyncInterval for multicast messages"]
+        },
+        "delay-mechanism": {
+            "id": "delay-mechanism",
+            "type": "string",
+            "controlType": "text",
+            "order-number": 51,
+            "is-read-only": true,
+            "description": ["Delay mechanism acc. to IEEE 1588-2008, 8.2.5.4.4."]
+        },
+        "version-number": {
+            "id": "version-number",
+            "type": "",
+            "order-number": 53,
+            "is-read-only": true,
+            "description": ["PTP version used on this port"]
+        },
+        "transparent-clock-default-ds": {
+            "id": "transparent-clock-default-ds",
+            "type": "",
+            "order-number": 54,
+            "is-read-only": true,
+            "description": [""]
+        },
+        "number-ports": {
+            "id": "number-ports",
+            "type": "",
+            "order-number": -6,
+            "is-read-only": true,
+            "description": ["Number of ports of the device"]
+        },
+        "primary-domain": {
+            "id": "primary-domain",
+            "type": "",
+            "order-number": 58,
+            "is-read-only": true,
+            "description": ["Domain number of primary syntonization domain acc. to IEEE 1588-2008, 10.1"]
+        },
+        "transparent-clock-port-ds-list": {
+            "id": "transparent-clock-port-ds-list",
+            "type": "",
+            "order-number": 59,
+            "is-read-only": true,
+            "description": [""]
+        },
+        "log-min-pdelay-req-interval": {
+            "id": "log-min-pdelay-req-interval",
+            "type": "",
+            "order-number": 63,
+            "is-read-only": true,
+            "description": ["Not applicable with this profile"]
+        },
+        "faulty-flag": {
+            "id": "faulty-flag",
+            "type": "",
+            "order-number": 64,
+            "is-read-only": true,
+            "description": ["Indicates whether port is faulty."]
+        },
+        "default-ds": {
+            "id": "default-ds",
+            "type": "",
+            "order-number": 68,
+            "is-read-only": true,
+            "description": [""]
+        },
+        "local-priority": {
+            "id": "local-priority",
+            "type": "number",
+            "min": 1,
+            "max": 255,
+            "order-number": 69,
+            "is-read-only": true,
+            "description": ["See ITU-T G.8275.1, 6.3.2."]
+        },
+        "max-steps-removed": {
+            "id": "max-steps-removed",
+            "type": "number",
+            "min": 1,
+            "max": 255,
+            "order-number": 70,
+            "is-read-only": true,
+            "description": ["See ITU-T G.8275.1, 6.3."]
+        },
+        "port-ds-list": {
+            "id": "port-ds-list",
+            "type": "",
+            "order-number": 73,
+            "is-read-only": true,
+            "description": [""]
+        },
+        "clock-identity": {
+            "id": "clock-identity",
+            "type": "",
+            "order-number": -10,
+            "is-read-only": true,
+            "description": ["ID of the local clock"]
+        },
+        "port-number": {
+            "id": "port-number",
+            "type": "",
+            "order-number": 76,
+            "is-read-only": true,
+            "description": ["Port number of this port on the local clock"]
+        },
+        "onf-ptp-dataset:master-only": {
+            "id": "onf-ptp-dataset:master-only",
+            "type": "boolean",
+            "order-number": 83,
+            "is-read-only": false,
+            "description": ["Indicates that port can only be a master."]
+        },
+        "onf-ptp-dataset:local-priority": {
+            "id": "onf-ptp-dataset:local-priority",
+            "type": "number",
+            "min":1,
+            "max":255,
+            "order-number": -2,
+            "is-read-only": false,
+            "description": ["Local priority as used for Alternate BMCA. See ITU-T G.8275.1, 6.3.2."]
+        },
+        "onf-ptp-dataset:designated-enabled": {
+            "id": "onf-ptp-dataset:designated-enabled",
+            "type": "boolean",
+            "order-number": 82,
+            "is-read-only": false,
+            "description": ["A PTP Port needs to be enabled by management acc. to IEEE 1588-2008, 9.2."]
+        },
+        "onf-ptp-dataset:delay-asymmetry": {
+            "id": "onf-ptp-dataset:delay-asymmetry",
+            "type": "number",
+            "order-number": 80,
+            "is-read-only": true,
+            "description": ["Known path asymmetry in ns acc. to IEEE 1588-2008, 7.4.2."]
+        },
+        "onf-ptp-dataset:logical-termination-point": {
+            "id": "onf-ptp-dataset:logical-termination-point ",
+            "type": "string",
+            "order-number": 81,
+            "is-read-only": true,
+            "description": [""]
+        },
+        "onf-ptp-dataset:multicast-mac-address": {
+            "id": "onf-ptp-dataset:multicast-mac-address",
+            "type": "",
+            "order-number": -5,
+            "is-read-only": true,
+            "description": ["In 4th PoC the value is fixed."]
+        },
+        "onf-ptp-dataset:max-steps-removed": {
+            "id": "onf-ptp-dataset:max-steps-removed",
+            "type": "number",
+            "min":1,
+            "max":255,
+            "order-number": 70,
+            "is-read-only": false,
+            "description": ["See ITU-T G.8275.1, 6.3."]
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/otn-odu-conditional-packages.yin.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/otn-odu-conditional-packages.yin.json
new file mode 100644
index 0000000..3091cc0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/otn-odu-conditional-packages.yin.json
@@ -0,0 +1,75 @@
+{
+	"module": {
+		"name": "otn-odu-conditional-packages",
+		"otn-odu-conditional-packages": {
+			"otn-odu-connection-pac": {
+				"type": "list",
+				"key": "layer-protocol",
+				"otn-odu-connection-capability": {
+					"name": "otn-odu-connection-capability",
+					"local-name": "capability",
+					"type": "container"
+				},
+				"otn-odu-connection-configuration": {
+					"name": "otn-odu-connection-configuration",
+					"local-name": "configuration",
+					"type": "container"
+				},
+				"otn-odu-connection-status": {
+					"name": "otn-odu-connection-status",
+					"local-name": "status",
+					"type": "container"
+				},
+				"otn-odu-connection-current-problems": {
+					"name": "otn-odu-connection-current-problems",
+					"local-name": "current-problems",
+					"type": "container"
+				},
+				"otn-odu-connection-current-performance": {
+					"name": "otn-odu-connection-current-performance",
+					"local-name": "current-performance",
+					"type": "container"
+				},
+				"otn-odu-connection-historical-performances": {
+					"name": "otn-odu-connection-historical-performances",
+					"local-name": "historical-performances",
+					"type": "container"
+				}
+			},
+			"otn-odu-termination-pac": {
+				"type": "list",
+				"key": "layer-protocol",
+				"otn-odu-termination-capability": {
+					"name": "otn-odu-termination-capability",
+					"local-name": "capability",
+					"type": "container"
+				},
+				"otn-odu-termination-configuration": {
+					"name": "otn-odu-termination-configuration",
+					"local-name": "configuration",
+					"type": "container"
+				},
+				"otn-odu-termination-status": {
+					"name": "otn-odu-termination-status",
+					"local-name": "status",
+					"type": "container"
+				},
+				"otn-odu-termination-current-problems": {
+					"name": "otn-odu-termination-current-problems",
+					"local-name": "current-problems",
+					"type": "container"
+				},
+				"otn-odu-termination-current-performance": {
+					"name": "otn-odu-termination-current-performance",
+					"local-name": "current-performance",
+					"type": "container"
+				},
+				"otn-odu-termination-historical-performances": {
+					"name": "otn-odu-termination-historical-performances",
+					"local-name": "historical-performances",
+					"type": "container"
+				}
+			}
+		}
+	}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-09-24.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-09-24.schema-information.json
new file mode 100644
index 0000000..381dd77
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-09-24.schema-information.json
@@ -0,0 +1,168 @@
+{ "schama-information": {
+
+"photonic-media": {
+"id": "photonic-media", 
+"is-read-only": false, 
+"description": ["This module contains a collection of YANG definitions for managing Optical networks. This model is for vendor agnostic management of Optical Transport."]
+},
+"non-alarmed": {
+"id": "non-alarmed", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"warning": {
+"id": "warning", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"minor": {
+"id": "minor", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"major": {
+"id": "major", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"critical": {
+"id": "critical", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"severity-type": {
+"id": "severity-type", 
+"is-read-only": false, 
+"description": ["According to ITU-T M.3160"]
+},
+"fec-properties-pac": {
+"id": "fec-properties-pac", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-interface-performance-type-g": {
+"id": "otsi-interface-performance-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"performance-data": {
+"id": "performance-data", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-interface-current-performance-type-g": {
+"id": "otsi-interface-current-performance-type-g", 
+"is-read-only": false, 
+"description": ["Turns performance information into current performance information by inheriting from TAPI OAM current data."]
+},
+"performance-data": {
+"id": "performance-data", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-interface-historical-performance-type-g": {
+"id": "otsi-interface-historical-performance-type-g", 
+"is-read-only": false, 
+"description": ["Turns performance information into historical performance information by inheriting from TAPI OAM History data."]
+},
+"current-performance-data-list": {
+"id": "current-performance-data-list", 
+"is-read-only": false, 
+"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."]
+},
+"otsi-interface-current-performance-g": {
+"id": "otsi-interface-current-performance-g", 
+"is-read-only": false, 
+"description": ["Aggregated performance information of the air interface at a particular moment."]
+},
+"historical-performance-data-list": {
+"id": "historical-performance-data-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-interface-historical-performances-g": {
+"id": "otsi-interface-historical-performances-g", 
+"is-read-only": false, 
+"description": ["Aggregated performance information of the air interface for a pre-defined measurement interval."]
+},
+"problem-name": {
+"id": "problem-name", 
+"is-read-only": false, 
+"description": ["Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms"]
+},
+"otsi-interface-current-problem-type-g": {
+"id": "otsi-interface-current-problem-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"current-problem-list": {
+"id": "current-problem-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-interface-current-problems-g": {
+"id": "otsi-interface-current-problems-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"layer-protocol": {
+"id": "layer-protocol", 
+"is-read-only": false, 
+"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"]
+},
+"otsi-interface-capability": {
+"id": "otsi-interface-capability", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-interface-configuration": {
+"id": "otsi-interface-configuration", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-interface-status": {
+"id": "otsi-interface-status", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-interface-current-problems": {
+"id": "otsi-interface-current-problems", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-interface-current-performance": {
+"id": "otsi-interface-current-performance", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-interface-historical-performances": {
+"id": "otsi-interface-historical-performances", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-interface-pac": {
+"id": "otsi-interface-pac", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"sequence-number": {
+"id": "sequence-number", 
+"is-read-only": false, 
+"description": ["Unique sequence number of the current problem object."]
+},
+"time-stamp": {
+"id": "time-stamp", 
+"is-read-only": false, 
+"description": ["Time and date of the problem."]
+},
+"problem-severity": {
+"id": "problem-severity", 
+"is-read-only": false, 
+"description": ["Severity of the alarm."]
+},
+"otsi-current-problem-g": {
+"id": "otsi-current-problem-g", 
+"is-read-only": false, 
+"description": ["none"]
+}}
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-0924.yin.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-0924.yin.json
new file mode 100644
index 0000000..11bf0f1
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-0924.yin.json
@@ -0,0 +1,41 @@
+{
+	"module": {
+		"name": "photonic-media",
+		"photonic-media": {
+			"otsi-interface-pac": {
+				"type": "list",
+				"key": "layer-protocol",
+				"otsi-interface-capability": {
+					"name": "otsi-interface-capability",
+					"local-name": "capability",
+					"type": "container"
+				},
+				"otsi-interface-configuration": {
+					"name": "otsi-interface-configuration",
+					"local-name": "configuration",
+					"type": "container"
+				},
+				"otsi-interface-status": {
+					"name": "otsi-interface-status",
+					"local-name": "status",
+					"type": "container"
+				},
+				"otsi-interface-current-problems": {
+					"name": "otsi-interface-current-problems",
+					"local-name": "current-problems",
+					"type": "container"
+				},
+				"otsi-interface-current-performance": {
+					"name": "otsi-interface-current-performance",
+					"local-name": "current-performance",
+					"type": "container"
+				},
+				"otsi-interface-historical-performances": {
+					"name": "otsi-interface-historical-performances",
+					"local-name": "historical-performances",
+					"type": "container"
+				}
+			}
+		}
+	}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/plannedNetworkElements.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/plannedNetworkElements.json
new file mode 100644
index 0000000..576ca3a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/plannedNetworkElements.json
@@ -0,0 +1,46 @@
+{"planned-network-elements":{
+    
+"ADVA-EthSwitch-1":{"id":"ADVA-EthSwitch-1","name":"ADVA-EthSwitch-1","siteRef":"Berlin-north-east","radioType":"FSP 150"},
+"ADVA-EthSwitch-2":{"id":"ADVA-EthSwitch-2","name":"ADVA-EthSwitch-2","siteRef":"Berlin-south","radioType":"FSP 150"},
+"ADVA-ROADM-A":{"id":"ADVA-ROADM-A","name":"ADVA-ROADM-A","siteRef":"Berlin-north-east","radioType":"FSP 3000R7"},
+"ADVA-ROADM-B":{"id":"ADVA-ROADM-B","name":"ADVA-ROADM-B","siteRef":"Berlin-south","radioType":"FSP 3000R7"},
+"ADVA-ROADM-C":{"id":"ADVA-ROADM-C","name":"ADVA-ROADM-C","siteRef":"Berlin-north-west","radioType":"FSP 3000R7"},
+"Nokia-eNodeB-1":{"id":"Nokia-eNodeB-1","name":"Nokia-eNodeB-1","siteRef":"Berlin-south-west","radioType":"Nokia-eNodeB-1"},
+
+"ZTE-24":{"id":"ZTE-24","name":"ZTE-24","siteRef":"Bejing","radioType":"ZXMW NR8120A"},
+"ZTE-81":{"id":"ZTE-81","name":"ZTE-81","siteRef":"Tianjin","radioType":"ZXMW NR8120A"},
+"SIAE-S1":{"id":"SIAE-S1","name":"SIAE-S1","siteRef":"Milan","radioType":"AGS-20"},
+"SIAE-S2":{"id":"SIAE-S2","name":"SIAE-S2","siteRef":"Malpensa","radioType":"AGS-20"},
+"DragonWave-A1":{"id":"DragonWave-A1","name":"DragonWave-A1","siteRef":"Ottawa-Center","radioType":"Horizon Compact Plus"},
+"DragonWave-Z1":{"id":"DragonWave-Z1","name":"DragonWave-Z1","siteRef":"Ottawa-Airport","radioType":"Horizon Compact Plus"},
+"DragonWave-A2":{"id":"DragonWave-A2","name":"DragonWave-A2","siteRef":"Ottawa-Airport","radioType":"Horizon Compact Plus"},
+"DragonWave-Z2":{"id":"DragonWave-Z2","name":"DragonWave-Z2","siteRef":"Ottawa-south-west","radioType":"Horizon Compact Plus"},
+"DragonWave-A3":{"id":"DragonWave-A3","name":"DragonWave-A3","siteRef":"Ottawa-south-west","radioType":"Horizon Quantum"},
+"DragonWave-Z3":{"id":"DragonWave-Z3","name":"DragonWave-Z3","siteRef":"Ottawa-Center","radioType":"Horizon Quantum"},
+"Intracom-A":{"id":"Intracom-A","name":"Intracom-A","siteRef":"Peania ","radioType":"OSDR-13H13"},
+"Intracom-Z":{"id":"Intracom-Z","name":"Intracom-Z","siteRef":"Athens","radioType":"OSDR-13H13"},
+"DragonWave-A4":{"id":"DragonWave-A4","name":"DragonWave-A4","siteRef":"Middletown-north","radioType":"Horizon Quantum"},
+"DragonWave-Z4":{"id":"DragonWave-Z4","name":"DragonWave-Z4","siteRef":"Middletown-south-east","radioType":"Horizon Quantum"},
+"Nokia-61":{"id":"Nokia-61","name":"Nokia-61","siteRef":"Middletown-south-east","radioType":"Nokia 7.1"},
+"Nokia-62":{"id":"Nokia-62","name":"Nokia-62","siteRef":"Middletown-south-west","radioType":"Nokia 7.1"},
+"Ericsson-23":{"id":"Ericsson-23","name":"Ericsson-23","siteRef":"Middletown-south-west","radioType":"MINI-LINK 6352"},
+"Ericsson-24":{"id":"Ericsson-24","name":"Ericsson-24","siteRef":"Middletown-north","radioType":"MINI-LINK 6352"},
+"CommScope-DAS":{"id":"CommScope-DAS","name":"CommScope-DAS","siteRef":"owl-north","radioType":"Andrew "},
+"Ericsson-A1":{"id":"Ericsson-A1","name":"Ericsson-A1","siteRef":"owl-north","radioType":"MINI-LINK 6352"},
+"Ericsson-B1":{"id":"Ericsson-B1","name":"Ericsson-B1","siteRef":"owl-north-east","radioType":"MINI-LINK 6352"},
+"Ericsson-A2":{"id":"Ericsson-A2","name":"Ericsson-A2","siteRef":"owl-north-east","radioType":"MINI-LINK 6352"},
+"Ericsson-B2":{"id":"Ericsson-B2","name":"Ericsson-B2","siteRef":"owl-east","radioType":"MINI-LINK 6352"},
+"Ceragon-A1":{"id":"Ceragon-A1","name":"Ceragon-A1","siteRef":"Tel-Aviv","radioType":"Simulator"},
+"Ceragon-Z1":{"id":"Ceragon-Z1","name":"Ceragon-Z1","siteRef":"Tel-Aviv-north","radioType":"Simulator"},
+"Ceragon-A2":{"id":"Ceragon-A2","name":"Ceragon-A2","siteRef":"Bucharest-north","radioType":"Simulator"},
+"Ceragon-Z2":{"id":"Ceragon-Z2","name":"Ceragon-Z2","siteRef":"Politehnica-Bucharest","radioType":"Simulator"},
+"AltioStar-RRH-1":{"id":"AltioStar-RRH-1","name":"AltioStar-RRH-1","siteRef":"Petrol-Bedminster","radioType":"LTE-RRH-44380400"},
+"AltioStar-RRH-2":{"id":"AltioStar-RRH-2","name":"AltioStar-RRH-2","siteRef":"US78/US287","radioType":"LTE-RRH-44380400"},
+"WinLab-RRH-1":{"id":"WinLab-RRH-1","name":"WinLab-RRH-1","siteRef":"owl-south-east","radioType":"WhiteBox"},
+"WinLab-RRH-2":{"id":"WinLab-RRH-2","name":"WinLab-RRH-2","siteRef":"owl-south","radioType":"WhiteBox"},
+"WinLab-RRH-3":{"id":"WinLab-RRH-3","name":"WinLab-RRH-3","siteRef":"owl-south-west","radioType":"WhiteBox"},
+"WinLab-RRH-4":{"id":"WinLab-RRH-4","name":"WinLab-RRH-4","siteRef":"owl-west","radioType":"WhiteBox"},
+"WinLab-RRH-5":{"id":"WinLab-RRH-5","name":"WinLab-RRH-5","siteRef":"owl-north-west","radioType":"WhiteBox"},
+"WinLab-RRH-6":{"id":"WinLab-RRH-6","name":"WinLab-RRH-6","siteRef":"owl-north","radioType":"WhiteBox"}
+
+}}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/site-link.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/site-link.json
new file mode 100644
index 0000000..c3e8110
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/site-link.json
@@ -0,0 +1,73 @@
+{
+  "site-link": {
+"OWL-DC-Prague-DC":{"id":"OWL-DC-Prague-DC","name":"OWL-DC-Prague-DC","siteA":"OWL-DC","siteZ":"Prague-DC","siteNameA":"OWL-DC","siteNameZ":"Prague-DC","length":"6616.552612","azimuthAZ":"48.118867","azimuthZA":"298.029587","type":"data-center-interconnect"},
+"OWL-DC-Berlin-DC":{"id":"OWL-DC-Berlin-DC","name":"OWL-DC-Berlin-DC","siteA":"OWL-DC","siteZ":"Berlin-DC","siteNameA":"OWL-DC","siteNameZ":"Berlin-DC","length":"6429.038709","azimuthAZ":"45.947698","azimuthZA":"296.078746","type":"data-center-interconnect"},
+"Berlin-DC-Berlin-north-east":{"id":"Berlin-DC-Berlin-north-east","name":"Berlin-DC-Berlin-north-east","siteA":"Berlin-DC","siteZ":"Berlin-north-east","siteNameA":"Berlin-DC","siteNameZ":"Berlin-north-east","length":"3.380233","azimuthAZ":"41.694092","azimuthZA":"221.720463","type":"control"},
+"Berlin-DC-Berlin-south":{"id":"Berlin-DC-Berlin-south","name":"Berlin-DC-Berlin-south","siteA":"Berlin-DC","siteZ":"Berlin-south","siteNameA":"Berlin-DC","siteNameZ":"Berlin-south","length":"4.643667","azimuthAZ":"179.964138","azimuthZA":"359.964172","type":"control"},
+"Berlin-DC-Berlin-north-west":{"id":"Berlin-DC-Berlin-north-west","name":"Berlin-DC-Berlin-north-west","siteA":"Berlin-DC","siteZ":"Berlin-north-west","siteNameA":"Berlin-DC","siteNameZ":"Berlin-north-west","length":"5.138948","azimuthAZ":"313.910582","azimuthZA":"133.867146","type":"control"},
+"Prague-DC-Bejing":{"id":"Prague-DC-Bejing","name":"Prague-DC-Bejing","siteA":"Prague-DC","siteZ":"Bejing","siteNameA":"Prague-DC","siteNameZ":"Bejing","length":"7447.977801","azimuthAZ":"54.538202","azimuthZA":"316.994495","type":"control"},
+"Prague-DC-Tianjin":{"id":"Prague-DC-Tianjin","name":"Prague-DC-Tianjin","siteA":"Prague-DC","siteZ":"Tianjin","siteNameA":"Prague-DC","siteNameZ":"Tianjin","length":"7555.330624","azimuthAZ":"54.770138","azimuthZA":"317.494792","type":"control"},
+"Prague-DC-Milan":{"id":"Prague-DC-Milan","name":"Prague-DC-Milan","siteA":"Prague-DC","siteZ":"Milan","siteNameA":"Prague-DC","siteNameZ":"Milan","length":"644.680616","azimuthAZ":"219.303918","azimuthZA":"35.422554","type":"control"},
+"Prague-DC-Malpensa":{"id":"Prague-DC-Malpensa","name":"Prague-DC-Malpensa","siteA":"Prague-DC","siteZ":"Malpensa","siteNameA":"Prague-DC","siteNameZ":"Malpensa","length":"652.094431","azimuthAZ":"222.787408","azimuthZA":"38.559020","type":"control"},
+"Prague-DC-Ottawa-Center":{"id":"Prague-DC-Ottawa-Center","name":"Prague-DC-Ottawa-Center","siteA":"Prague-DC","siteZ":"Ottawa-Center","siteNameA":"Prague-DC","siteNameZ":"Ottawa-Center","length":"6367.273928","azimuthAZ":"303.185800","azimuthZA":"49.712092","type":"control"},
+"Prague-DC-Ottawa-Airport":{"id":"Prague-DC-Ottawa-Airport","name":"Prague-DC-Ottawa-Airport","siteA":"Prague-DC","siteZ":"Ottawa-Airport","siteNameA":"Prague-DC","siteNameZ":"Ottawa-Airport","length":"6330.919511","azimuthAZ":"302.923958","azimuthZA":"49.965269","type":"control"},
+"Prague-DC-Ottawa-south-west":{"id":"Prague-DC-Ottawa-south-west","name":"Prague-DC-Ottawa-south-west","siteA":"Prague-DC","siteZ":"Ottawa-south-west","siteNameA":"Prague-DC","siteNameZ":"Ottawa-south-west","length":"6350.304846","azimuthAZ":"303.180200","azimuthZA":"49.829862","type":"control"},
+"Bejing-Tianjin":{"id":"Bejing-Tianjin","name":"Bejing-Tianjin","siteA":"Bejing","siteZ":"Tianjin","siteNameA":"Bejing","siteNameZ":"Tianjin","length":"109.963655","azimuthAZ":"149.549553","azimuthZA":"329.960966","type":"traffic"},
+"Berlin-north-east-Berlin-south":{"id":"Berlin-north-east-Berlin-south","name":"Berlin-north-east-Berlin-south","siteA":"Berlin-north-east","siteZ":"Berlin-south","siteNameA":"Berlin-north-east","siteNameZ":"Berlin-south","length":"7.511203","azimuthAZ":"197.420857","azimuthZA":"17.394527","type":"traffic"},
+"Berlin-south-Berlin-north-west":{"id":"Berlin-south-Berlin-north-west","name":"Berlin-south-Berlin-north-west","siteA":"Berlin-south","siteZ":"Berlin-north-west","siteNameA":"Berlin-south","siteNameZ":"Berlin-north-west","length":"9.005241","azimuthAZ":"335.704657","azimuthZA":"155.661200","type":"traffic"},
+"Berlin-north-west-Berlin-north-east":{"id":"Berlin-north-west-Berlin-north-east","name":"Berlin-north-west-Berlin-north-east","siteA":"Berlin-north-west","siteZ":"Berlin-north-east","siteNameA":"Berlin-north-west","siteNameZ":"Berlin-north-east","length":"6.040787","azimuthAZ":"99.870133","azimuthZA":"279.939953","type":"traffic"},
+"Ottawa-Airport-Ottawa-south-west":{"id":"Ottawa-Airport-Ottawa-south-west","name":"Ottawa-Airport-Ottawa-south-west","siteA":"Ottawa-Airport","siteZ":"Ottawa-south-west","siteNameA":"Ottawa-Airport","siteNameZ":"Ottawa-south-west","length":"30.774747","azimuthAZ":"280.991574","azimuthZA":"100.716701","type":"traffic"},
+"Ottawa-Center-Ottawa-Airport":{"id":"Ottawa-Center-Ottawa-Airport","name":"Ottawa-Center-Ottawa-Airport","siteA":"Ottawa-Center","siteZ":"Ottawa-Airport","siteNameA":"Ottawa-Center","siteNameZ":"Ottawa-Airport","length":"43.808751","azimuthAZ":"83.558464","azimuthZA":"263.953862","type":"traffic"},
+"Ottawa-south-west-Ottawa-Center":{"id":"Ottawa-south-west-Ottawa-Center","name":"Ottawa-south-west-Ottawa-Center","siteA":"Ottawa-south-west","siteZ":"Ottawa-Center","siteNameA":"Ottawa-south-west","siteNameZ":"Ottawa-Center","length":"16.977148","azimuthAZ":"231.597684","azimuthZA":"51.476879","type":"traffic"},
+"Milan-Malpensa":{"id":"Milan-Malpensa","name":"Milan-Malpensa","siteA":"Milan","siteZ":"Malpensa","siteNameA":"Milan","siteNameZ":"Malpensa","length":"40.038623","azimuthAZ":"296.489417","azimuthZA":"116.160408","type":"traffic"},
+"Berlin-south-Berlin-south-west":{"id":"Berlin-south-Berlin-south-west","name":"Berlin-south-Berlin-south-west","siteA":"Berlin-south","siteZ":"Berlin-south-west","siteNameA":"Berlin-south","siteNameZ":"Berlin-south-west","length":"2.224253","azimuthAZ":"270.013016","azimuthZA":"89.986984","type":"traffic"},
+"Athens-Peania":{"id":"Athens-Peania","name":"Athens-Peania","siteA":"Athens","siteZ":"Peania","siteNameA":"Athens","siteNameZ":"Peania","length":"15.888460","azimuthAZ":"110.077853","azimuthZA":"290.182549","type":"traffic"},
+"Prague-DC-Peania":{"id":"Prague-DC-Peania","name":"Prague-DC-Peania","siteA":"Prague-DC","siteZ":"Peania","siteNameA":"Prague-DC","siteNameZ":"Peania","length":"1544.391815","azimuthAZ":"147.341741","azimuthZA":"333.955286","type":"control"},
+"Prague-DC-Athens":{"id":"Prague-DC-Athens","name":"Prague-DC-Athens","siteA":"Prague-DC","siteZ":"Athens","siteNameA":"Prague-DC","siteNameZ":"Athens","length":"1532.957557","azimuthAZ":"147.756559","azimuthZA":"334.253368","type":"control"},
+"OWL-DC-AT&T-Labs":{"id":"OWL-DC-AT&T-Labs","name":"OWL-DC-AT&T-Labs","siteA":"OWL-DC","siteZ":"AT&T-Labs","siteNameA":"OWL-DC","siteNameZ":"AT&T-Labs","length":"27.561824","azimuthAZ":"106.456393","azimuthZA":"286.658844","type":"data-center-interconnect"},
+"Tel-Aviv-Tel-Aviv-north":{"id":"Tel-Aviv-Tel-Aviv-north","name":"Tel-Aviv-Tel-Aviv-north","siteA":"Tel-Aviv","siteZ":"Tel-Aviv-north","siteNameA":"Tel-Aviv","siteNameZ":"Tel-Aviv-north","length":"8.563466","azimuthAZ":"33.551029","azimuthZA":"213.577785","type":"traffic"},
+"Prague-DC-Tel-Aviv":{"id":"Prague-DC-Tel-Aviv","name":"Prague-DC-Tel-Aviv","siteA":"Prague-DC","siteZ":"Tel-Aviv","siteNameA":"Prague-DC","siteNameZ":"Tel-Aviv","length":"2612.860322","azimuthAZ":"132.178310","azimuthZA":"325.846592","type":"control"},
+"Prague-DC-Tel-Aviv-north":{"id":"Prague-DC-Tel-Aviv-north","name":"Prague-DC-Tel-Aviv-north","siteA":"Prague-DC","siteZ":"Tel-Aviv-north","siteNameA":"Prague-DC","siteNameZ":"Tel-Aviv-north","length":"2609.622822","azimuthAZ":"131.999388","azimuthZA":"325.709247","type":"control"},
+"Bucharest-north-Politehnica-Bucharest":{"id":"Bucharest-north-Politehnica-Bucharest","name":"Bucharest-north-Politehnica-Bucharest","siteA":"Bucharest-north","siteZ":"Politehnica-Bucharest","siteNameA":"Bucharest-north","siteNameZ":"Politehnica-Bucharest","length":"3.117085","azimuthAZ":"237.672480","azimuthZA":"57.649251","type":"traffic"},
+"Prague-DC-Bucharest-north":{"id":"Prague-DC-Bucharest-north","name":"Prague-DC-Bucharest-north","siteA":"Prague-DC","siteZ":"Bucharest-north","siteNameA":"Prague-DC","siteNameZ":"Bucharest-north","length":"1078.751804","azimuthAZ":"121.021694","azimuthZA":"309.618632","type":"control"},
+"Prague-DC-Politehnica-Bucharest":{"id":"Prague-DC-Politehnica-Bucharest","name":"Prague-DC-Politehnica-Bucharest","siteA":"Prague-DC","siteZ":"Politehnica-Bucharest","siteNameA":"Prague-DC","siteNameZ":"Politehnica-Bucharest","length":"1077.789821","azimuthAZ":"121.179995","azimuthZA":"309.751443","type":"control"},
+"AT&T-Labs-Middletown-north":{"id":"AT&T-Labs-Middletown-north","name":"AT&T-Labs-Middletown-north","siteA":"AT&T-Labs","siteZ":"Middletown-north","siteNameA":"AT&T-Labs","siteNameZ":"Middletown-north","length":"2.902164","azimuthAZ":"27.192037","azimuthZA":"207.202193","type":"control"},
+"AT&T-Labs-Middletown-south-east":{"id":"AT&T-Labs-Middletown-south-east","name":"AT&T-Labs-Middletown-south-east","siteA":"AT&T-Labs","siteZ":"Middletown-south-east","siteNameA":"AT&T-Labs","siteNameZ":"Middletown-south-east","length":"3.988925","azimuthAZ":"90.260555","azimuthZA":"270.291084","type":"control"},
+"AT&T-Labs-Middletown-south-west":{"id":"AT&T-Labs-Middletown-south-west","name":"AT&T-Labs-Middletown-south-west","siteA":"AT&T-Labs","siteZ":"Middletown-south-west","siteNameA":"AT&T-Labs","siteNameZ":"Middletown-south-west","length":".382001","azimuthAZ":"164.604183","azimuthZA":"344.604959","type":"control"},
+"Middletown-south-west-Middletown-north":{"id":"Middletown-south-west-Middletown-north","name":"Middletown-south-west-Middletown-north","siteA":"Middletown-south-west","siteZ":"Middletown-north","siteNameA":"Middletown-south-west","siteNameZ":"Middletown-north","length":"3.193888","azimuthAZ":"22.550318","azimuthZA":"202.559698","type":"traffic"},
+"Middletown-north-Middletown-south-east":{"id":"Middletown-north-Middletown-south-east","name":"Middletown-north-Middletown-south-east","siteA":"Middletown-north","siteZ":"Middletown-south-east","siteNameA":"Middletown-north","siteNameZ":"Middletown-south-east","length":"3.721223","azimuthAZ":"134.323008","azimuthZA":"314.343388","type":"traffic"},
+"Middletown-south-east-Middletown-south-west":{"id":"Middletown-south-east-Middletown-south-west","name":"Middletown-south-east-Middletown-south-west","siteA":"Middletown-south-east","siteZ":"Middletown-south-west","siteNameA":"Middletown-south-east","siteNameZ":"Middletown-south-west","length":"3.903206","azimuthAZ":"264.883660","azimuthZA":"84.853909","type":"traffic"},
+"OWL-DC-owl-north":{"id":"OWL-DC-owl-north","name":"OWL-DC-owl-north","siteA":"OWL-DC","siteZ":"owl-north","siteNameA":"OWL-DC","siteNameZ":"owl-north","length":"1.522605","azimuthAZ":"350.001998","azimuthZA":"169.999969","type":"control"},
+"OWL-DC-owl-north-east":{"id":"OWL-DC-owl-north-east","name":"OWL-DC-owl-north-east","siteA":"OWL-DC","siteZ":"owl-north-east","siteNameA":"OWL-DC","siteNameZ":"owl-north-east","length":"1.522567","azimuthAZ":"34.994401","azimuthZA":"215.001103","type":"control"},
+"OWL-DC-owl-east":{"id":"OWL-DC-owl-east","name":"OWL-DC-owl-east","siteA":"OWL-DC","siteZ":"owl-east","siteNameA":"OWL-DC","siteNameZ":"owl-east","length":"1.522583","azimuthAZ":"79.994074","azimuthZA":"260.005579","type":"control"},
+"owl-north-owl-north-east":{"id":"owl-north-owl-north-east","name":"owl-north-owl-north-east","siteA":"owl-north","siteZ":"owl-north-east","siteNameA":"owl-north","siteNameZ":"owl-north-east","length":"1.165150","azimuthAZ":"102.497861","azimuthZA":"282.506593","type":"traffic"},
+"owl-north-east-owl-east":{"id":"owl-north-east-owl-east","name":"owl-north-east-owl-east","siteA":"owl-north-east","siteZ":"owl-east","siteNameA":"owl-north-east","siteNameZ":"owl-east","length":"1.165321","azimuthAZ":"147.500226","azimuthZA":"327.505031","type":"traffic"},
+"OWL-DC-AT&T-Bedminster":{"id":"OWL-DC-AT&T-Bedminster","name":"OWL-DC-AT&T-Bedminster","siteA":"OWL-DC","siteZ":"AT&T-Bedminster","siteNameA":"OWL-DC","siteNameZ":"AT&T-Bedminster","length":"27.437179","azimuthAZ":"324.485016","azimuthZA":"144.362105","type":"data-center-interconnect"},
+"AT&T-Bedminster-Petrol-Bedminster":{"id":"AT&T-Bedminster-Petrol-Bedminster","name":"AT&T-Bedminster-Petrol-Bedminster","siteA":"AT&T-Bedminster","siteZ":"Petrol-Bedminster","siteNameA":"AT&T-Bedminster","siteNameZ":"Petrol-Bedminster","length":"1.819953","azimuthAZ":"312.782236","azimuthZA":"132.771911","type":"control"},
+"AT&T-Bedminster-US78/US287":{"id":"AT&T-Bedminster-US78/US287","name":"AT&T-Bedminster-US78/US287","siteA":"AT&T-Bedminster","siteZ":"US78/US287","siteNameA":"AT&T-Bedminster","siteNameZ":"US78/US287","length":"2.954947","azimuthAZ":"197.233564","azimuthZA":"17.226804","type":"control"},
+"San-Ramon-DC-sr-east":{"id":"San-Ramon-DC-sr-east","name":"San-Ramon-DC-sr-east","siteA":"San-Ramon-DC","siteZ":"sr-east","siteNameA":"San-Ramon-DC","siteNameZ":"sr-east","length":"1.580364","azimuthAZ":"80.363571","azimuthZA":"260.374428","type":"control"},
+"San-Ramon-DC-sr-west":{"id":"San-Ramon-DC-sr-west","name":"San-Ramon-DC-sr-west","siteA":"San-Ramon-DC","siteZ":"sr-west","siteNameA":"San-Ramon-DC","siteNameZ":"sr-west","length":"1.580413","azimuthAZ":"260.374731","azimuthZA":"80.363875","type":"control"},
+"San-Ramon-DC-sr-north":{"id":"San-Ramon-DC-sr-north","name":"San-Ramon-DC-sr-north","siteA":"San-Ramon-DC","siteZ":"sr-north","siteNameA":"San-Ramon-DC","siteNameZ":"sr-north","length":"1.524434","azimuthAZ":"349.619184","azimuthZA":"169.617269","type":"control"},
+"San-Ramon-DC-sr-north-east":{"id":"San-Ramon-DC-sr-north-east","name":"San-Ramon-DC-sr-north-east","siteA":"San-Ramon-DC","siteZ":"sr-north-east","siteNameA":"San-Ramon-DC","siteNameZ":"sr-north-east","length":"1.542411","azimuthAZ":"36.034000","azimuthZA":"216.040324","type":"control"},
+"San-Ramon-DC-sr-north-west":{"id":"San-Ramon-DC-sr-north-west","name":"San-Ramon-DC-sr-north-west","siteA":"San-Ramon-DC","siteZ":"sr-north-west","siteNameA":"San-Ramon-DC","siteNameZ":"sr-north-west","length":"1.562756","azimuthAZ":"303.980237","azimuthZA":"123.971206","type":"control"},
+"San-Ramon-DC-sr-south":{"id":"San-Ramon-DC-sr-south","name":"San-Ramon-DC-sr-south","siteA":"San-Ramon-DC","siteZ":"sr-south","siteNameA":"San-Ramon-DC","siteNameZ":"sr-south","length":"1.524443","azimuthAZ":"169.615417","azimuthZA":"349.617331","type":"control"},
+"San-Ramon-DC-sr-south-east":{"id":"San-Ramon-DC-sr-south-east","name":"San-Ramon-DC-sr-south-east","siteA":"San-Ramon-DC","siteZ":"sr-south-east","siteNameA":"San-Ramon-DC","siteNameZ":"sr-south-east","length":"1.562870","azimuthAZ":"123.968387","azimuthZA":"303.977417","type":"control"},
+"San-Ramon-DC-sr-south-west":{"id":"San-Ramon-DC-sr-south-west","name":"San-Ramon-DC-sr-south-west","siteA":"San-Ramon-DC","siteZ":"sr-south-west","siteNameA":"San-Ramon-DC","siteNameZ":"sr-south-west","length":"1.542492","azimuthAZ":"216.044457","azimuthZA":"36.038135","type":"control"},
+"OWL-DC-San-Ramon-DC":{"id":"OWL-DC-San-Ramon-DC","name":"OWL-DC-San-Ramon-DC","siteA":"OWL-DC","siteZ":"San-Ramon-DC","siteNameA":"OWL-DC","siteNameZ":"San-Ramon-DC","length":"4060.445351","azimuthAZ":"281.575258","azimuthZA":"70.526201","type":"data-center-interconnect"},
+"Telia-Lab-ADVA-R1":{"id":"Telia-Lab-ADVA-R1","name":"Telia-Lab-ADVA-R1","siteA":"Telia-Lab","siteZ":"ADVA-R1","siteNameA":"Telia-Lab","siteNameZ":"Telia-Lab","length":"90.381269","azimuthAZ":"249.241681","azimuthZA":"67.971555","type":"control"},
+"Telia-Lab-ADVA-R2":{"id":"Telia-Lab-ADVA-R2","name":"Telia-Lab-ADVA-R2","siteA":"Telia-Lab","siteZ":"ADVA-R2","siteNameA":"Telia-Lab","siteNameZ":"Telia-Lab","length":"56.942201","azimuthAZ":"305.498100","azimuthZA":"124.787029","type":"control"},
+"Telia-Lab-ADVA-R3":{"id":"Telia-Lab-ADVA-R3","name":"Telia-Lab-ADVA-R3","siteA":"Telia-Lab","siteZ":"ADVA-R3","siteNameA":"Telia-Lab","siteNameZ":"Telia-Lab","length":"49.939534","azimuthAZ":"257.937548","azimuthZA":"77.198580","type":"control"},
+"Telia-Lab-Coriant-R1":{"id":"Telia-Lab-Coriant-R1","name":"Telia-Lab-Coriant-R1","siteA":"Telia-Lab","siteZ":"Coriant-R1","siteNameA":"Telia-Lab","siteNameZ":"Telia-Lab","length":"59.605946","azimuthAZ":"82.969019","azimuthZA":"263.869082","type":"control"},
+"Telia-Lab-Coriant-R2":{"id":"Telia-Lab-Coriant-R2","name":"Telia-Lab-Coriant-R2","siteA":"Telia-Lab","siteZ":"Coriant-R2","siteNameA":"Telia-Lab","siteNameZ":"Telia-Lab","length":"32.655947","azimuthAZ":"354.958972","azimuthZA":"174.914963","type":"control"},
+"Telia-Lab-Coriant-R3":{"id":"Telia-Lab-Coriant-R3","name":"Telia-Lab-Coriant-R3","siteA":"Telia-Lab","siteZ":"Coriant-R3","siteNameA":"Telia-Lab","siteNameZ":"Telia-Lab","length":"11.365269","azimuthAZ":"198.597495","azimuthZA":"18.542652","type":"control"},
+"ADVA-R1-ADVA-R2":{"id":"ADVA-R1-ADVA-R2","name":"ADVA-R1-ADVA-R2","siteA":"ADVA-R1","siteZ":"ADVA-R2","siteNameA":"ADVA-R1","siteNameZ":"ADVA-R2","length":"75.455304","azimuthAZ":"29.104148","azimuthZA":"209.666223","type":"traffic"},
+"ADVA-R2-ADVA-R3":{"id":"ADVA-R2-ADVA-R3","name":"ADVA-R2-ADVA-R3","siteA":"ADVA-R2","siteZ":"ADVA-R3","siteNameA":"ADVA-R2","siteNameZ":"ADVA-R3","length":"43.571339","azimuthAZ":"182.550186","azimuthZA":"2.520807","type":"traffic"},
+"ADVA-R3-ADVA-R1":{"id":"ADVA-R3-ADVA-R1","name":"ADVA-R3-ADVA-R1","siteA":"ADVA-R3","siteZ":"ADVA-R1","siteNameA":"ADVA-R3","siteNameZ":"ADVA-R1","length":"41.704912","azimuthAZ":"238.072776","azimuthZA":"57.541137","type":"traffic"},
+"Coriant-R1-Coriant-R3":{"id":"Coriant-R1-Coriant-R3","name":"Coriant-R1-Coriant-R3","siteA":"Coriant-R1","siteZ":"Coriant-R3","siteNameA":"Coriant-R1","siteNameZ":"Coriant-R3","length":"65.330426","azimuthAZ":"254.844777","azimuthZA":"73.890302","type":"traffic"},
+"Coriant-R2-Coriant-R1":{"id":"Coriant-R2-Coriant-R1","name":"Coriant-R2-Coriant-R1","siteA":"Coriant-R2","siteZ":"Coriant-R1","siteNameA":"Coriant-R2","siteNameZ":"Coriant-R1","length":"66.963183","azimuthAZ":"112.092350","azimuthZA":"293.037795","type":"traffic"},
+"Coriant-R3-Coriant-R2":{"id":"Coriant-R3-Coriant-R2","name":"Coriant-R3-Coriant-R2","siteA":"Coriant-R3","siteZ":"Coriant-R2","siteNameA":"Coriant-R3","siteNameZ":"Coriant-R2","length":"43.308017","azimuthAZ":".944183","azimuthZA":"180.955123","type":"traffic"},
+"ADVA-R2-Coriant-R2":{"id":"ADVA-R2-Coriant-R2","name":"ADVA-R2-Coriant-R2","siteA":"ADVA-R2","siteZ":"Coriant-R2","siteNameA":"ADVA-R2","siteNameZ":"Coriant-R2","length":"43.492285","azimuthAZ":"89.993872","azimuthZA":"270.661932","type":"traffic"},
+"ADVA-R3-Coriant-R3":{"id":"ADVA-R3-Coriant-R3","name":"ADVA-R3-Coriant-R3","siteA":"ADVA-R3","siteZ":"Coriant-R3","siteNameA":"ADVA-R3","siteNameZ":"Coriant-R3","length":"45.213525","azimuthAZ":"89.686360","azimuthZA":"270.370141","type":"traffic"}
+
+  }
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/site.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/site.json
new file mode 100644
index 0000000..77f12e9
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/site.json
@@ -0,0 +1,55 @@
+{
+    "site": {
+"Bejing":{"id":"Bejing","name":"Bejing","location":{"lat":39.979597,"lon":116.369298},"amsl-ground":55,"type":"physical-network-function","references":{"site-links":["Prague-DC-Bejing","Bejing-Tianjin"],"network-elements":["ZTE-24"]}},
+"Berlin-DC":{"id":"Berlin-DC","name":"Berlin-DC","location":{"lat":52.501305,"lon":13.366917},"amsl-ground":52,"type":"data-center","references":{"site-links":["OWL-DC-Berlin-DC","Berlin-DC-Berlin-north-east","Berlin-DC-Berlin-south","Berlin-DC-Berlin-north-west"],"network-elements":[]}},
+"Berlin-north-east":{"id":"Berlin-north-east","name":"Berlin-north-east","location":{"lat":52.524000,"lon":13.400152},"amsl-ground":60,"type":"physical-network-function","references":{"site-links":["Berlin-DC-Berlin-north-east","Berlin-north-east-Berlin-south","Berlin-north-west-Berlin-north-east"],"network-elements":["ADVA-EthSwitch-1","ADVA-ROADM-A"]}},
+"Berlin-north-west":{"id":"Berlin-north-west","name":"Berlin-north-west","location":{"lat":52.533346,"lon":13.312181},"amsl-ground":35,"type":"physical-network-function","references":{"site-links":["Berlin-DC-Berlin-north-west","Berlin-south-Berlin-north-west","Berlin-north-west-Berlin-north-east"],"network-elements":["ADVA-ROADM-C"]}},
+"Berlin-south":{"id":"Berlin-south","name":"Berlin-south","location":{"lat":52.459541,"lon":13.366960},"amsl-ground":35,"type":"physical-network-function","references":{"site-links":["Berlin-DC-Berlin-south","Berlin-north-east-Berlin-south","Berlin-south-Berlin-north-west","Berlin-south-Berlin-south-west"],"network-elements":["ADVA-EthSwitch-2","ADVA-ROADM-B"]}},
+"Berlin-south-west":{"id":"Berlin-south-west","name":"Berlin-south-west","location":{"lat":52.459541,"lon":13.334130},"amsl-ground":59,"type":"physical-network-function","references":{"site-links":["Berlin-south-Berlin-south-west"],"network-elements":["Nokia-eNodeB-1"]}},
+"Malpensa":{"id":"Malpensa","name":"Malpensa","location":{"lat":45.630000,"lon":8.723056},"amsl-ground":220,"type":"physical-network-function","references":{"site-links":["Prague-DC-Malpensa","Milan-Malpensa"],"network-elements":["SIAE-S2"]}},
+"Milan":{"id":"Milan","name":"Milan","location":{"lat":45.470312,"lon":9.183940},"amsl-ground":122,"type":"physical-network-function","references":{"site-links":["Prague-DC-Milan","Milan-Malpensa"],"network-elements":["SIAE-S1"]}},
+"Ottawa-Airport":{"id":"Ottawa-Airport","name":"Ottawa-Airport","location":{"lat":45.293149,"lon":-75.523889},"amsl-ground":113,"type":"physical-network-function","references":{"site-links":["Prague-DC-Ottawa-Airport","Ottawa-Airport-Ottawa-south-west","Ottawa-Center-Ottawa-Airport"],"network-elements":["DragonWave-Z1","DragonWave-A2"]}},
+"Ottawa-Center":{"id":"Ottawa-Center","name":"Ottawa-Center","location":{"lat":45.250298,"lon":-76.080431},"amsl-ground":87,"type":"physical-network-function","references":{"site-links":["Prague-DC-Ottawa-Center","Ottawa-Center-Ottawa-Airport","Ottawa-south-west-Ottawa-Center"],"network-elements":["DragonWave-A1","DragonWave-Z3"]}},
+"Ottawa-south-west":{"id":"Ottawa-south-west","name":"Ottawa-south-west","location":{"lat":45.345269,"lon":-75.910469},"amsl-ground":111,"type":"physical-network-function","references":{"site-links":["Prague-DC-Ottawa-south-west","Ottawa-Airport-Ottawa-south-west","Ottawa-south-west-Ottawa-Center"],"network-elements":["DragonWave-Z2","DragonWave-A3"]}},
+"OWL-DC":{"id":"OWL-DC","name":"OWL-DC","location":{"lat":40.468102,"lon":-74.447872},"amsl-ground":32,"type":"data-center","references":{"site-links":["OWL-DC-Prague-DC","OWL-DC-Berlin-DC","OWL-DC-AT&T-Labs","OWL-DC-owl-north","OWL-DC-owl-north-east","OWL-DC-owl-east","OWL-DC-AT&T-Bedminster","OWL-DC-San-Ramon-DC"],"network-elements":[]}},
+"owl-east":{"id":"owl-east","name":"owl-east","location":{"lat":40.470480,"lon":-74.430146},"amsl-ground":25,"type":"physical-network-function","references":{"site-links":["OWL-DC-owl-east","owl-north-east-owl-east"],"network-elements":["Ericsson-B2","Airspan-LTE-BS4"]}},
+"owl-west":{"id":"owl-west","name":"owl-west","location":{"lat":40.465724,"lon":-74.465599},"amsl-ground":37,"type":"physical-network-function","references":{"site-links":[],"network-elements":["Airspan-LTE-BS2"]}},
+"owl-north":{"id":"owl-north","name":"owl-north","location":{"lat":40.481588,"lon":-74.450998},"amsl-ground":37,"type":"physical-network-function","references":{"site-links":["OWL-DC-owl-north","owl-north-owl-north-east"],"network-elements":["Commscope-DAS-01","Ericsson-A1","NEC-WiMAX-BS3"]}},
+"owl-north-east":{"id":"owl-north-east","name":"owl-north-east","location":{"lat":40.479319,"lon":-74.437548},"amsl-ground":32,"type":"physical-network-function","references":{"site-links":["OWL-DC-owl-north-east","owl-north-owl-north-east","owl-north-east-owl-east"],"network-elements":["Ericsson-B1","Ericsson-A2","Airspan-LTE-BS3"]}},
+"owl-north-west":{"id":"owl-north-west","name":"owl-north-west","location":{"lat":40.475956,"lon":-74.462617},"amsl-ground":37,"type":"physical-network-function","references":{"site-links":[],"network-elements":["NEC-WiMAX-BS2"]}},
+"owl-south":{"id":"owl-south","name":"owl-south","location":{"lat":40.454616,"lon":-74.444747},"amsl-ground":2,"type":"physical-network-function","references":{"site-links":[],"network-elements":["Airspan-WiMAX-BS1"]}},
+"owl-south-east":{"id":"owl-south-east","name":"owl-south-east","location":{"lat":40.460248,"lon":-74.433127},"amsl-ground":28,"type":"physical-network-function","references":{"site-links":[],"network-elements":["NEC-WiMAX-BS1","Commscope-OneCell-01","Ericsson-LTE-Sim-05","Nokia-LTE-Sim-06","Samsung-LTE-Sim-07"]}},
+"owl-south-west":{"id":"owl-south-west","name":"owl-south-west","location":{"lat":40.456885,"lon":-74.458197},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":[],"network-elements":["Airspan-LTE-BS1"]}},
+"Prague-DC":{"id":"Prague-DC","name":"Prague-DC","location":{"lat":50.082702,"lon":14.419391},"amsl-ground":192,"type":"data-center","references":{"site-links":["OWL-DC-Prague-DC","Prague-DC-Bejing","Prague-DC-Tianjin","Prague-DC-Milan","Prague-DC-Malpensa","Prague-DC-Ottawa-Center","Prague-DC-Ottawa-Airport","Prague-DC-Ottawa-south-west","Prague-DC-Peania","Prague-DC-Athens","Prague-DC-Tel-Aviv","Prague-DC-Tel-Aviv-north","Prague-DC-Bucharest-north","Prague-DC-Politehnica-Bucharest"],"network-elements":[]}},
+"Tianjin":{"id":"Tianjin","name":"Tianjin","location":{"lat":39.125229,"lon":117.015355},"amsl-ground":4,"type":"physical-network-function","references":{"site-links":["Prague-DC-Tianjin","Bejing-Tianjin"],"network-elements":["ZTE-81"]}},
+"Peania":{"id":"Peania","name":"Peania","location":{"lat":37.941722,"lon":23.873501},"amsl-ground":95,"type":"physical-network-function","references":{"site-links":["Athens-Peania","Prague-DC-Peania"],"network-elements":[]}},
+"Athens":{"id":"Athens","name":"Athens","location":{"lat":37.990900,"lon":23.703320},"amsl-ground":88,"type":"physical-network-function","references":{"site-links":["Athens-Peania","Prague-DC-Athens"],"network-elements":["Intracom-Z"]}},
+"AT&T-Labs":{"id":"AT&T-Labs","name":"AT&T-Labs","location":{"lat":40.397461,"lon":-74.135717},"amsl-ground":49,"type":"data-center","references":{"site-links":["OWL-DC-AT&T-Labs","AT&T-Labs-Middletown-north","AT&T-Labs-Middletown-south-east","AT&T-Labs-Middletown-south-west"],"network-elements":[]}},
+"Middletown-north":{"id":"Middletown-north","name":"Middletown-north","location":{"lat":40.420676,"lon":-74.120049},"amsl-ground":15,"type":"physical-network-function","references":{"site-links":["AT&T-Labs-Middletown-north","Middletown-south-west-Middletown-north","Middletown-north-Middletown-south-east"],"network-elements":["DragonWave-A4","Ericsson-24"]}},
+"Middletown-south-east":{"id":"Middletown-south-east","name":"Middletown-south-east","location":{"lat":40.397288,"lon":-74.088610},"amsl-ground":32,"type":"physical-network-function","references":{"site-links":["AT&T-Labs-Middletown-south-east","Middletown-north-Middletown-south-east","Middletown-south-east-Middletown-south-west"],"network-elements":["DragonWave-Z4","Nokia-61"]}},
+"Middletown-south-west":{"id":"Middletown-south-west","name":"Middletown-south-west","location":{"lat":40.394148,"lon":-74.134519},"amsl-ground":48,"type":"physical-network-function","references":{"site-links":["AT&T-Labs-Middletown-south-west","Middletown-south-west-Middletown-north","Middletown-south-east-Middletown-south-west"],"network-elements":["Nokia-62","Ericsson-23"]}},
+"Tel-Aviv":{"id":"Tel-Aviv","name":"Tel-Aviv","location":{"lat":32.111466,"lon":34.836747},"amsl-ground":23,"type":"physical-network-function","references":{"site-links":["Tel-Aviv-Tel-Aviv-north","Prague-DC-Tel-Aviv"],"network-elements":["Ceragon-A1"]}},
+"Tel-Aviv-north":{"id":"Tel-Aviv-north","name":"Tel-Aviv-north","location":{"lat":32.175641,"lon":34.887036},"amsl-ground":70,"type":"physical-network-function","references":{"site-links":["Tel-Aviv-Tel-Aviv-north","Prague-DC-Tel-Aviv-north"],"network-elements":["Ceragon-Z1"]}},
+"Bucharest-north":{"id":"Bucharest-north","name":"Bucharest-north","location":{"lat":44.448833,"lon":26.091029},"amsl-ground":97,"type":"physical-network-function","references":{"site-links":["Bucharest-north-Politehnica-Bucharest","Prague-DC-Bucharest-north"],"network-elements":["Ceragon-A2"]}},
+"Politehnica-Bucharest":{"id":"Politehnica-Bucharest","name":"Politehnica-Bucharest","location":{"lat":44.433837,"lon":26.057854},"amsl-ground":104,"type":"physical-network-function","references":{"site-links":["Bucharest-north-Politehnica-Bucharest","Prague-DC-Politehnica-Bucharest"],"network-elements":["Ceragon-Z2"]}},
+"AT&T-Bedminster":{"id":"AT&T-Bedminster","name":"AT&T-Bedminster","location":{"lat":40.668802,"lon":-74.636862},"amsl-ground":104,"type":"data-center","references":{"site-links":["OWL-DC-AT&T-Bedminster","AT&T-Bedminster-Petrol-Bedminster","AT&T-Bedminster-US78/US287"],"network-elements":[]}},
+"Petrol-Bedminster":{"id":"Petrol-Bedminster","name":"Petrol-Bedminster","location":{"lat":40.679919,"lon":-74.652703},"amsl-ground":104,"type":"physical-network-function","references":{"site-links":["AT&T-Bedminster-Petrol-Bedminster"],"network-elements":["AltioStar-RRH-1"]}},
+"US78/US287":{"id":"US78/US287","name":"US78/US287","location":{"lat":40.643419,"lon":-74.647239},"amsl-ground":104,"type":"physical-network-function","references":{"site-links":["AT&T-Bedminster-US78/US287"],"network-elements":["AltioStar-RRH-2"]}},
+"San-Ramon-DC":{"id":"San-Ramon-DC","name":"San-Ramon-DC","location":{"lat":37.766128,"lon":-121.963456},"amsl-ground":32,"type":"data-center","references":{"site-links":["San-Ramon-DC-sr-east","San-Ramon-DC-sr-west","San-Ramon-DC-sr-north","San-Ramon-DC-sr-north-east","San-Ramon-DC-sr-north-west","San-Ramon-DC-sr-south","San-Ramon-DC-sr-south-east","San-Ramon-DC-sr-south-west","OWL-DC-San-Ramon-DC"],"network-elements":[]}},
+"sr-east":{"id":"sr-east","name":"sr-east","location":{"lat":37.768506,"lon":-121.945729},"amsl-ground":25,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-east"],"network-elements":[]}},
+"sr-west":{"id":"sr-west","name":"sr-west","location":{"lat":37.763750,"lon":-121.981183},"amsl-ground":37,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-west"],"network-elements":[]}},
+"sr-north":{"id":"sr-north","name":"sr-north","location":{"lat":37.779614,"lon":-121.966582},"amsl-ground":37,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-north"],"network-elements":[]}},
+"sr-north-east":{"id":"sr-north-east","name":"sr-north-east","location":{"lat":37.777345,"lon":-121.953132},"amsl-ground":32,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-north-east"],"network-elements":[]}},
+"sr-north-west":{"id":"sr-north-west","name":"sr-north-west","location":{"lat":37.773982,"lon":-121.978201},"amsl-ground":37,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-north-west"],"network-elements":[]}},
+"sr-south":{"id":"sr-south","name":"sr-south","location":{"lat":37.752642,"lon":-121.960330},"amsl-ground":2,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-south"],"network-elements":[]}},
+"sr-south-east":{"id":"sr-south-east","name":"sr-south-east","location":{"lat":37.758274,"lon":-121.948711},"amsl-ground":28,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-south-east"],"network-elements":[]}},
+"sr-south-west":{"id":"sr-south-west","name":"sr-south-west","location":{"lat":37.754911,"lon":-121.973780},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-south-west"],"network-elements":[]}},
+"Telia-Lab":{"id":"Telia-Lab","name":"Telia-Lab","location":{"lat":59.357212,"lon":17.974854},"amsl-ground":18,"type":"data-center","references":{"site-links":["Telia-Lab-ADVA-R1","Telia-Lab-ADVA-R2","Telia-Lab-ADVA-R3","Telia-Lab-Coriant-R1","Telia-Lab-Coriant-R2","Telia-Lab-Coriant-R3"],"network-elements":[]}},
+"ADVA-R1":{"id":"ADVA-R1","name":"ADVA-R1","location":{"lat":59.060684,"lon":16.496340},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["Telia-Lab-ADVA-R1","ADVA-R1-ADVA-R2","ADVA-R3-ADVA-R1"],"network-elements":["ADVA-R1","Coriant-204"]}},
+"ADVA-R2":{"id":"ADVA-R2","name":"ADVA-R2","location":{"lat":59.652001,"lon":17.149636},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["Telia-Lab-ADVA-R2","ADVA-R1-ADVA-R2","ADVA-R2-ADVA-R3","ADVA-R2-Coriant-R2"],"network-elements":["ADVA-R2","Coriant-202"]}},
+"ADVA-R3":{"id":"ADVA-R3","name":"ADVA-R3","location":{"lat":59.260519,"lon":17.115525},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["Telia-Lab-ADVA-R3","ADVA-R2-ADVA-R3","ADVA-R3-ADVA-R1","ADVA-R3-Coriant-R3"],"network-elements":["ADVA-R3"]}},
+"Coriant-R1":{"id":"Coriant-R1","name":"Coriant-R1","location":{"lat":59.418652,"lon":19.020660},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["Telia-Lab-Coriant-R1","Coriant-R1-Coriant-R3","Coriant-R2-Coriant-R1"],"network-elements":["Coriant-R1","Coriant-201"]}},
+"Coriant-R2":{"id":"Coriant-R2","name":"Coriant-R2","location":{"lat":59.649762,"lon":17.923781},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["Telia-Lab-Coriant-R2","Coriant-R2-Coriant-R1","Coriant-R3-Coriant-R2","ADVA-R2-Coriant-R2"],"network-elements":["Coriant-R2"]}},
+"Coriant-R3":{"id":"Coriant-R3","name":"Coriant-R3","location":{"lat":59.260319,"lon":17.911079},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["Telia-Lab-Coriant-R3","Coriant-R1-Coriant-R3","Coriant-R3-Coriant-R2","ADVA-R3-Coriant-R3"],"network-elements":["Coriant-R3","Coriant-203"]}}
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-common@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-common@2018-08-31.schema-information.json
new file mode 100644
index 0000000..759437a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-common@2018-08-31.schema-information.json
@@ -0,0 +1,738 @@
+{ "schama-information": {
+
+"tapi-common": {
+"id": "tapi-common", 
+"is-read-only": false, 
+"description": ["This module contains TAPI Common Model definitions. Source: TapiCommon.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
+},
+"service-interface-point-uuid": {
+"id": "service-interface-point-uuid", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-interface-point-ref-g": {
+"id": "service-interface-point-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"administrative-state": {
+"id": "administrative-state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"operational-state": {
+"id": "operational-state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"lifecycle-state": {
+"id": "lifecycle-state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"admin-state-pac-g": {
+"id": "admin-state-pac-g", 
+"is-read-only": false, 
+"description": ["Provides state attributes that are applicable to an entity that can be administered. Such an entity also has operational and lifecycle aspects."]
+},
+"uuid": {
+"id": "uuid", 
+"is-read-only": false, 
+"description": ["UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable. An UUID carries no semantics with respect to the purpose or state of the entity. UUID here uses string representation as defined in RFC 4122. The canonical representation uses lowercase characters. Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6"]
+},
+"name": {
+"id": "name", 
+"is-read-only": false, 
+"description": ["List of names. A property of an entity with a value that is unique in some namespace but may change during the life of the entity. A name carries no semantics with respect to the purpose of the entity."]
+},
+"global-class-g": {
+"id": "global-class-g", 
+"is-read-only": false, 
+"description": ["The TAPI GlobalComponent serves as the super class for all TAPI entities that can be directly retrieved by their ID. As such, these are first class entities and their ID is expected to be globally unique."]
+},
+"lifecycle-state": {
+"id": "lifecycle-state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"lifecycle-state-pac-g": {
+"id": "lifecycle-state-pac-g", 
+"is-read-only": false, 
+"description": ["Provides state attributes for an entity that has lifeccycle aspects only."]
+},
+"local-id": {
+"id": "local-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"name": {
+"id": "name", 
+"is-read-only": false, 
+"description": ["List of names. A property of an entity with a value that is unique in some namespace but may change during the life of the entity. A name carries no semantics with respect to the purpose of the entity."]
+},
+"local-class-g": {
+"id": "local-class-g", 
+"is-read-only": false, 
+"description": ["The TAPI GlobalComponent serves as the super class for all TAPI entities that can be directly retrieved by their ID. As such, these are first class entities and their ID is expected to be globally unique."]
+},
+"operational-state": {
+"id": "operational-state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"lifecycle-state": {
+"id": "lifecycle-state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"operational-state-pac-g": {
+"id": "operational-state-pac-g", 
+"is-read-only": false, 
+"description": ["Provides state attributes that are applicable to an entity that reflects operational aspects. Such an entity is expected to also have lifecycle aspects."]
+},
+"context": {
+"id": "context", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-interface-point": {
+"id": "service-interface-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tapi-context-g": {
+"id": "tapi-context-g", 
+"is-read-only": false, 
+"description": ["The Network Control Domain (NCD) object class represents the scope of control that a particular SDN controller has with respect to a particular network, (i.e., encompassing a designated set of interconnected (virtual) network elements)."]
+},
+"resource-spec-g": {
+"id": "resource-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-spec-g": {
+"id": "service-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"layer-protocol-name": {
+"id": "layer-protocol-name", 
+"is-read-only": false, 
+"description": ["Usage of layerProtocolName [>1] in the ServiceInterfacePoint should be considered experimental"]
+},
+"supported-layer-protocol-qualifier": {
+"id": "supported-layer-protocol-qualifier", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-interface-point-g": {
+"id": "service-interface-point-g", 
+"is-read-only": false, 
+"description": ["The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. The structure of LTP supports all transport protocols including circuit and packet forms."]
+},
+"total-potential-capacity": {
+"id": "total-potential-capacity", 
+"is-read-only": false, 
+"description": ["An optimistic view of the capacity of the TopologicalEntity assuming that any shared capacity is available to be taken."]
+},
+"available-capacity": {
+"id": "available-capacity", 
+"is-read-only": false, 
+"description": ["Capacity available to be assigned."]
+},
+"capacity-pac-g": {
+"id": "capacity-pac-g", 
+"is-read-only": false, 
+"description": ["The TopologicalEntity derives capacity from the underlying realization. A TopologicalEntity may be an abstraction and virtualization of a subset of the underlying capability offered in a view or may be directly reflecting the underlying realization. A TopologicalEntity may be directly used in the view or may be assigned to another view for use. The clients supported by a multi-layer TopologicalEntity may interact such that the resources used by one client may impact those available to another. This is derived from the LTP spec details. Represents the capacity available to user (client) along with client interaction and usage. A TopologicalEntity may reflect one or more client protocols and one or more members for each profile."]
+},
+"termination-direction": {
+"id": "termination-direction", 
+"is-read-only": false, 
+"description": ["The overall directionality of the LP. - A BIDIRECTIONAL LP will have some SINK and/or SOURCE flowss. - A SINK LP can only contain elements with SINK flows or CONTRA_DIRECTION_SOURCE flows - A SOURCE LP can only contain SOURCE flows or CONTRA_DIRECTION_SINK flows"]
+},
+"termination-state": {
+"id": "termination-state", 
+"is-read-only": false, 
+"description": ["Indicates whether the layer is terminated and if so how."]
+},
+"termination-pac-g": {
+"id": "termination-pac-g", 
+"is-read-only": false, 
+"description": ["Each transport layer is represented by a LayerProtocol (LP) instance. The LayerProtocol instances it can be used for controlling termination and monitoring functionality. It can also be used for controlling the adaptation (i.e. encapsulation and/or multiplexing of client signal), tandem connection monitoring, traffic conditioning and/or shaping functionality at an intermediate point along a connection. Where the client – server relationship is fixed 1:1 and immutable, the layers can be encapsulated in a single LTP instance. Where the is a n:1 relationship between client and server, the layers must be split over two separate instances of LTP."]
+},
+"LAYER_PROTOCOL_QUALIFIER": {
+"id": "LAYER_PROTOCOL_QUALIFIER", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"LOCKED": {
+"id": "LOCKED", 
+"is-read-only": false, 
+"description": ["Users are administratively prohibited from making use of the resource."]
+},
+"UNLOCKED": {
+"id": "UNLOCKED", 
+"is-read-only": false, 
+"description": ["Users are allowed to use the resource"]
+},
+"administrative-state": {
+"id": "administrative-state", 
+"is-read-only": false, 
+"description": ["The possible values of the administrativeState."]
+},
+"date-and-time": {
+"id": "date-and-time", 
+"is-read-only": false, 
+"description": ["This primitive type defines the date and time according to the following structure: yyyyMMddhhmmss.s[Z|{+|-}HHMm] where: yyyy 0000..9999 year MM 01..12 month dd 01..31 day hh 00..23 hour mm 00..59 minute ss 00..59 second s .0...9 tenth of second (set to .0 if EMS or NE cannot support this granularity) Z Z indicates UTC (rather than local time) {+|-} + or - delta from UTC HH 00..23 time zone difference in hours Mm 00..59 time zone difference in minutes."]
+},
+"MINIMIZE": {
+"id": "MINIMIZE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MAXIMIZE": {
+"id": "MAXIMIZE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ALLOW": {
+"id": "ALLOW", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DISALLOW": {
+"id": "DISALLOW", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DONT_CARE": {
+"id": "DONT_CARE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"directive-value": {
+"id": "directive-value", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"BIDIRECTIONAL": {
+"id": "BIDIRECTIONAL", 
+"is-read-only": false, 
+"description": ["The Fowarding entity supports both BIDIRECTIONAL flows at all Ports (i.e. all Ports have both an INPUT flow and an OUTPUT flow defined)"]
+},
+"UNIDIRECTIONAL": {
+"id": "UNIDIRECTIONAL", 
+"is-read-only": false, 
+"description": ["The Forwarding entity has Ports that are either INPUT or OUTPUT. It has no BIDIRECTIONAL Ports."]
+},
+"UNDEFINED_OR_UNKNOWN": {
+"id": "UNDEFINED_OR_UNKNOWN", 
+"is-read-only": false, 
+"description": ["Not a normal state. The system is unable to determine the correct value."]
+},
+"forwarding-direction": {
+"id": "forwarding-direction", 
+"is-read-only": false, 
+"description": ["The directionality of a Forwarding entity."]
+},
+"ODU": {
+"id": "ODU", 
+"is-read-only": false, 
+"description": ["Models the ODU layer as per ITU-T G.872"]
+},
+"ETH": {
+"id": "ETH", 
+"is-read-only": false, 
+"description": ["Models the ETH layer as per ITU-T G.8010"]
+},
+"DSR": {
+"id": "DSR", 
+"is-read-only": false, 
+"description": ["Models a Digital Signal of an unspecified rate. This value can be used when the intent is to respresent an generic digital layer signal without making any statement on its format or overhead (processing) capabilities."]
+},
+"PHOTONIC_MEDIA": {
+"id": "PHOTONIC_MEDIA", 
+"is-read-only": false, 
+"description": ["Models the OCH, OTSi, OTSiA, OTSiG, OMS, OTS and Media channels as per ITU-T G.872 (2017) version 4"]
+},
+"layer-protocol-name": {
+"id": "layer-protocol-name", 
+"is-read-only": false, 
+"description": ["Provides a controlled list of layer protocol names and indicates the naming authority. Note that it is expected that attributes will be added to this structure to convey the naming authority name, the name of the layer protocol using a human readable string and any particular standard reference. Layer protocol names include: - Layer 1 (L1): OTU, ODU - Layer 2 (L2): Carrier Grade Ethernet (ETY, ETH), MPLS-TP (MT)"]
+},
+"PLANNED": {
+"id": "PLANNED", 
+"is-read-only": false, 
+"description": ["The resource is planned but is not present in the network."]
+},
+"POTENTIAL_AVAILABLE": {
+"id": "POTENTIAL_AVAILABLE", 
+"is-read-only": false, 
+"description": ["The supporting resources are present in the network but are shared with other clients; or require further configuration before they can be used; or both. o When a potential resource is configured and allocated to a client it is moved to the installed state for that client. o If the potential resource has been consumed (e.g. allocated to another client) it is moved to the planned state for all other clients."]
+},
+"POTENTIAL_BUSY": {
+"id": "POTENTIAL_BUSY", 
+"is-read-only": false, 
+"description": ["The supporting resources are present in the network but are shared with other clients; or require further configuration before they can be used; or both. o When a potential resource is configured and allocated to a client it is moved to the installed state for that client. o If the potential resource has been consumed (e.g. allocated to another client) it is moved to the planned state for all other clients."]
+},
+"INSTALLED": {
+"id": "INSTALLED", 
+"is-read-only": false, 
+"description": ["The resource is present in the network and is capable of providing the service expected."]
+},
+"PENDING_REMOVAL": {
+"id": "PENDING_REMOVAL", 
+"is-read-only": false, 
+"description": ["The resource has been marked for removal"]
+},
+"lifecycle-state": {
+"id": "lifecycle-state", 
+"is-read-only": false, 
+"description": ["The possible values of the lifecycleState."]
+},
+"value-name": {
+"id": "value-name", 
+"is-read-only": false, 
+"description": ["The name of the value. The value need not have a name."]
+},
+"value": {
+"id": "value", 
+"is-read-only": false, 
+"description": ["The value"]
+},
+"name-and-value-g": {
+"id": "name-and-value-g", 
+"is-read-only": false, 
+"description": ["A scoped name-value pair"]
+},
+"DISABLED": {
+"id": "DISABLED", 
+"is-read-only": false, 
+"description": ["The resource is unable to meet the SLA of the user of the resource. If no (explicit) SLA is defined the resource is disabled if it is totally inoperable and unable to provide service to the user."]
+},
+"ENABLED": {
+"id": "ENABLED", 
+"is-read-only": false, 
+"description": ["The resource is partially or fully operable and available for use"]
+},
+"operational-state": {
+"id": "operational-state", 
+"is-read-only": false, 
+"description": ["The possible values of the operationalState."]
+},
+"BIDIRECTIONAL": {
+"id": "BIDIRECTIONAL", 
+"is-read-only": false, 
+"description": ["The Port has both an INPUT flow and an OUTPUT flow defined."]
+},
+"INPUT": {
+"id": "INPUT", 
+"is-read-only": false, 
+"description": ["The Port only has definition for a flow into the Forwarding entity (i.e. an ingress flow)."]
+},
+"OUTPUT": {
+"id": "OUTPUT", 
+"is-read-only": false, 
+"description": ["The Port only has definition for a flow out of the Forwarding entity (i.e. an egress flow)."]
+},
+"UNIDENTIFIED_OR_UNKNOWN": {
+"id": "UNIDENTIFIED_OR_UNKNOWN", 
+"is-read-only": false, 
+"description": ["Not a normal state. The system is unable to determine the correct value."]
+},
+"port-direction": {
+"id": "port-direction", 
+"is-read-only": false, 
+"description": ["The orientation of flow at the Port of a Forwarding entity"]
+},
+"SYMMETRIC": {
+"id": "SYMMETRIC", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ROOT": {
+"id": "ROOT", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"LEAF": {
+"id": "LEAF", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"TRUNK": {
+"id": "TRUNK", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"UNKNOWN": {
+"id": "UNKNOWN", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"port-role": {
+"id": "port-role", 
+"is-read-only": false, 
+"description": ["The role of an end in the context of the function of the forwarding entity that it bounds"]
+},
+"BIDIRECTIONAL": {
+"id": "BIDIRECTIONAL", 
+"is-read-only": false, 
+"description": ["A Termination with both SINK and SOURCE flows."]
+},
+"SINK": {
+"id": "SINK", 
+"is-read-only": false, 
+"description": ["The flow is up the layer stack from the server side to the client side. Considering an example of a Termination function within the termination entity, a SINK flow: - will arrive at at the base of the termination function (the server side) where it is essentially at an INPUT to the termination component - then will be decoded and deconstructed - then relevant parts of the flow will be sent out of the termination function (the client side) where it is essentially at an OUTPUT from the termination component A SINK termination is one that only supports a SINK flow. A SINK termiation can be bound to an OUTPUT Port of a Forwarding entity"]
+},
+"SOURCE": {
+"id": "SOURCE", 
+"is-read-only": false, 
+"description": ["The flow is down the layer stack from the server side to the client side. Considering an example of a Termination function within the termination entity, a SOURCE flow: - will arrive at at the top of the termination function (the client side) where it is essentially at an INPUT to the termination component - then will be assembled with various overheads etc and will be coded - then coded form of the assembly of flow will be sent out of the termination function (the server side) where it is essentially at an OUTPUT from the termination component A SOURCE termination is one that only supports a SOURCE flow. A SOURCE termiation can be bound to an INPUT Port of a Forwarding entity"]
+},
+"UNDEFINED_OR_UNKNOWN": {
+"id": "UNDEFINED_OR_UNKNOWN", 
+"is-read-only": false, 
+"description": ["Not a normal state. The system is unable to determine the correct value."]
+},
+"termination-direction": {
+"id": "termination-direction", 
+"is-read-only": false, 
+"description": ["The directionality of a termination entity"]
+},
+"LP_CAN_NEVER_TERMINATE": {
+"id": "LP_CAN_NEVER_TERMINATE", 
+"is-read-only": false, 
+"description": ["A non-flexible case that can never be terminated."]
+},
+"LT_NOT_TERMINATED": {
+"id": "LT_NOT_TERMINATED", 
+"is-read-only": false, 
+"description": ["A flexible termination that can terminate but is currently not terminated."]
+},
+"TERMINATED_SERVER_TO_CLIENT_FLOW": {
+"id": "TERMINATED_SERVER_TO_CLIENT_FLOW", 
+"is-read-only": false, 
+"description": ["A flexible termination that is currently terminated for server to client flow only."]
+},
+"TERMINATED_CLIENT_TO_SERVER_FLOW": {
+"id": "TERMINATED_CLIENT_TO_SERVER_FLOW", 
+"is-read-only": false, 
+"description": ["A flexible termination that is currently terminated for client to server flow only."]
+},
+"TERMINATED_BIDIRECTIONAL": {
+"id": "TERMINATED_BIDIRECTIONAL", 
+"is-read-only": false, 
+"description": ["A flexible termination that is currently terminated in both directions of flow."]
+},
+"LT_PERMENANTLY_TERMINATED": {
+"id": "LT_PERMENANTLY_TERMINATED", 
+"is-read-only": false, 
+"description": ["A non-flexible termination that is always terminated (in both directions of flow for a bidirectional case and in the one direction of flow for both unidirectional cases)."]
+},
+"TERMINATION_STATE_UNKNOWN": {
+"id": "TERMINATION_STATE_UNKNOWN", 
+"is-read-only": false, 
+"description": ["There TerminationState cannot be determined."]
+},
+"termination-state": {
+"id": "termination-state", 
+"is-read-only": false, 
+"description": ["Provides support for the range of behaviours and specific states that an LP can take with respect to termination of the signal. Indicates to what degree the LayerTermination is terminated."]
+},
+"uuid": {
+"id": "uuid", 
+"is-read-only": false, 
+"description": ["The univeral ID value where the mechanism for generation is defned by some authority not directly referenced in the structure. UUID here uses string representation as defined in RFC 4122. The canonical representation uses lowercase characters. Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6"]
+},
+"total-size": {
+"id": "total-size", 
+"is-read-only": false, 
+"description": ["Total capacity of the TopologicalEntity in MB/s. In case of bandwidthProfile, this is expected to same as the committedInformationRate."]
+},
+"bandwidth-profile": {
+"id": "bandwidth-profile", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"capacity-g": {
+"id": "capacity-g", 
+"is-read-only": false, 
+"description": ["Information on capacity of a particular TopologicalEntity."]
+},
+"bw-profile-type": {
+"id": "bw-profile-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"committed-information-rate": {
+"id": "committed-information-rate", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"committed-burst-size": {
+"id": "committed-burst-size", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"peak-information-rate": {
+"id": "peak-information-rate", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"peak-burst-size": {
+"id": "peak-burst-size", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"color-aware": {
+"id": "color-aware", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"coupling-flag": {
+"id": "coupling-flag", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"bandwidth-profile-g": {
+"id": "bandwidth-profile-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"value": {
+"id": "value", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"unit": {
+"id": "unit", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"capacity-value-g": {
+"id": "capacity-value-g", 
+"is-read-only": false, 
+"description": ["The Capacity (Bandwidth) values that are applicable for digital layers."]
+},
+"TB": {
+"id": "TB", 
+"is-read-only": false, 
+"description": ["Indicates that the integer CapacityValue is in TeraBytes"]
+},
+"TBPS": {
+"id": "TBPS", 
+"is-read-only": false, 
+"description": ["Indicates that the integer CapacityValue is in Terabit-per-second"]
+},
+"GB": {
+"id": "GB", 
+"is-read-only": false, 
+"description": ["Indicates that the integer CapacityValue is in GigaBytes"]
+},
+"GBPS": {
+"id": "GBPS", 
+"is-read-only": false, 
+"description": ["Indicates that the integer CapacityValue is in Gigabit-per-second"]
+},
+"MB": {
+"id": "MB", 
+"is-read-only": false, 
+"description": ["Indicates that the integer CapacityValue is in MegaBytes"]
+},
+"MBPS": {
+"id": "MBPS", 
+"is-read-only": false, 
+"description": ["Indicates that the integer CapacityValue is in Megabit-per-second"]
+},
+"KB": {
+"id": "KB", 
+"is-read-only": false, 
+"description": ["Indicates that the integer CapacityValue is in KiloBytes"]
+},
+"KBPS": {
+"id": "KBPS", 
+"is-read-only": false, 
+"description": ["Indicates that the integer CapacityValue is in Kilobit-per-second"]
+},
+"GHz": {
+"id": "GHz", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MHz": {
+"id": "MHz", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"capacity-unit": {
+"id": "capacity-unit", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MEF_10.x": {
+"id": "MEF_10.x", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"RFC_2697": {
+"id": "RFC_2697", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"RFC_2698": {
+"id": "RFC_2698", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"RFC_4115": {
+"id": "RFC_4115", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"bandwidth-profile-type": {
+"id": "bandwidth-profile-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"end-time": {
+"id": "end-time", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"start-time": {
+"id": "start-time", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time-range-g": {
+"id": "time-range-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"value": {
+"id": "value", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"unit": {
+"id": "unit", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time-period-g": {
+"id": "time-period-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"YEARS": {
+"id": "YEARS", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MONTHS": {
+"id": "MONTHS", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DAYS": {
+"id": "DAYS", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"HOURS": {
+"id": "HOURS", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MINUTES": {
+"id": "MINUTES", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SECONDS": {
+"id": "SECONDS", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MILLISECONDS": {
+"id": "MILLISECONDS", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MICROSECONDS": {
+"id": "MICROSECONDS", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"NANOSECONDS": {
+"id": "NANOSECONDS", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"PICOSECONDS": {
+"id": "PICOSECONDS", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time-unit": {
+"id": "time-unit", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"period": {
+"id": "period", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time-interval-g": {
+"id": "time-interval-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"layer-protocol-qualifier": {
+"id": "layer-protocol-qualifier", 
+"is-read-only": false, 
+"description": ["This enumeration is used to qualify the sub-layers (if applicable) for a specific LayerProtocol. This extensible enumeration is intentionally empty in the common module and will be augmented with layer-specific values in the respective technology-specific modules. Examples: - LayerProtocolName := OPTICAL_DATA_UNIT LayerProtocolQualifier := 'ODU_FLEX', 'ODU_0', 'ODU_1', 'ODU_2', 'ODU_2E', 'ODU_3', 'ODU_4'', 'ODU_CBR'', 'ODU_GFP'', 'ODU_GFP_HAO', etc - LayerProtocolName := DIGITAL_SIGNAL_RATE LayerProtocolQualifier := 'GBE', '10_GBE_WAN', '10_GBE_LAN', '100_GBE', 'FC_100', 'FC_200', 'FC_400', 'FC_800', 'FC_1200', 'FC_1600', 'FC_3200', 'STM_1', 'STM_4', 'STM_16', 'STM_64', 'STM_256', 'OC_3', 'OC_12', 'OC_48', 'OC_192', 'OC_768', 'OTU_1', 'OTU_2', 'OTU_2E', 'OTU_3', 'OTU_4', 'GPON', 'XGPON', 'IB_SDR', 'IB_DDR', 'IB_QDR', 'SBCON_ESCON', 'DVB_ASI', 'SDI', 'SDI_1G5', 'SDI_3G', etc - LayerProtocolName := PHOTONIC_MEDIA LayerProtocolQualifier := OCH, OTSi, OTSiA, NMC, NMCA, SMC, SMCA, OMS, OTS"]
+},
+"get-service-interface-point-details": {
+"id": "get-service-interface-point-details", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"sip-id-or-name": {
+"id": "sip-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"sip": {
+"id": "sip", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-service-interface-point-list": {
+"id": "get-service-interface-point-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"sip": {
+"id": "sip", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"update-service-interface-point": {
+"id": "update-service-interface-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"sip-id-or-name": {
+"id": "sip-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"state": {
+"id": "state", 
+"is-read-only": false, 
+"description": ["none"]
+}}
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-connectivity@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-connectivity@2018-08-31.schema-information.json
new file mode 100644
index 0000000..17408df
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-connectivity@2018-08-31.schema-information.json
@@ -0,0 +1,693 @@
+{ "schama-information": {
+
+"tapi-connectivity": {
+"id": "tapi-connectivity", 
+"is-read-only": false, 
+"description": ["This module contains TAPI Connectivity Model definitions. Source: TapiConnectivity.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
+},
+"connectivity-service-uuid": {
+"id": "connectivity-service-uuid", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connectivity-service-ref-g": {
+"id": "connectivity-service-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connectivity-service-end-point-local-id": {
+"id": "connectivity-service-end-point-local-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connectivity-service-end-point-ref-g": {
+"id": "connectivity-service-end-point-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connection-end-point-uuid": {
+"id": "connection-end-point-uuid", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connection-end-point-ref-g": {
+"id": "connection-end-point-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connection-uuid": {
+"id": "connection-uuid", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connection-ref-g": {
+"id": "connection-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"switch-control-uuid": {
+"id": "switch-control-uuid", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"switch-control-ref-g": {
+"id": "switch-control-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"route-local-id": {
+"id": "route-local-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"route-ref-g": {
+"id": "route-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connection-end-point": {
+"id": "connection-end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"lower-connection": {
+"id": "lower-connection", 
+"is-read-only": false, 
+"description": ["An Connection object supports a recursive aggregation relationship such that the internal construction of an Connection can be exposed as multiple lower level Connection objects (partitioning). Aggregation is used as for the Node/Topology to allow changes in hierarchy. Connection aggregation reflects Node/Topology aggregation. The FC represents a Cross-Connection in an NE. The Cross-Connection in an NE is not necessarily the lowest level of FC partitioning."]
+},
+"supported-client-link": {
+"id": "supported-client-link", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"route": {
+"id": "route", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"switch-control": {
+"id": "switch-control", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"direction": {
+"id": "direction", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"layer-protocol-name": {
+"id": "layer-protocol-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connection-g": {
+"id": "connection-g", 
+"is-read-only": false, 
+"description": ["The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms. At the lowest level of recursion, a FC represents a cross-connection within an NE."]
+},
+"layer-protocol-name": {
+"id": "layer-protocol-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"layer-protocol-qualifier": {
+"id": "layer-protocol-qualifier", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"parent-node-edge-point": {
+"id": "parent-node-edge-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"client-node-edge-point": {
+"id": "client-node-edge-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"aggregated-connection-end-point": {
+"id": "aggregated-connection-end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connection-port-direction": {
+"id": "connection-port-direction", 
+"is-read-only": false, 
+"description": ["The orientation of defined flow at the EndPoint."]
+},
+"connection-port-role": {
+"id": "connection-port-role", 
+"is-read-only": false, 
+"description": ["Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."]
+},
+"connection-end-point-g": {
+"id": "connection-end-point-g", 
+"is-read-only": false, 
+"description": ["The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. The structure of LTP supports all transport protocols including circuit and packet forms."]
+},
+"service-layer": {
+"id": "service-layer", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-type": {
+"id": "service-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-level": {
+"id": "service-level", 
+"is-read-only": false, 
+"description": ["An abstract value the meaning of which is mutually agreed – typically represents metrics such as - Class of service, priority, resiliency, availability"]
+},
+"requested-capacity": {
+"id": "requested-capacity", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connectivity-direction": {
+"id": "connectivity-direction", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"schedule": {
+"id": "schedule", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"coroute-inclusion": {
+"id": "coroute-inclusion", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"diversity-exclusion": {
+"id": "diversity-exclusion", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connectivity-constraint-g": {
+"id": "connectivity-constraint-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"end-point": {
+"id": "end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connection": {
+"id": "connection", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connectivity-service-g": {
+"id": "connectivity-service-g", 
+"is-read-only": false, 
+"description": ["The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms. At the lowest level of recursion, a FC represents a cross-connection within an NE."]
+},
+"layer-protocol-name": {
+"id": "layer-protocol-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"layer-protocol-qualifier": {
+"id": "layer-protocol-qualifier", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-interface-point": {
+"id": "service-interface-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connection-end-point": {
+"id": "connection-end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"capacity": {
+"id": "capacity", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"direction": {
+"id": "direction", 
+"is-read-only": false, 
+"description": ["The orientation of defined flow at the EndPoint."]
+},
+"role": {
+"id": "role", 
+"is-read-only": false, 
+"description": ["Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."]
+},
+"protection-role": {
+"id": "protection-role", 
+"is-read-only": false, 
+"description": ["To specify the protection role of this Port when create or update ConnectivityService."]
+},
+"connectivity-service-end-point-g": {
+"id": "connectivity-service-end-point-g", 
+"is-read-only": false, 
+"description": ["The association of the FC to LTPs is made via EndPoints. The EndPoint (EP) object class models the access to the FC function. The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances. In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC. It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point. The EP replaces the Protection Unit of a traditional protection model. The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component"]
+},
+"connection-end-point": {
+"id": "connection-end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"route-g": {
+"id": "route-g", 
+"is-read-only": false, 
+"description": ["The FC Route (FcRoute) object class models the individual routes of an FC. The route of an FC object is represented by a list of FCs at a lower level. Note that depending on the service supported by an FC, an the FC can have multiple routes."]
+},
+"connectivity-service": {
+"id": "connectivity-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connection": {
+"id": "connection", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connectivity-context-g": {
+"id": "connectivity-context-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"selected-connection-end-point": {
+"id": "selected-connection-end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"selected-route": {
+"id": "selected-route", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"selection-control": {
+"id": "selection-control", 
+"is-read-only": false, 
+"description": ["Degree of administrative control applied to the switch selection."]
+},
+"selection-reason": {
+"id": "selection-reason", 
+"is-read-only": false, 
+"description": ["The reason for the current switch selection."]
+},
+"switch-direction": {
+"id": "switch-direction", 
+"is-read-only": false, 
+"description": ["Indicates whether the switch selects from ingress to the FC or to egress of the FC, or both."]
+},
+"switch-g": {
+"id": "switch-g", 
+"is-read-only": false, 
+"description": ["The class models the switched forwarding of traffic (traffic flow) between FcPorts (ConnectionEndPoints) and is present where there is protection functionality in the FC (Connection). If an FC exposes protection (having two or more FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects to represent the alternative flow choices visible at the edge of the FC. The FC switch represents and defines a protection switch structure encapsulated in the FC. Essentially performs one of the functions of the Protection Group in a traditional model. It associates to 2 or more FcPorts each playing the role of a Protection Unit. One or more protection, i.e. standby/backup, FcPorts provide protection for one or more working (i.e. regular/main/preferred) FcPorts where either protection or working can feed one or more protected FcPort. The switch may be used in revertive or non-revertive (symmetric) mode. When in revertive mode it may define a waitToRestore time. It may be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 and 1:1). It may be locked out (prevented from switching), force switched or manual switched. It will indicate switch state and change of state. The switch can be switched away from all sources such that it becomes open and hence two coordinated switches can both feed the same LTP so long as at least one of the two is switched away from all sources (is 'open'). The ability for a Switch to be 'high impedance' allows bidirectional ForwardingConstructs to be overlaid on the same bidirectional LTP where the appropriate control is enabled to prevent signal conflict. This ability allows multiple alternate routes to be present that otherwise would be in conflict."]
+},
+"sub-switch-control": {
+"id": "sub-switch-control", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"switch": {
+"id": "switch", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"switch-control-g": {
+"id": "switch-control-g", 
+"is-read-only": false, 
+"description": ["Represents the capability to control and coordinate switches, to add/delete/modify FCs and to add/delete/modify LTPs/LPs so as to realize a protection scheme."]
+},
+"resilience-type": {
+"id": "resilience-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"restoration-coordinate-type": {
+"id": "restoration-coordinate-type", 
+"is-read-only": false, 
+"description": ["The coordination mechanism between multi-layers."]
+},
+"restore-priority": {
+"id": "restore-priority", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"reversion-mode": {
+"id": "reversion-mode", 
+"is-read-only": false, 
+"description": ["Indcates whether the protection scheme is revertive or non-revertive."]
+},
+"wait-to-revert-time": {
+"id": "wait-to-revert-time", 
+"is-read-only": false, 
+"description": ["If the protection system is revertive, this attribute specifies the time, in minutes, to wait after a fault clears on a higher priority (preferred) resource before reverting to the preferred resource."]
+},
+"hold-off-time": {
+"id": "hold-off-time", 
+"is-read-only": false, 
+"description": ["This attribute indicates the time, in milliseconds, between declaration of signal degrade or signal fail, and the initialization of the protection switching algorithm."]
+},
+"is-lock-out": {
+"id": "is-lock-out", 
+"is-read-only": false, 
+"description": ["The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of. This overrides all other protection control states including forced. If the item is locked out then it cannot be used under any circumstances. Note: Only relevant when part of a protection scheme."]
+},
+"is-frozen": {
+"id": "is-frozen", 
+"is-read-only": false, 
+"description": ["Temporarily prevents any switch action to be taken and, as such, freezes the current state. Until the freeze is cleared, additional near-end external commands are rejected and fault condition changes and received APS messages are ignored. All administrative controls of any aspect of protection are rejected."]
+},
+"is-coordinated-switching-both-ends": {
+"id": "is-coordinated-switching-both-ends", 
+"is-read-only": false, 
+"description": ["Is operating such that switching at both ends of each flow acorss the FC is coordinated at both ingress and egress ends."]
+},
+"max-switch-times": {
+"id": "max-switch-times", 
+"is-read-only": false, 
+"description": ["Used to limit the maximum swtich times. When work fault disappears , and traffic return to the original work path, switch counter reset."]
+},
+"preferred-restoration-layer": {
+"id": "preferred-restoration-layer", 
+"is-read-only": false, 
+"description": ["Indicate which layer this resilience parameters package configured for."]
+},
+"resilience-constraint-g": {
+"id": "resilience-constraint-g", 
+"is-read-only": false, 
+"description": ["A list of control parameters to apply to a switch."]
+},
+"connection-end-point": {
+"id": "connection-end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"cep-list-g": {
+"id": "cep-list-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"POINT_TO_POINT_CONNECTIVITY": {
+"id": "POINT_TO_POINT_CONNECTIVITY", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"POINT_TO_MULTIPOINT_CONNECTIVITY": {
+"id": "POINT_TO_MULTIPOINT_CONNECTIVITY", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MULTIPOINT_CONNECTIVITY": {
+"id": "MULTIPOINT_CONNECTIVITY", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ROOTED_MULTIPOINT_CONNECTIVITY": {
+"id": "ROOTED_MULTIPOINT_CONNECTIVITY", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-type": {
+"id": "service-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"REVERTIVE": {
+"id": "REVERTIVE", 
+"is-read-only": false, 
+"description": ["An FC switched to a lower priority (non-preferred) resource will revert to a higher priority (preferred) resource when that recovers (potentially after some hold-off time)."]
+},
+"NON-REVERTIVE": {
+"id": "NON-REVERTIVE", 
+"is-read-only": false, 
+"description": ["An FC switched to a lower priority (non-preferred) resource will not revert to a higher priority (preferred) resource when that recovers."]
+},
+"reversion-mode": {
+"id": "reversion-mode", 
+"is-read-only": false, 
+"description": ["The reversion mode associated with protection."]
+},
+"LOCK_OUT": {
+"id": "LOCK_OUT", 
+"is-read-only": false, 
+"description": ["The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of. This overrides all other protection control states including forced. If the item is locked out then it cannot be used under any circumstances. Note: Only relevant when part of a protection scheme."]
+},
+"NORMAL": {
+"id": "NORMAL", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MANUAL": {
+"id": "MANUAL", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"FORCED": {
+"id": "FORCED", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"selection-control": {
+"id": "selection-control", 
+"is-read-only": false, 
+"description": ["Possible degrees of administrative control applied to the Route selection."]
+},
+"LOCKOUT": {
+"id": "LOCKOUT", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"NORMAL": {
+"id": "NORMAL", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MANUAL": {
+"id": "MANUAL", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"FORCED": {
+"id": "FORCED", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"WAIT_TO_REVERT": {
+"id": "WAIT_TO_REVERT", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SIGNAL_DEGRADE": {
+"id": "SIGNAL_DEGRADE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SIGNAL_FAIL": {
+"id": "SIGNAL_FAIL", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"selection-reason": {
+"id": "selection-reason", 
+"is-read-only": false, 
+"description": ["The cause of the current route selection."]
+},
+"NO_COORDINATE": {
+"id": "NO_COORDINATE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"HOLD_OFF_TIME": {
+"id": "HOLD_OFF_TIME", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"WAIT_FOR_NOTIFICATION": {
+"id": "WAIT_FOR_NOTIFICATION", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"coordinate-type": {
+"id": "coordinate-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"WORK": {
+"id": "WORK", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"PROTECT": {
+"id": "PROTECT", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"PROTECTED": {
+"id": "PROTECTED", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"NA": {
+"id": "NA", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"WORK_RESTORE": {
+"id": "WORK_RESTORE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"PROTECT_RESTORE": {
+"id": "PROTECT_RESTORE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"protection-role": {
+"id": "protection-role", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-connection-details": {
+"id": "get-connection-details", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-id-or-name": {
+"id": "service-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connection-id-or-name": {
+"id": "connection-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connection": {
+"id": "connection", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-connectivity-service-list": {
+"id": "get-connectivity-service-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service": {
+"id": "service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-connectivity-service-details": {
+"id": "get-connectivity-service-details", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-id-or-name": {
+"id": "service-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service": {
+"id": "service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"create-connectivity-service": {
+"id": "create-connectivity-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"end-point": {
+"id": "end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connectivity-constraint": {
+"id": "connectivity-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"routing-constraint": {
+"id": "routing-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"topology-constraint": {
+"id": "topology-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"resilience-constraint": {
+"id": "resilience-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"state": {
+"id": "state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service": {
+"id": "service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"update-connectivity-service": {
+"id": "update-connectivity-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-id-or-name": {
+"id": "service-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"end-point": {
+"id": "end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connectivity-constraint": {
+"id": "connectivity-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"routing-constraint": {
+"id": "routing-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"topology-constraint": {
+"id": "topology-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"resilience-constraint": {
+"id": "resilience-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"state": {
+"id": "state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service": {
+"id": "service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"delete-connectivity-service": {
+"id": "delete-connectivity-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-id-or-name": {
+"id": "service-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+}}
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-dsr@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-dsr@2018-08-31.schema-information.json
new file mode 100644
index 0000000..14b1c57
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-dsr@2018-08-31.schema-information.json
@@ -0,0 +1,203 @@
+{ "schama-information": {
+
+"tapi-dsr": {
+"id": "tapi-dsr", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE": {
+"id": "DIGITAL_SIGNAL_TYPE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_GigE": {
+"id": "DIGITAL_SIGNAL_TYPE_GigE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_10_GigE_LAN": {
+"id": "DIGITAL_SIGNAL_TYPE_10_GigE_LAN", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_10_GigE_WAN": {
+"id": "DIGITAL_SIGNAL_TYPE_10_GigE_WAN", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_40_GigE": {
+"id": "DIGITAL_SIGNAL_TYPE_40_GigE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_100_GigE": {
+"id": "DIGITAL_SIGNAL_TYPE_100_GigE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_FC_100": {
+"id": "DIGITAL_SIGNAL_TYPE_FC_100", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_FC_200": {
+"id": "DIGITAL_SIGNAL_TYPE_FC_200", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_FC_400": {
+"id": "DIGITAL_SIGNAL_TYPE_FC_400", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_FC_800": {
+"id": "DIGITAL_SIGNAL_TYPE_FC_800", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_FC_1200": {
+"id": "DIGITAL_SIGNAL_TYPE_FC_1200", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_FC_1600": {
+"id": "DIGITAL_SIGNAL_TYPE_FC_1600", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_FC_3200": {
+"id": "DIGITAL_SIGNAL_TYPE_FC_3200", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_STM_1": {
+"id": "DIGITAL_SIGNAL_TYPE_STM_1", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_STM_4": {
+"id": "DIGITAL_SIGNAL_TYPE_STM_4", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_STM_16": {
+"id": "DIGITAL_SIGNAL_TYPE_STM_16", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_STM_64": {
+"id": "DIGITAL_SIGNAL_TYPE_STM_64", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_STM_256": {
+"id": "DIGITAL_SIGNAL_TYPE_STM_256", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_OC_3": {
+"id": "DIGITAL_SIGNAL_TYPE_OC_3", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_OC_12": {
+"id": "DIGITAL_SIGNAL_TYPE_OC_12", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_OC_48": {
+"id": "DIGITAL_SIGNAL_TYPE_OC_48", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_OC_192": {
+"id": "DIGITAL_SIGNAL_TYPE_OC_192", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_OC_768": {
+"id": "DIGITAL_SIGNAL_TYPE_OC_768", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_OTU_1": {
+"id": "DIGITAL_SIGNAL_TYPE_OTU_1", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_OTU_2": {
+"id": "DIGITAL_SIGNAL_TYPE_OTU_2", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_OTU_2E": {
+"id": "DIGITAL_SIGNAL_TYPE_OTU_2E", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_OTU_3": {
+"id": "DIGITAL_SIGNAL_TYPE_OTU_3", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_OTU_4": {
+"id": "DIGITAL_SIGNAL_TYPE_OTU_4", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_GPON": {
+"id": "DIGITAL_SIGNAL_TYPE_GPON", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_XGPON": {
+"id": "DIGITAL_SIGNAL_TYPE_XGPON", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_IB_SDR": {
+"id": "DIGITAL_SIGNAL_TYPE_IB_SDR", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_IB_DDR": {
+"id": "DIGITAL_SIGNAL_TYPE_IB_DDR", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_IB_QDR": {
+"id": "DIGITAL_SIGNAL_TYPE_IB_QDR", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_SBCON_ESCON": {
+"id": "DIGITAL_SIGNAL_TYPE_SBCON_ESCON", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_DVB_ASI": {
+"id": "DIGITAL_SIGNAL_TYPE_DVB_ASI", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_SDI": {
+"id": "DIGITAL_SIGNAL_TYPE_SDI", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_SDI_1G5": {
+"id": "DIGITAL_SIGNAL_TYPE_SDI_1G5", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DIGITAL_SIGNAL_TYPE_SDI_3G": {
+"id": "DIGITAL_SIGNAL_TYPE_SDI_3G", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"digital-signal-type": {
+"id": "digital-signal-type", 
+"is-read-only": false, 
+"description": ["none"]
+}}
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-eth@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-eth@2018-08-31.schema-information.json
new file mode 100644
index 0000000..8e8b903
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-eth@2018-08-31.schema-information.json
@@ -0,0 +1,1778 @@
+{ "schama-information": {
+
+"tapi-eth": {
+"id": "tapi-eth", 
+"is-read-only": false, 
+"description": ["This module contains TAPI ETH Model definitions. Source: TapiEth.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
+},
+"auxiliary-function-position-sequence": {
+"id": "auxiliary-function-position-sequence", 
+"is-read-only": false, 
+"description": ["This attribute indicates the positions (i.e., the relative order) of all the MEP, MIP, and TCS objects which are associated with the CTP."]
+},
+"vlan-config": {
+"id": "vlan-config", 
+"is-read-only": false, 
+"description": ["This attribute models the ETHx/ETH-m_A_So_MI_Vlan_Config information defined in G.8021. range of type : -1, 0, 1..4094"]
+},
+"csf-rdi-fdi-enable": {
+"id": "csf-rdi-fdi-enable", 
+"is-read-only": false, 
+"description": ["This attribute models the MI_CSFrdifdiEnable information defined in G.8021."]
+},
+"csf-report": {
+"id": "csf-report", 
+"is-read-only": false, 
+"description": ["This attribute models the MI_CSF_Reported information defined in G.8021. range of type : true, false"]
+},
+"filter-config-snk": {
+"id": "filter-config-snk", 
+"is-read-only": false, 
+"description": ["This attribute models the FilteConfig MI defined in 8.3/G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are: 01-80-C2-00-00-10, 01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 01-80-C2-00-00-20 to 01-80-C2-00-00-2F. The filter action is Pass or Block. If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. If none of the above addresses match, the ETH_CI_D is passed."]
+},
+"mac-length": {
+"id": "mac-length", 
+"is-read-only": false, 
+"description": ["This attribute models the MAC_Lenght MI defined in 8.6/G.8021 for the MAC Length Check process. It indicates the allowed maximum frame length in bytes. range of type : 1518, 1522, 2000"]
+},
+"filter-config": {
+"id": "filter-config", 
+"is-read-only": false, 
+"description": ["This attribute models the FilterConfig MI defined in section 8.3/G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are: - All bridges address: 01-80-C2-00-00-10, - Reserved addresses: 01-80-C2-00-00-00 to 01-80-C2-00-00-0F, - GARP Application addresses: 01-80-C2-00-00-20 to 01-80-C2-00-00-2F. The filter action is Pass or Block. If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. If none of the above addresses match, the ETH_CI_D is passed."]
+},
+"is-ssf-reported": {
+"id": "is-ssf-reported", 
+"is-read-only": false, 
+"description": ["This attribute provisions whether the SSF defect should be reported as fault cause or not. It models the ETH-LAG_FT_Sk_MI_SSF_Reported defined in G.8021."]
+},
+"pll-thr": {
+"id": "pll-thr", 
+"is-read-only": false, 
+"description": ["This attribute provisions the threshold for the number of active ports. If the number of active ports is more than zero but less than the provisioned threshold, a cPLL (Partial Link Loss) is raised. See section 9.7.1.2 of G.8021. range of type : 0..number of ports"]
+},
+"actor-oper-key": {
+"id": "actor-oper-key", 
+"is-read-only": false, 
+"description": ["See 802.1AX: The current operational value of the Key for the Aggregator. The administrative Key value may differ from the operational Key value for the reasons discussed in 5.6.2. The meaning of particular Key values is of local significance. range of type : 16 bit"]
+},
+"actor-system-id": {
+"id": "actor-system-id", 
+"is-read-only": false, 
+"description": ["See 802.1AX: A MAC address used as a unique identifier for the System that contains this Aggregator."]
+},
+"actor-system-priority": {
+"id": "actor-system-priority", 
+"is-read-only": false, 
+"description": ["See 802.1AX: Indicating the priority associated with the Actor’s System ID. range of type : 2-octet"]
+},
+"collector-max-delay": {
+"id": "collector-max-delay", 
+"is-read-only": false, 
+"description": ["See 802.1AX: The value of this attribute defines the maximum delay, in tens of microseconds, that may be imposed by the Frame Collector between receiving a frame from an Aggregator Parser, and either delivering the frame to its MAC Client or discarding the frame (see IEEE 802.1AX clause 5.2.3.1.1). range of type : 16-bit"]
+},
+"data-rate": {
+"id": "data-rate", 
+"is-read-only": false, 
+"description": ["See 802.1AX: The current data rate, in bits per second, of the aggregate link. The value is calculated as N times the data rate of a single link in the aggregation, where N is the number of active links."]
+},
+"partner-oper-key": {
+"id": "partner-oper-key", 
+"is-read-only": false, 
+"description": ["See 802.1AX: The current operational value of the Key for the Aggregator’s current protocol Partner. If the aggregation is manually configured, this Key value will be a value assigned by the local System. range of type : 16-bit"]
+},
+"partner-system-id": {
+"id": "partner-system-id", 
+"is-read-only": false, 
+"description": ["See 802.1AX: A MAC address consisting of the unique identifier for the current protocol Partner of this Aggregator. A value of zero indicates that there is no known Partner. If the aggregation is manually configured, this System ID value will be a value assigned by the local System."]
+},
+"partner-system-priority": {
+"id": "partner-system-priority", 
+"is-read-only": false, 
+"description": ["See 802.1AX: Indicates the priority associated with the Partner’s System ID. If the aggregation is manually configured, this System Priority value will be a value assigned by the local System. range of type : 2-octet"]
+},
+"csf-config": {
+"id": "csf-config", 
+"is-read-only": false, 
+"description": ["This attribute models the combination of all CSF related MI signals (MI_CSF_Enable, MI_CSFrdifdi_Enable, MI_CSFdci_Enable) as defined in G.8021. range of type : true, false"]
+},
+"traffic-shaping": {
+"id": "traffic-shaping", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"traffic-conditioning": {
+"id": "traffic-conditioning", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"eth-ctp-pac-g": {
+"id": "eth-ctp-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ety-term": {
+"id": "ety-term", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"eth-term": {
+"id": "eth-term", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"eth-ctp": {
+"id": "eth-ctp", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"eth-connection-end-point-spec-g": {
+"id": "eth-connection-end-point-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"priority-regenerate": {
+"id": "priority-regenerate", 
+"is-read-only": false, 
+"description": ["This attribute models the ETHx/ETH-m _A_Sk_MI_P_Regenerate information defined in G.8021."]
+},
+"ether-type": {
+"id": "ether-type", 
+"is-read-only": false, 
+"description": ["This attribute models the ETHx/ETH-m _A_Sk_MI_Etype information defined in G.8021."]
+},
+"filter-config-1": {
+"id": "filter-config-1", 
+"is-read-only": false, 
+"description": ["This attribute models the ETHx/ETH-m_A_Sk_MI_Filter_Config information defined in G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are: 01-80-C2-00-00-10, 01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 01-80-C2-00-00-20 to 01-80-C2-00-00-2F. The filter action is Pass or Block. If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. If none of the above addresses match, the ETH_CI_D is passed. range of type : MacAddress: 01-80-C2-00-00-10, 01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 01-80-C2-00-00-20 to 01-80-C2-00-00-2F; ActionEnum: PASS, BLOCK"]
+},
+"frametype-config": {
+"id": "frametype-config", 
+"is-read-only": false, 
+"description": ["This attribute models the ETHx/ETH-m_A_Sk_MI_Frametype_Config information defined in G.8021. range of type : see Enumeration"]
+},
+"port-vid": {
+"id": "port-vid", 
+"is-read-only": false, 
+"description": ["This attribute models the ETHx/ETH-m _A_Sk_MI_PVID information defined in G.8021."]
+},
+"priority-code-point-config": {
+"id": "priority-code-point-config", 
+"is-read-only": false, 
+"description": ["This attribute models the ETHx/ETH-m _A_Sk_MI_PCP_Config information defined in G.8021. range of type : see Enumeration"]
+},
+"eth-termination-pac-g": {
+"id": "eth-termination-pac-g", 
+"is-read-only": false, 
+"description": ["This object class models the Ethernet Flow Termination function located at a layer boundary."]
+},
+"is-fts-enabled": {
+"id": "is-fts-enabled", 
+"is-read-only": false, 
+"description": ["This attribute indicates whether Forced Transmitter Shutdown (FTS) is enabled or not. It models the ETYn_TT_So_MI_FTSEnable information."]
+},
+"is-tx-pause-enabled": {
+"id": "is-tx-pause-enabled", 
+"is-read-only": false, 
+"description": ["This attribute identifies whether the Transmit Pause process is enabled or not. It models the MI_TxPauseEnable defined in G.8021."]
+},
+"phy-type": {
+"id": "phy-type", 
+"is-read-only": false, 
+"description": ["This attribute identifies the PHY type of the ETY trail termination. See IEEE 802.3 clause 30.3.2.1.2."]
+},
+"phy-type-list": {
+"id": "phy-type-list", 
+"is-read-only": false, 
+"description": ["This attribute identifies the possible PHY types that could be supported at the ETY trail termination. See IEEE 802.3 clause 30.3.2.1.3."]
+},
+"ety-termination-pac-g": {
+"id": "ety-termination-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"prio-config-list": {
+"id": "prio-config-list", 
+"is-read-only": false, 
+"description": ["This attribute indicates the Priority Splitter function for the mapping of the Ethernet frame priority (ETH_CI_P) values to the output queue."]
+},
+"cond-config-list": {
+"id": "cond-config-list", 
+"is-read-only": false, 
+"description": ["This attribute indicates for the conditioner process the conditioning parameters: - Queue ID: Indicates the Queue ID - Committed Information Rate (CIR): number of bits per second - Committed Burst Size (CBS): number of bytes - Excess Information Rate (EIR): number of bits per second - Excess Burst Size (EBS): number of bytes - Coupling flag (CF): 0 or 1 - Color mode (CM): color-blind and color-aware."]
+},
+"codirectional": {
+"id": "codirectional", 
+"is-read-only": false, 
+"description": ["This attribute indicates the direction of the conditioner. The value of true means that the conditioner (modeled as a TCS Sink according to G.8021) is associated with the sink part of the containing CTP. The value of false means that the conditioner (modeled as a TCS Sink according to G.8021) is associated with the source part of the containing CTP."]
+},
+"traffic-conditioning-pac-g": {
+"id": "traffic-conditioning-pac-g", 
+"is-read-only": false, 
+"description": ["This object class models the ETH traffic conditioning function as defined in G.8021. Basic attributes: codirectional, condConfigList, prioConfigList"]
+},
+"prio-config-list": {
+"id": "prio-config-list", 
+"is-read-only": false, 
+"description": ["This attribute configures the Priority Splitter function for the mapping of the Ethernet frame priority (ETH_CI_P) values to the output queue."]
+},
+"queue-config-list": {
+"id": "queue-config-list", 
+"is-read-only": false, 
+"description": ["This attribute configures the Queue depth and Dropping threshold parameters of the Queue process. The Queue depth sets the maximum size of the queue in bytes. An incoming ETH_CI traffic unit is dropped if there is insufficient space in the queue to hold the whole unit. The Dropping threshold sets the threshold of the queue. If the queue is filled beyond this threshold, incoming ETH_CI traffic units accompanied by the ETH_CI_DE signal set are dropped."]
+},
+"sched-config": {
+"id": "sched-config", 
+"is-read-only": false, 
+"description": ["This attribute configures the scheduler process. The value of this attribute is for further study because it is for further study in G.8021. Scheduler is a pointer to a Scheduler object, which is to be defined in the future (because in G.8021, this is FFS). Note that the only significance of the GTCS function defined in G.8021 is the use of a common scheduler for shaping. Given that, G.8052 models the common scheduler feature by having a common value for this attribute."]
+},
+"codirectional": {
+"id": "codirectional", 
+"is-read-only": false, 
+"description": ["This attribute indicates the direction of the shaping function. The value of true means that the shaping (modeled as a TCS Source according to G.8021) is associated with the source part of the containing CTP. The value of false means that the shaping (modeled as a TCS Source according to G.8021) is associated with the sink part of the containing CTP."]
+},
+"traffic-shaping-pac-g": {
+"id": "traffic-shaping-pac-g", 
+"is-read-only": false, 
+"description": ["This object class models the ETH traffic shaping function as defined in G.8021. Basic attribute: codirectional, prioConfigList, queueConfigList, schedConfig"]
+},
+"client-mel": {
+"id": "client-mel", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"eth-meg-spec-g": {
+"id": "eth-meg-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"eth-mep-common": {
+"id": "eth-mep-common", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"eth-mep-source-pac": {
+"id": "eth-mep-source-pac", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"eth-mep-sink": {
+"id": "eth-mep-sink", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"eth-mep-spec-g": {
+"id": "eth-mep-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"eth-mip-spec-g": {
+"id": "eth-mip-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"eth-lb-msg": {
+"id": "eth-lb-msg", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"number": {
+"id": "number", 
+"is-read-only": false, 
+"description": ["G.8052: This parameter specifies how many LB messages to be sent for the LB_Series process."]
+},
+"eth-loopback-job-g": {
+"id": "eth-loopback-job-g", 
+"is-read-only": false, 
+"description": ["This class represents the Loopback (LB) process (send a series of LB messages carrying a test pattern to a particular MEP). The termination occurs at specified stop time (schedule attribute of OamJob). This class models also the 'loopback discover' process, when destinationAddress is multicast. When number is greater than 1, then the process is to perform a Loopback (LB) Series process (send a series of N LB messages to a particular MEP/MIP."]
+},
+"mep-mac": {
+"id": "mep-mac", 
+"is-read-only": false, 
+"description": ["This attribute contains the MAC Address of the MEP."]
+},
+"is-cc-enabled": {
+"id": "is-cc-enabled", 
+"is-read-only": false, 
+"description": ["This attribute models the MI_CC_Enable signal defined in G.8021 and configured as specified in G8051."]
+},
+"cc-period": {
+"id": "cc-period", 
+"is-read-only": false, 
+"description": ["This attribute models the MI_CC_Period signal defined in G.8021 and configured as specified in G8051. It is the period at which the CCM message should be sent. Default values are: 3.33 ms for PS, 100 ms for PM, 1 s for FM."]
+},
+"cc-priority": {
+"id": "cc-priority", 
+"is-read-only": false, 
+"description": ["This attribute models the MI_CC_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the CCM message should be sent."]
+},
+"lck-period": {
+"id": "lck-period", 
+"is-read-only": false, 
+"description": ["This attribute models the MI_LCK_Period signal defined in G.8021 and configured as specified in G8051. It is the frequency at which the LCK messages should be sent. range of type : 1s, 1min"]
+},
+"lck-priority": {
+"id": "lck-priority", 
+"is-read-only": false, 
+"description": ["This attribute models the MI_LCK_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the LCK messages should be sent."]
+},
+"eth-mep-common-g": {
+"id": "eth-mep-common-g", 
+"is-read-only": false, 
+"description": ["Basic attributes: adminState, clientMel, megIdentifier, mepMac Continuity Check Process related attributes: ccPeriod, ccPriority, isCcEnabled Lock Process related attributes: lckPeriod, lckPriority This object class models the MEP functions that are common to MEP Sink and MEP Source."]
+},
+"dm-1-priority": {
+"id": "dm-1-priority", 
+"is-read-only": false, 
+"description": ["This attribute indicates the list of 1DM priorities for the MepSink."]
+},
+"ais-priority": {
+"id": "ais-priority", 
+"is-read-only": false, 
+"description": ["This attribute models the MI_AIS_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the AIS messages should be sent."]
+},
+"ais-period": {
+"id": "ais-period", 
+"is-read-only": false, 
+"description": ["This attribute models the MI_AIS_Period signal defined in G.8021 and configured as specified in G8051. It is the frequency at which the AIS messages should be sent. range of type : 1s, 1min"]
+},
+"is-csf-reported": {
+"id": "is-csf-reported", 
+"is-read-only": false, 
+"description": ["This attribute models the MI_CSF_Reported signal defined in G.8021 and configured as specified in G8051. It configures whether the secondary failure CSF should be reported or not."]
+},
+"is-csf-rdi-fdi-enabled": {
+"id": "is-csf-rdi-fdi-enabled", 
+"is-read-only": false, 
+"description": ["This attribute models the MI_CSFrdifdiEnable signal defined in G.8021 and configured as specified in G8051."]
+},
+"bandwidth-report": {
+"id": "bandwidth-report", 
+"is-read-only": false, 
+"description": ["This attribute models the content of the bandwidth report received by the MEP Sink from the peer MEP Source."]
+},
+"lm-degm": {
+"id": "lm-degm", 
+"is-read-only": false, 
+"description": ["This attribute defines the number of consecutive bad seconds necessary for the 'degraded' detection. See also section 'Degraded signal defect (dDEG)' in G.8021."]
+},
+"lm-deg-thr": {
+"id": "lm-deg-thr", 
+"is-read-only": false, 
+"description": ["This attribute defines the threshold for declaring a 'bad second'. See also section 'Degraded signal defect (dDEG)' in G.8021."]
+},
+"lm-m": {
+"id": "lm-m", 
+"is-read-only": false, 
+"description": ["This attribute defines the number of consecutive good seconds necessary for the clearing of 'degraded'. See also section 'Degraded signal defect (dDEG)' in G.8021."]
+},
+"lm-tf-min": {
+"id": "lm-tf-min", 
+"is-read-only": false, 
+"description": ["This attribute defines the necessary number of transmitted frames to enable the detection of 'bad seconds'. See also section 'Degraded signal defect (dDEG)' in G.8021."]
+},
+"eth-mep-sink-g": {
+"id": "eth-mep-sink-g", 
+"is-read-only": false, 
+"description": ["1DM related attribute: 1DmPriority AIS Process related attributes: aisPeriod, aisPriority Bandwidth notification Process related attribute: bandwidthReport Basic attribute: peerMepRefList CSF Process related attributes: isCsfRdiFdiEnabled, isCsfReported Defect correlation Process related attribute: currentProblemList This object class models the MEP sink function. Instance of this object class can be created and contained by ETH CTP or TTP objects. It also provides the management of the dual-ended maintenance job, such as test. This object contains the configuration parameters for detecting 'degraded signal' (DEG)."]
+},
+"aps-priority": {
+"id": "aps-priority", 
+"is-read-only": false, 
+"description": ["This attribute specifies the priority of the APS messages. See section 8.1.5 APS insert process in G.8021."]
+},
+"csf-priority": {
+"id": "csf-priority", 
+"is-read-only": false, 
+"description": ["This attribute models the MI_CSF_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the CSF messages should be sent"]
+},
+"csf-period": {
+"id": "csf-period", 
+"is-read-only": false, 
+"description": ["This attribute models the MI_CSF_Period signal defined in G.8021 and configured as specified in G8051. It is the period at which the CSF messages should be sent. range of type : 1s, 1min"]
+},
+"csf-config": {
+"id": "csf-config", 
+"is-read-only": false, 
+"description": ["This attribute models the combination of all CSF related MI signals (MI_CSF_Enable, MI_CSFrdifdi_Enable, MI_CSFdci_Enable) as defined in G.8021."]
+},
+"eth-mep-source-g": {
+"id": "eth-mep-source-g", 
+"is-read-only": false, 
+"description": ["APS Process related attribute: apsPriority Basic attribute: mepIdentifier CSF Process related attributes: csfConfig, csfPeriod, csfPriority Link trace related operation: linkTrace Loopback related operations: loopbackDiscover, loopbackSeries, loopbackTest, loopbackTestTerminate On demand measurement job control related operation: establishOnDemandDualEndedMeasurementJobSource Proactive measurement job control related operation: establishProActiveDualEndedMeasurementJobSource Test related operations: testInitiatorStart, testInitiatorTerminate This object class models the MEP source function. Instance of this object class can be created and contained by ETH CTP or TTP objects. It also provides the management of single-ended maintenance jobs, such as loopback test, loopback discover, loopback series, link trace, and dual-ended maintenance job, such as test."]
+},
+"eth-lt-msg": {
+"id": "eth-lt-msg", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time-to-live": {
+"id": "time-to-live", 
+"is-read-only": false, 
+"description": ["G.8052: This parameter provides the Time To Live (TTL) parameter of the Link Track protocol. The TTL parameter allows the receiver (MIP or MEP) of the LTM frame to determine if the frame can be terminated. TTL is decremented every time the LTM frame is relayed. LTM frame with TTL<=1 is terminated and not relayed."]
+},
+"eth-link-trace-job-g": {
+"id": "eth-link-trace-job-g", 
+"is-read-only": false, 
+"description": ["This class represents the Link Trace (LT) process for fault localization or for discovering the intermediate MIPs along the link from the MEP Source to a target MEP or MIP. An LTM frame will be sent from the MEP source to the target MEP/MIP. The termination occurs at specified stop time (schedule attribute of OamJob)."]
+},
+"eth-test-msg": {
+"id": "eth-test-msg", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"eth-test-job-g": {
+"id": "eth-test-job-g", 
+"is-read-only": false, 
+"description": ["This class represents the 1-way on-demand in-service or out-of-service diagnostic test. The diagnostic test includes verifying bandwidth throughput, frame loss, bit errors, etc. TST frames are transmitted. The termination occurs at specified stop time (schedule attribute of OamJob)."]
+},
+"responder-mep-id": {
+"id": "responder-mep-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"source-address": {
+"id": "source-address", 
+"is-read-only": false, 
+"description": ["This attribute contains the MAC address of the peer MEP. See G.8013 for details."]
+},
+"priority": {
+"id": "priority", 
+"is-read-only": false, 
+"description": ["This attribute contains the priority of the OAM PDU frames. range of type : 0, 1, 2, 3, 4, 5, 6, 7"]
+},
+"test-identifier": {
+"id": "test-identifier", 
+"is-read-only": false, 
+"description": ["This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP. range of type : 0..(2^32) - 1"]
+},
+"eth-on-demand-measurement-job-control-sink-g": {
+"id": "eth-on-demand-measurement-job-control-sink-g", 
+"is-read-only": false, 
+"description": ["This object class represents an on-demand measurement job controller sink for 1-way measurements. It is created as a result of an establishOnDemandDualEndedMeasurementJobSink() operation. It is deleted either automatically after the measurement job has completed (stop time reached) and the performance data AVC notification has been sent, or by an explicit abortOnDemandMeasurementJob() operation when the measurement job is running."]
+},
+"controller-mep-id": {
+"id": "controller-mep-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-pdu-generation-type": {
+"id": "oam-pdu-generation-type", 
+"is-read-only": false, 
+"description": ["This attribute contains the pattern that is used for the generation of OAM PDUs."]
+},
+"destination-address": {
+"id": "destination-address", 
+"is-read-only": false, 
+"description": ["This attribute contains the MAC address of the peer MEP. See G.8013 for details."]
+},
+"priority": {
+"id": "priority", 
+"is-read-only": false, 
+"description": ["This attribute contains the priority of the OAM PDU frames. range of type : 0, 1, 2, 3, 4, 5, 6, 7"]
+},
+"message-period": {
+"id": "message-period", 
+"is-read-only": false, 
+"description": ["This attribute contains the frequency of the OAM message (PDU) generation within a series. Note that the value 0 means that only one OAM message per measurement interval is generated. range of type : See corresponding Enum."]
+},
+"repetition-period": {
+"id": "repetition-period", 
+"is-read-only": false, 
+"description": ["This attribute contains the time between the start of two measurement intervals. This IS applicable for the repetitive instance type and MAY be applicable for the repetitive series type. Note that a value of 0 means not applicable (NA), which is for the cases of single instance, single series, or repetitive series without extra gap in between the measurement intervals (i.e., also as known as continuous series)."]
+},
+"measurement-interval": {
+"id": "measurement-interval", 
+"is-read-only": false, 
+"description": ["This attribute contains the discrete non overlapping periods of time (in seconds) during which measurements are performed (i.e., OAM messages are generated) and reports are gathered at the end of the measurement intervals. Note that the value 0 means a degenerated measurement interval with a single OAM message and the report is sent as immediately as possible. range of type : Non-negative"]
+},
+"test-identifier": {
+"id": "test-identifier", 
+"is-read-only": false, 
+"description": ["This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP. Note: The attribute is not used in case of LMM/LMR measurement. range of type : 0..(2^32) - 1"]
+},
+"data-tlv-length": {
+"id": "data-tlv-length", 
+"is-read-only": false, 
+"description": ["This parameter provides the size of the optional data TLV. Non-negative integer represents the number of bytes for the length of the padding TLV. Notes: When configuring this parameter one should be aware of the maximum allowed total frame size limitation. The attribute is not used in case of 2-way loss measurement. range of type : Depends on the allowed MTU size."]
+},
+"eth-on-demand-measurement-job-control-source-g": {
+"id": "eth-on-demand-measurement-job-control-source-g", 
+"is-read-only": false, 
+"description": ["Basic attributes: destinationAddress, priority Measurement configuration related attributes: oamPduGenerationType, startTime, stopTime, messagePeriod, repetitionPeriod, measurementInterval Optional attributes: dataTlvLength, testIdentifier This object class represents an on-demand measurement job controller source for 1-way measurements. It is created as a result of an establishOnDemandDualEndedMeasurementJobSource() operation. It is deleted either automatically after the measurement job has completed (stop time reached), or by an explicit abortOnDemandMeasurementJob() operation while the measurement job is running."]
+},
+"responder-mep-id": {
+"id": "responder-mep-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"is-enabled": {
+"id": "is-enabled", 
+"is-read-only": false, 
+"description": ["This attribute identifies the state of the measurement job. If set to TRUE, the MEP performs proactive Performance Measurement."]
+},
+"source-address": {
+"id": "source-address", 
+"is-read-only": false, 
+"description": ["This attribute contains the MAC address of the peer MEP. See G.8013 for details."]
+},
+"test-identifier": {
+"id": "test-identifier", 
+"is-read-only": false, 
+"description": ["This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP. range of type : 0..(2^32) - 1"]
+},
+"eth-pro-active-measurement-job-control-sink-g": {
+"id": "eth-pro-active-measurement-job-control-sink-g", 
+"is-read-only": false, 
+"description": ["This object class allows the control of the proactive 1-way measurement. It is created as a part of an establishProActiveDualEndedMeasurementJobSink() operation. Lifecycle: A pre-condition of deleting the object is that the “Enable” attribute should have the value “FALSE”."]
+},
+"controller-mep-id": {
+"id": "controller-mep-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"is-enabled": {
+"id": "is-enabled", 
+"is-read-only": false, 
+"description": ["This attribute identifies the state of the measurement job. If set to TRUE, the MEP performs proactive Performance Measurement."]
+},
+"destination-address": {
+"id": "destination-address", 
+"is-read-only": false, 
+"description": ["This attribute provides the Unicast MAC address of the intented destination."]
+},
+"priority": {
+"id": "priority", 
+"is-read-only": false, 
+"description": ["This attribute contains the priority value on which the MEP performs the measurement. When the measurement is enabled, the MEP should use this value to encode the priority of generated measurement frames. The EMF usese this value to assign the “P” parameter of the measurement operation."]
+},
+"period": {
+"id": "period", 
+"is-read-only": false, 
+"description": ["This attribute indicates the period (frequency) of the measurement frame transmission. range of type : 100ms, 1s, 10s"]
+},
+"test-identifier": {
+"id": "test-identifier", 
+"is-read-only": false, 
+"description": ["This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP. Note: The attribute is not used in case of 2-way loss measurement. range of type : 0..(2^32) - 1"]
+},
+"data-tlv-length": {
+"id": "data-tlv-length", 
+"is-read-only": false, 
+"description": ["This parameter provides the size of the optional data TLV. Non-negative integer represents the number of bytes for the length of the padding TLV. Notes: When configuring this parameter one should be aware of the maximum allowed total frame size limitation. The attribute is not used in case of 2-way loss measurement. range of type : Depends on the allowed MTU size."]
+},
+"eth-pro-active-measurement-job-control-source-g": {
+"id": "eth-pro-active-measurement-job-control-source-g", 
+"is-read-only": false, 
+"description": ["This object class represents a proactive measurement job controller source for 1way measurements. It is created as a part of an establishProactiveDualEndedMeasurementJobSource() operation."]
+},
+"pro-active-near-end-1-dm-parameters": {
+"id": "pro-active-near-end-1-dm-parameters", 
+"is-read-only": false, 
+"description": ["This attribute contains the statistical near end performnace parameters."]
+},
+"eth-pro-active-1-dm-performance-data-g": {
+"id": "eth-pro-active-1-dm-performance-data-g", 
+"is-read-only": false, 
+"description": ["This object class represents the PM current data collected in a pro-active delay measurement job (using 1DM)."]
+},
+"pro-active-near-end-1-lm-parameters": {
+"id": "pro-active-near-end-1-lm-parameters", 
+"is-read-only": false, 
+"description": ["This attribute contains the statistical near end performnace parameters."]
+},
+"eth-pro-active-1-lm-performance-data-g": {
+"id": "eth-pro-active-1-lm-performance-data-g", 
+"is-read-only": false, 
+"description": ["This object class represents the PM current data collected in a pro-active loss measurement job (using 1SL)."]
+},
+"pro-active-bi-dir-dm-parameters": {
+"id": "pro-active-bi-dir-dm-parameters", 
+"is-read-only": false, 
+"description": ["This attribute contains the statistical bidirectional performnace parameters."]
+},
+"pro-active-far-end-dm-parameters": {
+"id": "pro-active-far-end-dm-parameters", 
+"is-read-only": false, 
+"description": ["This attribute contains the statistical far end performnace parameters."]
+},
+"pro-active-near-end-dm-parameters": {
+"id": "pro-active-near-end-dm-parameters", 
+"is-read-only": false, 
+"description": ["This attribute contains the statistical near end performnace parameters."]
+},
+"eth-pro-active-dm-performance-data-g": {
+"id": "eth-pro-active-dm-performance-data-g", 
+"is-read-only": false, 
+"description": ["This object class represents the PM current data collected in a pro-active delay measurement job (using DMM/DMR)."]
+},
+"pro-active-far-end-lm-parameters": {
+"id": "pro-active-far-end-lm-parameters", 
+"is-read-only": false, 
+"description": ["This attribute contains the statistical far end performnace parameters."]
+},
+"pro-active-near-end-lm-parameters": {
+"id": "pro-active-near-end-lm-parameters", 
+"is-read-only": false, 
+"description": ["This attribute contains the statistical near end performnace parameters."]
+},
+"bidirectional-uas": {
+"id": "bidirectional-uas", 
+"is-read-only": false, 
+"description": ["This attribute contains the bidirectional UAS (unavailable seconds) detected in the monitoring interval. range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval."]
+},
+"eth-pro-active-lm-performance-data-g": {
+"id": "eth-pro-active-lm-performance-data-g", 
+"is-read-only": false, 
+"description": ["This object class represents the PM current data collected in a pro-active loss measurement job (using LMM/LMR or SLM/SLR)."]
+},
+"on-demand-near-end-1-dm-parameters": {
+"id": "on-demand-near-end-1-dm-parameters", 
+"is-read-only": false, 
+"description": ["This attribute contains the results of an on-demand frame delay measurement job in the ingress direction."]
+},
+"eth-on-demand-1-dm-performance-data-g": {
+"id": "eth-on-demand-1-dm-performance-data-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"on-demand-near-end-1-lm-parameters": {
+"id": "on-demand-near-end-1-lm-parameters", 
+"is-read-only": false, 
+"description": ["This attribute contains the results of an on-demand synthetic loss measurement job in the ingress direction."]
+},
+"eth-on-demand-1-lm-performance-data-g": {
+"id": "eth-on-demand-1-lm-performance-data-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"on-demand-far-end-dm-parameters": {
+"id": "on-demand-far-end-dm-parameters", 
+"is-read-only": false, 
+"description": ["This attribute contains the results of an on-demand frame delay measurement job in the ingress direction."]
+},
+"on-demand-near-end-dm-parameters": {
+"id": "on-demand-near-end-dm-parameters", 
+"is-read-only": false, 
+"description": ["This attribute contains the results of an on-demand frame delay measurement job in the ingress direction."]
+},
+"eth-on-demand-dm-performance-data-g": {
+"id": "eth-on-demand-dm-performance-data-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"on-demand-far-end-lm-parameters": {
+"id": "on-demand-far-end-lm-parameters", 
+"is-read-only": false, 
+"description": ["This attribute contains the results of an on-demand synthetic loss measurement job in the egress direction."]
+},
+"on-demand-near-end-lm-parameters": {
+"id": "on-demand-near-end-lm-parameters", 
+"is-read-only": false, 
+"description": ["This attribute contains the results of an on-demand synthetic loss measurement job in the ingress direction."]
+},
+"eth-on-demand-lm-performance-data-g": {
+"id": "eth-on-demand-lm-performance-data-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pro-active-control-1way-source": {
+"id": "pro-active-control-1way-source", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pro-active-control-1way-sink": {
+"id": "pro-active-control-1way-sink", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"eth-pro-active-1way-measurement-job-g": {
+"id": "eth-pro-active-1way-measurement-job-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pro-active-control-2way-source": {
+"id": "pro-active-control-2way-source", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"eth-pro-active-2way-measurement-job-g": {
+"id": "eth-pro-active-2way-measurement-job-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"on-demand-control-2way-source": {
+"id": "on-demand-control-2way-source", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"eth-on-demand-2way-measurement-job-g": {
+"id": "eth-on-demand-2way-measurement-job-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"on-demand-control-1way-source": {
+"id": "on-demand-control-1way-source", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"on-demand-control-1way-sink": {
+"id": "on-demand-control-1way-sink", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"eth-on-demand-1way-measurement-job-g": {
+"id": "eth-on-demand-1way-measurement-job-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"near-end-1-dm-cross-threshold": {
+"id": "near-end-1-dm-cross-threshold", 
+"is-read-only": false, 
+"description": ["This attribute contains the near end cross threshold values of the delay measurements."]
+},
+"near-end-1-dm-clear-threshold": {
+"id": "near-end-1-dm-clear-threshold", 
+"is-read-only": false, 
+"description": ["This attribute contains the near end clear threshold values of the delay measurements."]
+},
+"eth-1-dm-threshold-data-g": {
+"id": "eth-1-dm-threshold-data-g", 
+"is-read-only": false, 
+"description": ["This data type contains the threshold values for frame delay related 1-way measurements."]
+},
+"near-end-1-lm-cross-threshold": {
+"id": "near-end-1-lm-cross-threshold", 
+"is-read-only": false, 
+"description": ["This attribute contains the near end cross threshold values of the loss measurements."]
+},
+"near-end-1-lm-clear-threshold": {
+"id": "near-end-1-lm-clear-threshold", 
+"is-read-only": false, 
+"description": ["This attribute is only valid for frame loss ratio parameters and counter type parameters working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the near end clear threshold values of the loss measurements."]
+},
+"eth-1-lm-threshold-data-g": {
+"id": "eth-1-lm-threshold-data-g", 
+"is-read-only": false, 
+"description": ["This data type contains the threshold values for frame loss related 1-way measurements."]
+},
+"near-end-dm-cross-threshold": {
+"id": "near-end-dm-cross-threshold", 
+"is-read-only": false, 
+"description": ["This attribute contains the near end cross threshold values of the delay measurements."]
+},
+"near-end-dm-clear-threshold": {
+"id": "near-end-dm-clear-threshold", 
+"is-read-only": false, 
+"description": ["This attribute contains the near end clear threshold values of the delay measurements."]
+},
+"far-end-dm-cross-threshold": {
+"id": "far-end-dm-cross-threshold", 
+"is-read-only": false, 
+"description": ["This attribute contains the far end cross threshold values of the delay measurements."]
+},
+"far-end-dm-clear-threshold": {
+"id": "far-end-dm-clear-threshold", 
+"is-read-only": false, 
+"description": ["This attribute contains the far end clear threshold values of the delay measurements."]
+},
+"bi-dir-dm-cross-threshold": {
+"id": "bi-dir-dm-cross-threshold", 
+"is-read-only": false, 
+"description": ["This attribute contains the bidirectional cross threshold values of the delay measurements."]
+},
+"bi-dir-dm-clear-threshold": {
+"id": "bi-dir-dm-clear-threshold", 
+"is-read-only": false, 
+"description": ["This attribute contains the bidirectional clear threshold values of the delay measurements."]
+},
+"eth-dm-threshold-data-g": {
+"id": "eth-dm-threshold-data-g", 
+"is-read-only": false, 
+"description": ["This data type contains the threshold values for frame delay related 2-way measurements."]
+},
+"near-end-lm-cross-threshold": {
+"id": "near-end-lm-cross-threshold", 
+"is-read-only": false, 
+"description": ["This attribute contains the near end cross threshold values of the loss measurements."]
+},
+"near-end-lm-clear-threshold": {
+"id": "near-end-lm-clear-threshold", 
+"is-read-only": false, 
+"description": ["This attribute is only valid for frame loss ratio parameters and counter type parameters working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the near end clear threshold values of the loss measurements."]
+},
+"far-end-lm-cross-threshold": {
+"id": "far-end-lm-cross-threshold", 
+"is-read-only": false, 
+"description": ["This attribute contains the far end cross threshold values of the loss measurements."]
+},
+"far-end-lm-clear-threshold": {
+"id": "far-end-lm-clear-threshold", 
+"is-read-only": false, 
+"description": ["This attribute is only valid for frame loss ratio parameters and counter type parameters working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the far end clear threshold values of the loss measurements."]
+},
+"bi-dir-lm-uas-cross-threshold": {
+"id": "bi-dir-lm-uas-cross-threshold", 
+"is-read-only": false, 
+"description": ["This attribute contains the bidirectional cross threshold value of the UAS loss measurement."]
+},
+"bi-dir-lm-uas-clear-threshold": {
+"id": "bi-dir-lm-uas-clear-threshold", 
+"is-read-only": false, 
+"description": ["This attribute is only valid for the UAS parameter working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the bidirectional clear threshold value of the UAS loss measurement."]
+},
+"eth-lm-threshold-data-g": {
+"id": "eth-lm-threshold-data-g", 
+"is-read-only": false, 
+"description": ["This data type contains the threshold values for frame loss related 2-way measurements."]
+},
+"rec-lbr-frames": {
+"id": "rec-lbr-frames", 
+"is-read-only": false, 
+"description": ["G.8052: This parameter returns the total number of received LBR messages, including the out of order LBR frames."]
+},
+"out-of-order-lbr-frames": {
+"id": "out-of-order-lbr-frames", 
+"is-read-only": false, 
+"description": ["G.8052: This parameter returns the number of LBR traffic unites (messages) that were received out of order (OO)."]
+},
+"sent-lbm-frames": {
+"id": "sent-lbm-frames", 
+"is-read-only": false, 
+"description": ["G.8052: This parameter returns the total number of sent LBM frames."]
+},
+"crc-lbr-frames": {
+"id": "crc-lbr-frames", 
+"is-read-only": false, 
+"description": ["G.8052: This parameter returns the number of LBR frames where the CRC in the pattern failed."]
+},
+"ber-lbr-frames": {
+"id": "ber-lbr-frames", 
+"is-read-only": false, 
+"description": ["G.8052: This parameter returns the number of LBR frames where there was a bit error in the pattern."]
+},
+"detected-peer-mep": {
+"id": "detected-peer-mep", 
+"is-read-only": false, 
+"description": ["G.8052: This parameter returns the MAC addresses of the discovered peer MEPs of the subject MEP."]
+},
+"eth-loopback-result-data-g": {
+"id": "eth-loopback-result-data-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"result-list": {
+"id": "result-list", 
+"is-read-only": false, 
+"description": ["G.8052: This parameter returns the results of the LT process. It contains a list of the result received from the individual LTR frames. The result from the individual LTR frame include the Source Mac Address, the TTL, and TLV."]
+},
+"eth-link-trace-result-data-g": {
+"id": "eth-link-trace-result-data-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"sent-tst-frames": {
+"id": "sent-tst-frames", 
+"is-read-only": false, 
+"description": ["G.8052: This parameter returns the total number of sent TST frames."]
+},
+"eth-test-result-data-g": {
+"id": "eth-test-result-data-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"destination-address": {
+"id": "destination-address", 
+"is-read-only": false, 
+"description": ["G.8052: This parameter provides the destination address, i.e., the MAC Address of the target MEP or MIP."]
+},
+"priority": {
+"id": "priority", 
+"is-read-only": false, 
+"description": ["G.8052: This parameter provides the priority to be used in the LBM frame."]
+},
+"eth-oam-operation-common-pac-g": {
+"id": "eth-oam-operation-common-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"period": {
+"id": "period", 
+"is-read-only": false, 
+"description": ["G.8052: This parameter provides the periodicity of the TST OAM messages."]
+},
+"drop-eligibility": {
+"id": "drop-eligibility", 
+"is-read-only": false, 
+"description": ["G.8052: This parameter provides the eligibility of frames with unicast ETH-TST information to be discarded when congestion conditions are encountered."]
+},
+"data-tlv-length": {
+"id": "data-tlv-length", 
+"is-read-only": false, 
+"description": ["G.8052: This parameter provides the length (in number of octet) of the optional Data TLV to be included in the TST frame."]
+},
+"test-pattern": {
+"id": "test-pattern", 
+"is-read-only": false, 
+"description": ["G.8052: This parameter provides the test pattern to be used in the optional Data TLV. Examples of test patterns include pseudo-random bit sequence (PRBS) 2^31-1 as specified in clause 5.8 of [ITU-T O.150], all '0' pattern, etc. The following values of pattern types are defined: 0: 'Null signal without CRC-32' 1: 'Null signal with CRC-32' 2: 'PRBS 2^31-1 without CRC-32' 3: 'PRBS 2^31-1 with CRC-32'."]
+},
+"eth-oam-msg-common-pac-g": {
+"id": "eth-oam-msg-common-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ETH_OAM_JOB_TYPE": {
+"id": "ETH_OAM_JOB_TYPE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ETH_OAM_JOB_TYPE_ETH_1DM": {
+"id": "ETH_OAM_JOB_TYPE_ETH_1DM", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ETH_OAM_JOB_TYPE_ETH_1SLM": {
+"id": "ETH_OAM_JOB_TYPE_ETH_1SLM", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ETH_OAM_JOB_TYPE_ETH_LM_CCM": {
+"id": "ETH_OAM_JOB_TYPE_ETH_LM_CCM", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ETH_OAM_JOB_TYPE_ETH_LM_LMM": {
+"id": "ETH_OAM_JOB_TYPE_ETH_LM_LMM", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ETH_OAM_JOB_TYPE_ETH_SLM": {
+"id": "ETH_OAM_JOB_TYPE_ETH_SLM", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ETH_OAM_JOB_TYPE_ETH_DM": {
+"id": "ETH_OAM_JOB_TYPE_ETH_DM", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ETH_OAM_JOB_TYPE_ETH_LTC": {
+"id": "ETH_OAM_JOB_TYPE_ETH_LTC", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ETH_OAM_JOB_TYPE_ETH_LBK": {
+"id": "ETH_OAM_JOB_TYPE_ETH_LBK", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ETH_OAM_JOB_TYPE_ETH_TEST": {
+"id": "ETH_OAM_JOB_TYPE_ETH_TEST", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"priority": {
+"id": "priority", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"queue-id": {
+"id": "queue-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"priority-configuration-g": {
+"id": "priority-configuration-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"queue-id": {
+"id": "queue-id", 
+"is-read-only": false, 
+"description": ["This attribute indicates the queue id."]
+},
+"queue-depth": {
+"id": "queue-depth", 
+"is-read-only": false, 
+"description": ["This attribute defines the depth of the queue in bytes."]
+},
+"queue-threshold": {
+"id": "queue-threshold", 
+"is-read-only": false, 
+"description": ["This attribute defines the threshold of the queue in bytes."]
+},
+"queue-configuration-g": {
+"id": "queue-configuration-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"cir": {
+"id": "cir", 
+"is-read-only": false, 
+"description": ["This attribute indicates the Committed Information Rate in bits/s."]
+},
+"cbs": {
+"id": "cbs", 
+"is-read-only": false, 
+"description": ["This attribute indicates the Committed Burst Size in bytes."]
+},
+"eir": {
+"id": "eir", 
+"is-read-only": false, 
+"description": ["This attribute indicates the Excess Information Rate in bits/s."]
+},
+"ebs": {
+"id": "ebs", 
+"is-read-only": false, 
+"description": ["This attribute indicates the Excess Burst Size in bytes."]
+},
+"coupling-flag": {
+"id": "coupling-flag", 
+"is-read-only": false, 
+"description": ["This attribute indicates the coupling flag."]
+},
+"colour-mode": {
+"id": "colour-mode", 
+"is-read-only": false, 
+"description": ["This attribute indicates the colour mode."]
+},
+"queue-id": {
+"id": "queue-id", 
+"is-read-only": false, 
+"description": ["This attribute indicates the queue id."]
+},
+"traffic-conditioning-configuration-g": {
+"id": "traffic-conditioning-configuration-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mac-address": {
+"id": "mac-address", 
+"is-read-only": false, 
+"description": ["This primitive data type contains an Ethernet MAC address defined by IEEE 802a. The format of the address consists of 12 hexadecimal characters, grouped in pairs and separated by '-' (e.g., 03-27-AC-75-3E-1D)."]
+},
+"priority-0": {
+"id": "priority-0", 
+"is-read-only": false, 
+"description": ["This attribute defines the new priority value for the old priority value 0."]
+},
+"priority-1": {
+"id": "priority-1", 
+"is-read-only": false, 
+"description": ["This attribute defines the new priority value for the old priority value 1."]
+},
+"priority-2": {
+"id": "priority-2", 
+"is-read-only": false, 
+"description": ["This attribute defines the new priority value for the old priority value 2."]
+},
+"priority-3": {
+"id": "priority-3", 
+"is-read-only": false, 
+"description": ["This attribute defines the new priority value for the old priority value 3."]
+},
+"priority-4": {
+"id": "priority-4", 
+"is-read-only": false, 
+"description": ["This attribute defines the new priority value for the old priority value 4."]
+},
+"priority-5": {
+"id": "priority-5", 
+"is-read-only": false, 
+"description": ["This attribute defines the new priority value for the old priority value 5."]
+},
+"priority-6": {
+"id": "priority-6", 
+"is-read-only": false, 
+"description": ["This attribute defines the new priority value for the old priority value 6."]
+},
+"priority-7": {
+"id": "priority-7", 
+"is-read-only": false, 
+"description": ["This attribute defines the new priority value for the old priority value 7."]
+},
+"priority-mapping-g": {
+"id": "priority-mapping-g", 
+"is-read-only": false, 
+"description": ["This data type provides the priority mapping done in the 'P Regenerate' process defined in G.8021."]
+},
+"vid": {
+"id": "vid", 
+"is-read-only": false, 
+"description": ["This primitive type models the 12 Bit VLAN identifier of a VLAN tag."]
+},
+"modify-cross-connection-data": {
+"id": "modify-cross-connection-data", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"address": {
+"id": "address", 
+"is-read-only": false, 
+"description": ["This attribute contains the MAC address of the address tuple."]
+},
+"port-list": {
+"id": "port-list", 
+"is-read-only": false, 
+"description": ["This attribute contains the ports associated to the MAC address in the address tuple."]
+},
+"address-tuple-g": {
+"id": "address-tuple-g", 
+"is-read-only": false, 
+"description": ["This data type contains an address tuple consisting of a MAC address and a corresponding port list."]
+},
+"scheduling-configuration": {
+"id": "scheduling-configuration", 
+"is-read-only": false, 
+"description": ["The syntax of this dataType is pending on the specification in G.8021, which is for further study."]
+},
+"c-2-00-00-10": {
+"id": "c-2-00-00-10", 
+"is-read-only": false, 
+"description": ["This attribute identifies the 'All LANs Bridge Management Group Address'."]
+},
+"c-2-00-00-00": {
+"id": "c-2-00-00-00", 
+"is-read-only": false, 
+"description": ["This attribute identifies the STP/RSTP/MSTP protocol address."]
+},
+"c-2-00-00-01": {
+"id": "c-2-00-00-01", 
+"is-read-only": false, 
+"description": ["This attribute identifies the IEEE MAC-specific Control Protocols group address (PAUSE protocol)."]
+},
+"c-2-00-00-02": {
+"id": "c-2-00-00-02", 
+"is-read-only": false, 
+"description": ["This attribute identifies the IEEE 802.3 Slow_Protocols_Multicast address (LACP/LAMP or Link OAM protocols)."]
+},
+"c-2-00-00-03": {
+"id": "c-2-00-00-03", 
+"is-read-only": false, 
+"description": ["This attribute identifies the Nearest non-TPMR Bridge group address (Port Authentication protocol)."]
+},
+"c-2-00-00-04": {
+"id": "c-2-00-00-04", 
+"is-read-only": false, 
+"description": ["This attribute identifies the IEEE MAC-specific Control Protocols group address."]
+},
+"c-2-00-00-05": {
+"id": "c-2-00-00-05", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-06": {
+"id": "c-2-00-00-06", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-07": {
+"id": "c-2-00-00-07", 
+"is-read-only": false, 
+"description": ["This attribute identifies the Metro Ethernet Forum E-LMI protocol group address."]
+},
+"c-2-00-00-08": {
+"id": "c-2-00-00-08", 
+"is-read-only": false, 
+"description": ["This attribute identifies the Provider Bridge Group address."]
+},
+"c-2-00-00-09": {
+"id": "c-2-00-00-09", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-0-a": {
+"id": "c-2-00-00-0-a", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-0-b": {
+"id": "c-2-00-00-0-b", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-0-c": {
+"id": "c-2-00-00-0-c", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-0-d": {
+"id": "c-2-00-00-0-d", 
+"is-read-only": false, 
+"description": ["This attribute identifies the Provider Bridge MVRP address."]
+},
+"c-2-00-00-0-e": {
+"id": "c-2-00-00-0-e", 
+"is-read-only": false, 
+"description": ["This attribute identifies the Individual LAN Scope group address, Nearest Bridge group address (LLDP protocol)."]
+},
+"c-2-00-00-0-f": {
+"id": "c-2-00-00-0-f", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-20": {
+"id": "c-2-00-00-20", 
+"is-read-only": false, 
+"description": ["This attribute identifies the Customer and Provider Bridge MMRP address."]
+},
+"c-2-00-00-21": {
+"id": "c-2-00-00-21", 
+"is-read-only": false, 
+"description": ["This attribute identifies the Customer Bridge MVRP address."]
+},
+"c-2-00-00-22": {
+"id": "c-2-00-00-22", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-23": {
+"id": "c-2-00-00-23", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-24": {
+"id": "c-2-00-00-24", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-25": {
+"id": "c-2-00-00-25", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-26": {
+"id": "c-2-00-00-26", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-27": {
+"id": "c-2-00-00-27", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-28": {
+"id": "c-2-00-00-28", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-29": {
+"id": "c-2-00-00-29", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-2-a": {
+"id": "c-2-00-00-2-a", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-2-b": {
+"id": "c-2-00-00-2-b", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-2-c": {
+"id": "c-2-00-00-2-c", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-2-d": {
+"id": "c-2-00-00-2-d", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-2-e": {
+"id": "c-2-00-00-2-e", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"c-2-00-00-2-f": {
+"id": "c-2-00-00-2-f", 
+"is-read-only": false, 
+"description": ["Reserved for future standardization."]
+},
+"control-frame-filter-g": {
+"id": "control-frame-filter-g", 
+"is-read-only": false, 
+"description": ["This data type identifies the filter action for each of the 33 group MAC addresses (control frames). Value 'false' means block: The frame is discarded by the filter process. Value 'true' means pass: The frame is passed unchanged through the filter process."]
+},
+"source-mac-address": {
+"id": "source-mac-address", 
+"is-read-only": false, 
+"description": ["The sourceMacAddress is the address from the far end."]
+},
+"port-id": {
+"id": "port-id", 
+"is-read-only": false, 
+"description": ["This attribute returns the far end port identifier."]
+},
+"nominal-bandwidth": {
+"id": "nominal-bandwidth", 
+"is-read-only": false, 
+"description": ["This attribute returns the configured bandwidth"]
+},
+"current-bandwidth": {
+"id": "current-bandwidth", 
+"is-read-only": false, 
+"description": ["This attribute returns the current bandwidth."]
+},
+"bandwidth-report-g": {
+"id": "bandwidth-report-g", 
+"is-read-only": false, 
+"description": ["Data type for the bandwidth report."]
+},
+"LOCK": {
+"id": "LOCK", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"NORMAL": {
+"id": "NORMAL", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"admin-state": {
+"id": "admin-state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"COLOUR_BLIND": {
+"id": "COLOUR_BLIND", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"COLOUR_AWARE": {
+"id": "COLOUR_AWARE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"colour-mode": {
+"id": "colour-mode", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DISABLED": {
+"id": "DISABLED", 
+"is-read-only": false, 
+"description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is false - MI_CSFrdifdi_Enable is false - MI_CSFdci_Enable is false."]
+},
+"ENABLED": {
+"id": "ENABLED", 
+"is-read-only": false, 
+"description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is true - MI_CSFrdifdi_Enable is false - MI_CSFdci_Enable is false."]
+},
+"ENABLED_WITH_RDI_FDI": {
+"id": "ENABLED_WITH_RDI_FDI", 
+"is-read-only": false, 
+"description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is true - MI_CSFrdifdi_Enable is true - MI_CSFdci_Enable is false."]
+},
+"ENABLED_WITH_RDI_FDI_DCI": {
+"id": "ENABLED_WITH_RDI_FDI_DCI", 
+"is-read-only": false, 
+"description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is true - MI_CSFrdifdi_Enable is true - MI_CSFdci_Enable is true."]
+},
+"ENABLED_WITH_DCI": {
+"id": "ENABLED_WITH_DCI", 
+"is-read-only": false, 
+"description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is true - MI_CSFrdifdi_Enable is false - MI_CSFdci_Enable is true."]
+},
+"csf-config": {
+"id": "csf-config", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"OTHER": {
+"id": "OTHER", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"UNKNOWN": {
+"id": "UNKNOWN", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"NONE": {
+"id": "NONE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"2BASE_TL": {
+"id": "2BASE_TL", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"10MBIT_S": {
+"id": "10MBIT_S", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"10PASS_TS": {
+"id": "10PASS_TS", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"100BASE_T4": {
+"id": "100BASE_T4", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"100BASE_X": {
+"id": "100BASE_X", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"100BASE_T2": {
+"id": "100BASE_T2", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"1000BASE_X": {
+"id": "1000BASE_X", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"1000BASE_T": {
+"id": "1000BASE_T", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"10GBASE-X": {
+"id": "10GBASE-X", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"10GBASE_R": {
+"id": "10GBASE_R", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"10GBASE_W": {
+"id": "10GBASE_W", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ety-phy-type": {
+"id": "ety-phy-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ADMIT_ONLY_VLAN_TAGGED_FRAMES": {
+"id": "ADMIT_ONLY_VLAN_TAGGED_FRAMES", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ADMIT_ONLY_UNTAGGED_AND_PRIORITY_TAGGED_FRAMES": {
+"id": "ADMIT_ONLY_UNTAGGED_AND_PRIORITY_TAGGED_FRAMES", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ADMIT_ALL_FRAMES": {
+"id": "ADMIT_ALL_FRAMES", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"frame-type": {
+"id": "frame-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"3_33MS": {
+"id": "3_33MS", 
+"is-read-only": false, 
+"description": ["Default for protection."]
+},
+"10MS": {
+"id": "10MS", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"100MS": {
+"id": "100MS", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"1S": {
+"id": "1S", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"10S": {
+"id": "10S", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"1MIN": {
+"id": "1MIN", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"10MIN": {
+"id": "10MIN", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-period": {
+"id": "oam-period", 
+"is-read-only": false, 
+"description": ["Provides the frequency for the OAM PDU insertion."]
+},
+"8P0D": {
+"id": "8P0D", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"7P1D": {
+"id": "7P1D", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"6P2D": {
+"id": "6P2D", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"5P3D": {
+"id": "5P3D", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DEI": {
+"id": "DEI", 
+"is-read-only": false, 
+"description": ["This enumeration value means that all priorities should be drop eligible. DEI = Drop Eligibility Indicator"]
+},
+"pcp-coding": {
+"id": "pcp-coding", 
+"is-read-only": false, 
+"description": ["This enum models the coding of the Priority Code Point as defined in section 'Priority Code Point encoding' of IEEE 802.1Q."]
+},
+"C_Tag": {
+"id": "C_Tag", 
+"is-read-only": false, 
+"description": ["0x8100"]
+},
+"S_Tag": {
+"id": "S_Tag", 
+"is-read-only": false, 
+"description": ["0x88a8"]
+},
+"I_Tag": {
+"id": "I_Tag", 
+"is-read-only": false, 
+"description": ["88-e7"]
+},
+"vlan-type": {
+"id": "vlan-type", 
+"is-read-only": false, 
+"description": ["This enumeration contains the Ethertypes defined in IEEE 802.1Q."]
+},
+"1MIN": {
+"id": "1MIN", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"1S": {
+"id": "1S", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"10S": {
+"id": "10S", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"0": {
+"id": "0", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"repetition-period": {
+"id": "repetition-period", 
+"is-read-only": false, 
+"description": ["This enumeration defines the allowed values for the repetition period in on-demand measurements. Note: The value 0 means that the value is not relevant."]
+},
+"10MS": {
+"id": "10MS", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"100MS": {
+"id": "100MS", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"1S": {
+"id": "1S", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"10S": {
+"id": "10S", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"0": {
+"id": "0", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"message-period": {
+"id": "message-period", 
+"is-read-only": false, 
+"description": ["This enumeration defines the allowed values for the message period in on-demand measurements. Notes: The value 10ms is only used in synthetic loss measurements. The value 0 means that the value is not relevant."]
+},
+"SINGLE_INSTANCE": {
+"id": "SINGLE_INSTANCE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"REPETITIVE_INSTANCE": {
+"id": "REPETITIVE_INSTANCE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SINGLE_SERIES": {
+"id": "SINGLE_SERIES", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"REPETITIVE_SERIES": {
+"id": "REPETITIVE_SERIES", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-pdu-generation-type": {
+"id": "oam-pdu-generation-type", 
+"is-read-only": false, 
+"description": ["This enumeration defines the generation pattern of the on-demand OAM PDUs (messages)."]
+},
+"number-of-samples": {
+"id": "number-of-samples", 
+"is-read-only": false, 
+"description": ["This attribute contains the number of received DM frames (successful samples) used for this frame delay measurement. range of type : non-negative"]
+},
+"frame-delay-list": {
+"id": "frame-delay-list", 
+"is-read-only": false, 
+"description": ["This attribute contains the frame delays measured in ns (nano second, 1x10e-9 seconds). The multiplicity is defined by the numberOfSamples attribute."]
+},
+"frame-delay-variation-list": {
+"id": "frame-delay-variation-list", 
+"is-read-only": false, 
+"description": ["This attribute contains the frame delay variations measured in ns (nano second). The multiplicity is defined by (numberOfSamples - 1, for numberOfSamples > 0)."]
+},
+"on-demand-dm-performance-parameters-g": {
+"id": "on-demand-dm-performance-parameters-g", 
+"is-read-only": false, 
+"description": ["This data type contains the results of an on-demand delay measurement job."]
+},
+"total-transmitted-frames": {
+"id": "total-transmitted-frames", 
+"is-read-only": false, 
+"description": ["This attribute contains the total number of frames transmitted."]
+},
+"total-lost-frames": {
+"id": "total-lost-frames", 
+"is-read-only": false, 
+"description": ["This attribute contains the total number of frames lost."]
+},
+"total-frame-loss-ratio": {
+"id": "total-frame-loss-ratio", 
+"is-read-only": false, 
+"description": ["This attribute contains the frame loss ratio (number of lost frames divided by the number of total frames (N_LF / N_TF)). The accuracy of the value is for further study."]
+},
+"on-demand-lm-performance-parameters-g": {
+"id": "on-demand-lm-performance-parameters-g", 
+"is-read-only": false, 
+"description": ["This data type contains the results of an on-demand loss measurement job."]
+},
+"minimum-frame-delay": {
+"id": "minimum-frame-delay", 
+"is-read-only": false, 
+"description": ["This attribute contains the minimum frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds)."]
+},
+"average-frame-delay": {
+"id": "average-frame-delay", 
+"is-read-only": false, 
+"description": ["This attribute contains the average frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds)."]
+},
+"maximum-frame-delay": {
+"id": "maximum-frame-delay", 
+"is-read-only": false, 
+"description": ["This attribute contains the maximum frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds)."]
+},
+"minimum-frame-delay-variation": {
+"id": "minimum-frame-delay-variation", 
+"is-read-only": false, 
+"description": ["This attribute contains the minimum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds)."]
+},
+"average-frame-delay-variation": {
+"id": "average-frame-delay-variation", 
+"is-read-only": false, 
+"description": ["This attribute contains the average frame delay variation measured in units of ns (nano second, 1x10e-9 seconds)."]
+},
+"maximum-frame-delay-variation": {
+"id": "maximum-frame-delay-variation", 
+"is-read-only": false, 
+"description": ["This attribute contains the maximum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds)."]
+},
+"statistical-dm-performance-parameters-g": {
+"id": "statistical-dm-performance-parameters-g", 
+"is-read-only": false, 
+"description": ["This data type contains the statistical delay measurement performance parameters."]
+},
+"minimum-frame-loss-ratio": {
+"id": "minimum-frame-loss-ratio", 
+"is-read-only": false, 
+"description": ["This attribute contains the minimum frame loss ratio calculated over a period of time. The accuracy of the value is for further study."]
+},
+"average-frame-loss-ratio": {
+"id": "average-frame-loss-ratio", 
+"is-read-only": false, 
+"description": ["This attribute contains the average frame loss ratio calculated over a period of time. The accuracy of the value is for further study."]
+},
+"maximum-frame-loss-ratio": {
+"id": "maximum-frame-loss-ratio", 
+"is-read-only": false, 
+"description": ["This attribute contains the maximum frame loss ratio calculated over a period of time. The accuracy of the value is for further study."]
+},
+"ses": {
+"id": "ses", 
+"is-read-only": false, 
+"description": ["This attribute contains the SES detected in the monitoring interval. range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval."]
+},
+"uas": {
+"id": "uas", 
+"is-read-only": false, 
+"description": ["This attribute contains UAS (unavailable seconds) detected in the monitoring interval. range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval."]
+},
+"statistical-lm-performance-parameters-g": {
+"id": "statistical-lm-performance-parameters-g", 
+"is-read-only": false, 
+"description": ["This data type contains the statistical loss measurement performance parameters."]
+},
+"eth-oam-job-type": {
+"id": "eth-oam-job-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"source-address": {
+"id": "source-address", 
+"is-read-only": false, 
+"description": ["G.8052: This attribute contains the source MAC Address of an individual LTR frame result."]
+},
+"time-to-live": {
+"id": "time-to-live", 
+"is-read-only": false, 
+"description": ["G.8052: This attribute contains the Time To Live (TTL) value of an individual LTR frame result."]
+},
+"data-tlv-length": {
+"id": "data-tlv-length", 
+"is-read-only": false, 
+"description": ["G.8052: This attribute contains the length (in number of octets) of the Data TLV of an individual LTR frame result."]
+},
+"link-trace-result-g": {
+"id": "link-trace-result-g", 
+"is-read-only": false, 
+"description": ["G.8052: This data type contains the result from an individual LTR frame."]
+}}
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-notification@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-notification@2018-08-31.schema-information.json
new file mode 100644
index 0000000..cb170ac
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-notification@2018-08-31.schema-information.json
@@ -0,0 +1,648 @@
+{ "schama-information": {
+
+"tapi-notification": {
+"id": "tapi-notification", 
+"is-read-only": false, 
+"description": ["This module contains TAPI Notification Model definitions. Source: TapiNotification.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
+},
+"notification": {
+"id": "notification", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"notification-channel": {
+"id": "notification-channel", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"subscription-filter": {
+"id": "subscription-filter", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"subscription-state": {
+"id": "subscription-state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"supported-notification-types": {
+"id": "supported-notification-types", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"supported-object-types": {
+"id": "supported-object-types", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"notification-subscription-service-g": {
+"id": "notification-subscription-service-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"requested-notification-types": {
+"id": "requested-notification-types", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"requested-object-types": {
+"id": "requested-object-types", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"requested-layer-protocols": {
+"id": "requested-layer-protocols", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"requested-object-identifier": {
+"id": "requested-object-identifier", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"include-content": {
+"id": "include-content", 
+"is-read-only": false, 
+"description": ["Indicates whether the published Notification includes content or just the Notification Id (which enables retrieval of the notification at the later stage)"]
+},
+"subscription-filter-g": {
+"id": "subscription-filter-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"notification": {
+"id": "notification", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"notification-type": {
+"id": "notification-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"target-object-type": {
+"id": "target-object-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"target-object-identifier": {
+"id": "target-object-identifier", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"target-object-name": {
+"id": "target-object-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"event-time-stamp": {
+"id": "event-time-stamp", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"sequence-number": {
+"id": "sequence-number", 
+"is-read-only": false, 
+"description": ["A monotonous increasing sequence number associated with the notification. The exact semantics of how this sequence number is assigned (per channel or subscription or source or system) is left undefined."]
+},
+"source-indicator": {
+"id": "source-indicator", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"layer-protocol-name": {
+"id": "layer-protocol-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"changed-attributes": {
+"id": "changed-attributes", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"additional-info": {
+"id": "additional-info", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"additional-text": {
+"id": "additional-text", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tca-info": {
+"id": "tca-info", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"alarm-info": {
+"id": "alarm-info", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"notification-g": {
+"id": "notification-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"stream-address": {
+"id": "stream-address", 
+"is-read-only": false, 
+"description": ["The address/location/URI of the channel/stream to which the subscribed notifications are published. This specifics of this is typically dependent on the implementation protocol & mechanism and hence is typed as a string."]
+},
+"next-sequence-no": {
+"id": "next-sequence-no", 
+"is-read-only": false, 
+"description": ["The sequence number of the next notification that will be published on the channel"]
+},
+"notification-channel-g": {
+"id": "notification-channel-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"notif-subscription": {
+"id": "notif-subscription", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"notification": {
+"id": "notification", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"notification-context-g": {
+"id": "notification-context-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"is-transient": {
+"id": "is-transient", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"perceived-severity": {
+"id": "perceived-severity", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"probable-cause": {
+"id": "probable-cause", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-affecting": {
+"id": "service-affecting", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"alarm-info-g": {
+"id": "alarm-info-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"is-transient": {
+"id": "is-transient", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"threshold-crossing": {
+"id": "threshold-crossing", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"threshold-parameter": {
+"id": "threshold-parameter", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"threshold-value": {
+"id": "threshold-value", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"perceived-severity": {
+"id": "perceived-severity", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"measurement-interval": {
+"id": "measurement-interval", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"suspect-interval-flag": {
+"id": "suspect-interval-flag", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tca-info-g": {
+"id": "tca-info-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"value-name": {
+"id": "value-name", 
+"is-read-only": false, 
+"description": ["The name of the value. The value need not have a name."]
+},
+"old-value": {
+"id": "old-value", 
+"is-read-only": false, 
+"description": ["The value"]
+},
+"new-value": {
+"id": "new-value", 
+"is-read-only": false, 
+"description": ["The value"]
+},
+"name-and-value-change-g": {
+"id": "name-and-value-change-g", 
+"is-read-only": false, 
+"description": ["A scoped name-value triple, including old value and new value"]
+},
+"OBJECT_CREATION": {
+"id": "OBJECT_CREATION", 
+"is-read-only": false, 
+"description": ["Not a normal state. The system is unable to determine the correct value."]
+},
+"OBJECT_DELETION": {
+"id": "OBJECT_DELETION", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ATTRIBUTE_VALUE_CHANGE": {
+"id": "ATTRIBUTE_VALUE_CHANGE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ALARM_EVENT": {
+"id": "ALARM_EVENT", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"THRESHOLD_CROSSING_ALERT": {
+"id": "THRESHOLD_CROSSING_ALERT", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"notification-type": {
+"id": "notification-type", 
+"is-read-only": false, 
+"description": ["List of supported Notifications types."]
+},
+"TOPOLOGY": {
+"id": "TOPOLOGY", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"NODE": {
+"id": "NODE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"LINK": {
+"id": "LINK", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"CONNECTION": {
+"id": "CONNECTION", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"PATH": {
+"id": "PATH", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"CONNECTIVITY_SERVICE": {
+"id": "CONNECTIVITY_SERVICE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"VIRTUAL_NETWORK_SERVICE": {
+"id": "VIRTUAL_NETWORK_SERVICE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"PATH_COMPUTATION_SERVICE": {
+"id": "PATH_COMPUTATION_SERVICE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"NODE_EDGE_POINT": {
+"id": "NODE_EDGE_POINT", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SERVICE_INTERFACE_POINT": {
+"id": "SERVICE_INTERFACE_POINT", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"CONNECTION_END_POINT": {
+"id": "CONNECTION_END_POINT", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MAINTENANCE_ENTITY_GROUP": {
+"id": "MAINTENANCE_ENTITY_GROUP", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MAINTENANCE_ENTITY": {
+"id": "MAINTENANCE_ENTITY", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MEG_END_POINT": {
+"id": "MEG_END_POINT", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MEG_INTERMEDIATE_POINT": {
+"id": "MEG_INTERMEDIATE_POINT", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SWITCH_CONTROL": {
+"id": "SWITCH_CONTROL", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SWITCH": {
+"id": "SWITCH", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ROUTE": {
+"id": "ROUTE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"NODE_RULE_GROUP": {
+"id": "NODE_RULE_GROUP", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"INTER_RULE_GROUP": {
+"id": "INTER_RULE_GROUP", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"RULE": {
+"id": "RULE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"OAM_JOB": {
+"id": "OAM_JOB", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"object-type": {
+"id": "object-type", 
+"is-read-only": false, 
+"description": ["The list of TAPI Global Object Class types on which Notifications can be raised."]
+},
+"RESOURCE_OPERATION": {
+"id": "RESOURCE_OPERATION", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MANAGEMENT_OPERATION": {
+"id": "MANAGEMENT_OPERATION", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"UNKNOWN": {
+"id": "UNKNOWN", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"source-indicator": {
+"id": "source-indicator", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SUSPENDED": {
+"id": "SUSPENDED", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ACTIVE": {
+"id": "ACTIVE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"subscription-state": {
+"id": "subscription-state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"CRITICAL": {
+"id": "CRITICAL", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MAJOR": {
+"id": "MAJOR", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MINOR": {
+"id": "MINOR", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"WARNING": {
+"id": "WARNING", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"CLEARED": {
+"id": "CLEARED", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"perceived-severity-type": {
+"id": "perceived-severity-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"THRESHOLD_ABOVE": {
+"id": "THRESHOLD_ABOVE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"THRESHOLD_BELOW": {
+"id": "THRESHOLD_BELOW", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"CLEARED": {
+"id": "CLEARED", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"threshold-crossing-type": {
+"id": "threshold-crossing-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SERVICE_AFFECTING": {
+"id": "SERVICE_AFFECTING", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"NOT_SERVICE_AFFECTING": {
+"id": "NOT_SERVICE_AFFECTING", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"UNKNOWN": {
+"id": "UNKNOWN", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-affecting": {
+"id": "service-affecting", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"WARNING": {
+"id": "WARNING", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"CLEAR": {
+"id": "CLEAR", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"perceived-tca-severity": {
+"id": "perceived-tca-severity", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-supported-notification-types": {
+"id": "get-supported-notification-types", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"supported-notification-types": {
+"id": "supported-notification-types", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"supported-object-types": {
+"id": "supported-object-types", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"create-notification-subscription-service": {
+"id": "create-notification-subscription-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"subscription-filter": {
+"id": "subscription-filter", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"subscription-state": {
+"id": "subscription-state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"subscription-service": {
+"id": "subscription-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"update-notification-subscription-service": {
+"id": "update-notification-subscription-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"subscription-id-or-name": {
+"id": "subscription-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"subscription-filter": {
+"id": "subscription-filter", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"subscription-state": {
+"id": "subscription-state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"subscription-service": {
+"id": "subscription-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"delete-notification-subscription-service": {
+"id": "delete-notification-subscription-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"subscription-id-or-name": {
+"id": "subscription-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"subscription-service": {
+"id": "subscription-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-notification-subscription-service-details": {
+"id": "get-notification-subscription-service-details", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"subscription-id-or-name": {
+"id": "subscription-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"subscription-service": {
+"id": "subscription-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-notification-subscription-service-list": {
+"id": "get-notification-subscription-service-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"subscription-service": {
+"id": "subscription-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-notification-list": {
+"id": "get-notification-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"subscription-id-or-name": {
+"id": "subscription-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"time-period": {
+"id": "time-period", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"notification": {
+"id": "notification", 
+"is-read-only": false, 
+"description": ["none"]
+}}
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-oam@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-oam@2018-08-31.schema-information.json
new file mode 100644
index 0000000..c6903ed
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-oam@2018-08-31.schema-information.json
@@ -0,0 +1,778 @@
+{ "schama-information": {
+
+"tapi-oam": {
+"id": "tapi-oam", 
+"is-read-only": false, 
+"description": ["This module contains TAPI OAM Model definitions. Source: TapiOam.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
+},
+"oam-service-uuid": {
+"id": "oam-service-uuid", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-service-ref-g": {
+"id": "oam-service-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-service-end-point-local-id": {
+"id": "oam-service-end-point-local-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-service-end-point-ref-g": {
+"id": "oam-service-end-point-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"meg-uuid": {
+"id": "meg-uuid", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"meg-ref-g": {
+"id": "meg-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"maintenance-entity-local-id": {
+"id": "maintenance-entity-local-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"maintenance-entity-ref-g": {
+"id": "maintenance-entity-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mep-local-id": {
+"id": "mep-local-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mep-ref-g": {
+"id": "mep-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mip-local-id": {
+"id": "mip-local-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mip-ref-g": {
+"id": "mip-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-job-uuid": {
+"id": "oam-job-uuid", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-job-ref-g": {
+"id": "oam-job-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pm-current-data-local-id": {
+"id": "pm-current-data-local-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pm-current-data-ref-g": {
+"id": "pm-current-data-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pm-history-data-local-id": {
+"id": "pm-history-data-local-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pm-history-data-ref-g": {
+"id": "pm-history-data-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-profile-uuid": {
+"id": "oam-profile-uuid", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-profile-ref-g": {
+"id": "oam-profile-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pm-threshold-data-local-id": {
+"id": "pm-threshold-data-local-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pm-threshold-data-ref-g": {
+"id": "pm-threshold-data-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pm-bin-data-local-id": {
+"id": "pm-bin-data-local-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pm-bin-data-ref-g": {
+"id": "pm-bin-data-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-service-end-point": {
+"id": "oam-service-end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"layer-protocol-name": {
+"id": "layer-protocol-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"direction": {
+"id": "direction", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mep-identifier": {
+"id": "mep-identifier", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"peer-mep-identifier": {
+"id": "peer-mep-identifier", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mep-g": {
+"id": "mep-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-service-end-point": {
+"id": "oam-service-end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-profile": {
+"id": "oam-profile", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pm-current-data": {
+"id": "pm-current-data", 
+"is-read-only": false, 
+"description": ["Granularity period of the CurrentData identifies the specific CurrentData instance in the scope of this OamJob. For example, typically at least one 15min and one 24hr; optionally one additional configurable (< 15min)"]
+},
+"oam-job-type": {
+"id": "oam-job-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"schedule": {
+"id": "schedule", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"creation-time": {
+"id": "creation-time", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-job-g": {
+"id": "oam-job-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"me": {
+"id": "me", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mep": {
+"id": "mep", 
+"is-read-only": false, 
+"description": ["1. ME may have 0 MEPs (case of transit domains where at least 1 MIP is present) 2. ME may have 1 MEP (case of edge domaind, where the peer MEP is ouside the managed domain) 3. ME may have 2 MEPs"]
+},
+"mip": {
+"id": "mip", 
+"is-read-only": false, 
+"description": ["ME may 0, 1, or more MIPs"]
+},
+"layer-protocol-name": {
+"id": "layer-protocol-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"direction": {
+"id": "direction", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"meg-level": {
+"id": "meg-level", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"meg-identifier": {
+"id": "meg-identifier", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"meg-g": {
+"id": "meg-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mep": {
+"id": "mep", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mip": {
+"id": "mip", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connection-route": {
+"id": "connection-route", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"maintenance-entity-g": {
+"id": "maintenance-entity-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-service-end-point": {
+"id": "oam-service-end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"layer-protocol-name": {
+"id": "layer-protocol-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mip-g": {
+"id": "mip-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"end-point": {
+"id": "end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"meg": {
+"id": "meg", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-profile": {
+"id": "oam-profile", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-service-g": {
+"id": "oam-service-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-service": {
+"id": "oam-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"meg": {
+"id": "meg", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-job": {
+"id": "oam-job", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-profile": {
+"id": "oam-profile", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-context-g": {
+"id": "oam-context-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-interface-point": {
+"id": "service-interface-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"connectivity-service-end-point": {
+"id": "connectivity-service-end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mep": {
+"id": "mep", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mip": {
+"id": "mip", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"layer-protocol-name": {
+"id": "layer-protocol-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"direction": {
+"id": "direction", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-service-end-point-g": {
+"id": "oam-service-end-point-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mip": {
+"id": "mip", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mep": {
+"id": "mep", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mep-mip-list-g": {
+"id": "mep-mip-list-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"layer-protocol-name": {
+"id": "layer-protocol-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"direction": {
+"id": "direction", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"meg-level": {
+"id": "meg-level", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-constraint-g": {
+"id": "oam-constraint-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pm-history-data": {
+"id": "pm-history-data", 
+"is-read-only": false, 
+"description": ["in case of 24hr Current Data, at least 1 History Data. In case of 15min Current Data, at least 16 History Data. In case of <15min, the number of History Data shall be able to cover a span of 4 hours."]
+},
+"granularity-period": {
+"id": "granularity-period", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"timestamp": {
+"id": "timestamp", 
+"is-read-only": false, 
+"description": ["This attribute indicates the start of the current monitoring interval. The value is bound to the quarter of an hour in case of a 15 minute interval and bound to the hour in case of a 24 hour interval."]
+},
+"elapsed-time": {
+"id": "elapsed-time", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"suspect-interval-flag": {
+"id": "suspect-interval-flag", 
+"is-read-only": false, 
+"description": ["This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are: – Suspect data were detected by the actual resource doing data collection. – Transition of the administrativeState attribute to/from the 'lock' state. – Transition of the operationalState to/from the 'disabled' state. – Scheduler setting that inhibits the collection function. – The performance counters were reset during the interval. – The currentData (or subclass) object instance was created during the monitoring period."]
+},
+"pm-current-data-g": {
+"id": "pm-current-data-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"granularity-period": {
+"id": "granularity-period", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"period-end-time": {
+"id": "period-end-time", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"suspect-interval-flag": {
+"id": "suspect-interval-flag", 
+"is-read-only": false, 
+"description": ["This attribute indicates that the performance data may not be reliable."]
+},
+"pm-history-data-g": {
+"id": "pm-history-data-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pm-threshold-data": {
+"id": "pm-threshold-data", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pm-bin-data": {
+"id": "pm-bin-data", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-profile-g": {
+"id": "oam-profile-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"granularity-period": {
+"id": "granularity-period", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"is-transient": {
+"id": "is-transient", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pm-threshold-data-g": {
+"id": "pm-threshold-data-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"granularity-period": {
+"id": "granularity-period", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pm-bin-data-g": {
+"id": "pm-bin-data-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"OAM_JOB_TYPE": {
+"id": "OAM_JOB_TYPE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-job-type": {
+"id": "oam-job-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"create-oam-service": {
+"id": "create-oam-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"end-point": {
+"id": "end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-constraint": {
+"id": "oam-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"state": {
+"id": "state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service": {
+"id": "service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"delete-oam-service": {
+"id": "delete-oam-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-id": {
+"id": "service-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-oam-service": {
+"id": "get-oam-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-id": {
+"id": "service-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service": {
+"id": "service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"create-oam-job": {
+"id": "create-oam-job", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-job-type": {
+"id": "oam-job-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-service-end-point": {
+"id": "oam-service-end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-profile": {
+"id": "oam-profile", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"state": {
+"id": "state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"schedule": {
+"id": "schedule", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-job": {
+"id": "oam-job", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-oam-job": {
+"id": "get-oam-job", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"job-id": {
+"id": "job-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-job": {
+"id": "oam-job", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-oam-service-list": {
+"id": "get-oam-service-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service": {
+"id": "service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-meg": {
+"id": "get-meg", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-id": {
+"id": "service-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"meg": {
+"id": "meg", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"update-oam-service": {
+"id": "update-oam-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-id": {
+"id": "service-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"end-point": {
+"id": "end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-constraint": {
+"id": "oam-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"state": {
+"id": "state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service": {
+"id": "service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"delete-oam-job": {
+"id": "delete-oam-job", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"job-id": {
+"id": "job-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"update-oam-job": {
+"id": "update-oam-job", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"job-id": {
+"id": "job-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-profile": {
+"id": "oam-profile", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"state": {
+"id": "state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"schedule": {
+"id": "schedule", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"oam-job": {
+"id": "oam-job", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"create-oam-service-end-point": {
+"id": "create-oam-service-end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-id": {
+"id": "service-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"sip-id": {
+"id": "sip-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"c-sep-id": {
+"id": "c-sep-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"layer": {
+"id": "layer", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"direction": {
+"id": "direction", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"state": {
+"id": "state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"end-point": {
+"id": "end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"delete-oam-service-end-point": {
+"id": "delete-oam-service-end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-id": {
+"id": "service-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"o-sep-id": {
+"id": "o-sep-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"update-oam-service-end-point": {
+"id": "update-oam-service-end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-id": {
+"id": "service-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"o-sep-id": {
+"id": "o-sep-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"state": {
+"id": "state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"end-point": {
+"id": "end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-oam-service-end-point": {
+"id": "get-oam-service-end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-id": {
+"id": "service-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"o-sep-id": {
+"id": "o-sep-id", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"end-point": {
+"id": "end-point", 
+"is-read-only": false, 
+"description": ["none"]
+}}
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-odu@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-odu@2018-08-31.schema-information.json
new file mode 100644
index 0000000..b59a737
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-odu@2018-08-31.schema-information.json
@@ -0,0 +1,733 @@
+{ "schama-information": {
+
+"tapi-odu": {
+"id": "tapi-odu", 
+"is-read-only": false, 
+"description": ["This module contains TAPI Odu Model definitions. Source: TapiOdu.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
+},
+"opu-tributary-slot-size": {
+"id": "opu-tributary-slot-size", 
+"is-read-only": false, 
+"description": ["This attribute is applicable for ODU2 and ODU3 CTP only. It indicates the slot size of the ODU CTP."]
+},
+"auto-payload-type": {
+"id": "auto-payload-type", 
+"is-read-only": false, 
+"description": ["This attribute is applicable when the ODU CTP object instance represents a lower order ODU CTP Source at the client layer of the ODUP/ODUj-21 adaptation function. The value of true of this attribute configures that the adaptation source function shall fall back to the payload type PT=20 if the conditions specified in 14.3.10.1/G.798 are satisfied."]
+},
+"configured-client-type": {
+"id": "configured-client-type", 
+"is-read-only": false, 
+"description": ["This attribute configures the type of the client CTP of the server ODU TTP."]
+},
+"configured-mapping-type": {
+"id": "configured-mapping-type", 
+"is-read-only": false, 
+"description": ["This attributes indicates the configured mapping type."]
+},
+"accepted-payload-type": {
+"id": "accepted-payload-type", 
+"is-read-only": false, 
+"description": ["This attribute is applicable when the ODU CTP object instance represents a lower order ODU CTP Sink at the client layer of the ODUP/ODU[i]j or ODUP/ODUj-21 adaptation function. This attribute is a 2-digit Hex code that indicates the new accepted payload type. Valid values are defined in Table 15-8 of ITU-T Recommendation G.709 with one additional value UN_INTERPRETABLE."]
+},
+"odu-termination-and-client-adaptation-pac-g": {
+"id": "odu-termination-and-client-adaptation-pac-g", 
+"is-read-only": false, 
+"description": ["This Pac contains the attributes associated with the client adaptation function of the server layer TTP It is present only if the CEP contains a TTP"]
+},
+"odu-common": {
+"id": "odu-common", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-term-and-adapter": {
+"id": "odu-term-and-adapter", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-ctp": {
+"id": "odu-ctp", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-protection": {
+"id": "odu-protection", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-connection-end-point-spec-g": {
+"id": "odu-connection-end-point-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"client-capacity": {
+"id": "client-capacity", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"max-client-instances": {
+"id": "max-client-instances", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"max-client-size": {
+"id": "max-client-size", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-pool-pac-g": {
+"id": "odu-pool-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-pool": {
+"id": "odu-pool", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-node-edge-point-spec-g": {
+"id": "odu-node-edge-point-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tributary-slot-list": {
+"id": "tributary-slot-list", 
+"is-read-only": false, 
+"description": ["This attribute contains a set of distinct (i.e. unique) integers (e.g. 2, 3, 5, 9, 15 representing the tributary slots TS2, TS3, TS5, TS9 and TS15) which represents the resources occupied by the Low Order ODU Link Connection (e.g. carrying an ODUflex with a bit rate of 6.25G). This attribute applies when the LO ODU_ ConnectionTerminationPoint connects with an HO ODU_TrailTerminationPoint object. It will not apply if this ODU_ ConnectionTerminationPoint object directly connects to an OTU_TrailTerminationPoint object (i.e. OTU has no trib slots). The upper bound of the integer allowed in this set is a function of the HO-ODU server layer to which the ODU connection has been mapped (adapted). Thus, for example, M=8/32/80 for ODU2/ODU3/ODU4 server layers (respectively). Note that the value of this attribute can be changed only in the case of ODUflex and has to be through specific operations (i.e. not be changing the attribute tributarySlotList directly)."]
+},
+"tributary-port-number": {
+"id": "tributary-port-number", 
+"is-read-only": false, 
+"description": ["This attribute identifies the tributary port number that is associated with the ODU CTP. range of type : The value range depends on the size of the Tributary Port Number (TPN) field used which depends on th server-layer ODU or OTU. In case of ODUk mapping into OTUk, there is no TPN field, so the tributaryPortNumber shall be zero. In case of LO ODUj mapping over ODU1, ODU2 or ODU3, the TPN is encoded in a 6-bit field so the value range is 0-63. See clause 14.4.1/G.709-2016. In case of LO ODUj mapping over ODU4, the TPN is encoded in a 7-bit field so the value range is 0-127. See clause 14.4.1.4/G.709-2016. In case of ODUk mapping over ODUCn, the TPN is encoded in a 14-bit field so the value range is 0-16383. See clause 20.4.1.1/G.709-2016."]
+},
+"accepted-msi": {
+"id": "accepted-msi", 
+"is-read-only": false, 
+"description": ["This attribute is applicable when the ODU CTP object instance represents a lower order ODU1 or ODU2 CTP Sink at the client layer of the ODU3P/ODU12 adaptation function or represents a lower order ODUj CTP Sink at the client layer of the ODUP/ODUj-21 adaptation function. This attribute is a 1-byte field that represents the accepted multiplex structure of the adaptation function."]
+},
+"odu-ctp-pac-g": {
+"id": "odu-ctp-pac-g", 
+"is-read-only": false, 
+"description": ["This Pac contains the attributes associated with the CTP It is present only if the CEP contains a CTP"]
+},
+"odu-mep": {
+"id": "odu-mep", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-ncm": {
+"id": "odu-ncm", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-tcm": {
+"id": "odu-tcm", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-defect": {
+"id": "odu-defect", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-pm": {
+"id": "odu-pm", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-mep-spec-g": {
+"id": "odu-mep-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"aps-enable": {
+"id": "aps-enable", 
+"is-read-only": false, 
+"description": ["This attribute is for enabling/disabling the automatic protection switching (APS) capability at the transport adaptation function that is represented by the ODU_ConnectionTerminationPoint object class. It triggers the MI_APS_EN signal to the transport adaptation function."]
+},
+"aps-level": {
+"id": "aps-level", 
+"is-read-only": false, 
+"description": ["This attribute is for configuring the automatic protection switching (APS) level that should operate at the transport adaptation function that is represented by the ODU_ConnectionTerminationPoint object class. It triggers the MI_APS_LVL signal to the transport adaptation function. The value 0 means path and the values 1 through 6 mean TCM level 1 through 6 respectively."]
+},
+"odu-protection-pac-g": {
+"id": "odu-protection-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tcm-fields-in-use": {
+"id": "tcm-fields-in-use", 
+"is-read-only": false, 
+"description": ["This attribute indicates the used TCM fields of the ODU OH."]
+},
+"odu-ncm-pac-g": {
+"id": "odu-ncm-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tcm-extension": {
+"id": "tcm-extension", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tcm-mode": {
+"id": "tcm-mode", 
+"is-read-only": false, 
+"description": ["This attribute specifies the TCM mode at the entity. Valid values are: Operational, Monitor, and Transparent."]
+},
+"codirectional": {
+"id": "codirectional", 
+"is-read-only": false, 
+"description": ["This attribute specifies the directionality of the ODUT MEP with respect to the associated ODU CEP. The value of TRUE means that the sink part of the ODUT MEP terminates the same signal direction as the sink part of the ODU CEP. The Source part behaves similarly. This attribute is meaningful only on objects instantiated under ODU CEP, and at least one among ODU CEP and the subordinate object is bidirectional."]
+},
+"ac-status-source": {
+"id": "ac-status-source", 
+"is-read-only": false, 
+"description": ["This attribute indicates the status of the accepted TCM."]
+},
+"ac-status-sink": {
+"id": "ac-status-sink", 
+"is-read-only": false, 
+"description": ["This attribute indicates the status of the accepted TCM."]
+},
+"admin-state-source": {
+"id": "admin-state-source", 
+"is-read-only": false, 
+"description": ["This attribute provides the capability to provision the LOCK signal at the source, which is one of the ODU maintenance signals. When a Tandem Connection endpoint is set to admin state locked, it will insert the ODU-LCK signal in the source direction."]
+},
+"admin-state-sink": {
+"id": "admin-state-sink", 
+"is-read-only": false, 
+"description": ["This attribute provides the capability to provision the LOCK signal at the sink, which is one of the ODU maintenance signals. When a Tandem Connection endpoint is set to admin state locked, it will insert the ODU-LCK signal in the downstream direction."]
+},
+"odu-tcm-mep-pac-g": {
+"id": "odu-tcm-mep-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-mip": {
+"id": "odu-mip", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-ncm": {
+"id": "odu-ncm", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-tcm": {
+"id": "odu-tcm", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-pm": {
+"id": "odu-pm", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-defect": {
+"id": "odu-defect", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-mip-spec-g": {
+"id": "odu-mip-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"acti": {
+"id": "acti", 
+"is-read-only": false, 
+"description": ["The Trail Trace Identifier (TTI) information recovered (Accepted) from the TTI overhead position at the sink of a trail."]
+},
+"ex-dapi": {
+"id": "ex-dapi", 
+"is-read-only": false, 
+"description": ["The Expected Destination Access Point Identifier (ExDAPI), provisioned by the managing system, to be compared with the TTI accepted at the overhead position of the sink for the purpose of checking the integrity of connectivity."]
+},
+"ex-sapi": {
+"id": "ex-sapi", 
+"is-read-only": false, 
+"description": ["The Expected Source Access Point Identifier (ExSAPI), provisioned by the managing system, to be compared with the TTI accepted at the overhead position of the sink for the purpose of checking the integrity of connectivity."]
+},
+"tim-act-disabled": {
+"id": "tim-act-disabled", 
+"is-read-only": false, 
+"description": ["This attribute provides the control capability for the managing system to enable or disable the Consequent Action function when detecting Trace Identifier Mismatch (TIM) at the trail termination sink."]
+},
+"tim-det-mode": {
+"id": "tim-det-mode", 
+"is-read-only": false, 
+"description": ["This attribute indicates the mode of the Trace Identifier Mismatch (TIM) Detection function allowed values: OFF, SAPIonly, DAPIonly, SAPIandDAPI"]
+},
+"deg-m": {
+"id": "deg-m", 
+"is-read-only": false, 
+"description": ["This attribute indicates the threshold level for declaring a Degraded Signal defect (dDEG). A dDEG shall be declared if DegM consecutive bad PM Seconds are detected."]
+},
+"deg-thr": {
+"id": "deg-thr", 
+"is-read-only": false, 
+"description": ["This attribute indicates the threshold level for declaring a performance monitoring (PM) Second to be bad. The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer."]
+},
+"odu-mip-pac-g": {
+"id": "odu-mip-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tcm-field": {
+"id": "tcm-field", 
+"is-read-only": false, 
+"description": ["This attribute indicates the tandem connection monitoring field of the ODU OH."]
+},
+"odu-tcm-mip-pac-g": {
+"id": "odu-tcm-mip-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"dm-source": {
+"id": "dm-source", 
+"is-read-only": false, 
+"description": ["This attribute is for configuring the delay measurement process at the trail termination function represented by the subject TTP object class. It models the MI_DM_Source MI signal. If MI_DM_Source is false, then the value of the DMp bit is determined by the RI_DM. If MI_DM_Source is true, then the value of the DMp bit is set to MI_DMValue."]
+},
+"dm-value": {
+"id": "dm-value", 
+"is-read-only": false, 
+"description": ["This attribute is for setting the DMp and DMti bits of the delay measurement process. The value of 'true' sets the DMp and DMti bits to 0 and the value of 'false' to 1."]
+},
+"txti": {
+"id": "txti", 
+"is-read-only": false, 
+"description": ["The Trail Trace Identifier (TTI) information, provisioned by the managing system at the termination source, to be placed in the TTI overhead position of the source of a trail for transmission."]
+},
+"odu-mep-pac-g": {
+"id": "odu-mep-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-type": {
+"id": "odu-type", 
+"is-read-only": false, 
+"description": ["This attribute specifies the type of the ODU termination point."]
+},
+"odu-rate": {
+"id": "odu-rate", 
+"is-read-only": false, 
+"description": ["This attribute indicates the rate of the ODU terminatino point. This attribute is Set at create; i.e., once created it cannot be changed directly. In case of resizable ODU flex, its value can be changed via HAO (not directly on the attribute)."]
+},
+"odu-rate-tolerance": {
+"id": "odu-rate-tolerance", 
+"is-read-only": false, 
+"description": ["This attribute indicates the rate tolerance of the ODU termination point. Valid values are real value in the unit of ppm. Standardized values are defined in Table 7-2/G.709."]
+},
+"odu-common-pac-g": {
+"id": "odu-common-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"n-bbe": {
+"id": "n-bbe", 
+"is-read-only": false, 
+"description": ["Near-end Background Block Error"]
+},
+"f-bbe": {
+"id": "f-bbe", 
+"is-read-only": false, 
+"description": ["Far-end Background Block Error"]
+},
+"n-ses": {
+"id": "n-ses", 
+"is-read-only": false, 
+"description": ["Near-end Severely Errored Second"]
+},
+"f-ses": {
+"id": "f-ses", 
+"is-read-only": false, 
+"description": ["Far-end Severely Errored Second"]
+},
+"uas": {
+"id": "uas", 
+"is-read-only": false, 
+"description": ["UnAvailable Second"]
+},
+"odu-pm-pac-g": {
+"id": "odu-pm-pac-g", 
+"is-read-only": false, 
+"description": ["Instance of this object class contains the ODUP layer-specific Current Data. This object class is a subclass of the OTN_CurrentData object class. PM data attributes: fBbe, fSes, nBbe, nSes. uas"]
+},
+"bdi": {
+"id": "bdi", 
+"is-read-only": false, 
+"description": ["Backward Defect Indication"]
+},
+"deg": {
+"id": "deg", 
+"is-read-only": false, 
+"description": ["Signal Degraded"]
+},
+"lck": {
+"id": "lck", 
+"is-read-only": false, 
+"description": ["Locked"]
+},
+"oci": {
+"id": "oci", 
+"is-read-only": false, 
+"description": ["Open Connection Indicator"]
+},
+"ssf": {
+"id": "ssf", 
+"is-read-only": false, 
+"description": ["Server Signal Failure"]
+},
+"tim": {
+"id": "tim", 
+"is-read-only": false, 
+"description": ["Trail Trace Identifier Mismatch"]
+},
+"odu-defect-pac-g": {
+"id": "odu-defect-pac-g", 
+"is-read-only": false, 
+"description": ["The valid list of defects raised on the entity. If the value of any attribute is true, then the corresponding defect is raised."]
+},
+"ODU_TYPE": {
+"id": "ODU_TYPE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ODU_TYPE_ODU0": {
+"id": "ODU_TYPE_ODU0", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ODU_TYPE_ODU1": {
+"id": "ODU_TYPE_ODU1", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ODU_TYPE_ODU2": {
+"id": "ODU_TYPE_ODU2", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ODU_TYPE_ODU2E": {
+"id": "ODU_TYPE_ODU2E", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ODU_TYPE_ODU3": {
+"id": "ODU_TYPE_ODU3", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ODU_TYPE_ODU4": {
+"id": "ODU_TYPE_ODU4", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ODU_TYPE_ODU_FLEX": {
+"id": "ODU_TYPE_ODU_FLEX", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ODU_TYPE_ODU_CN": {
+"id": "ODU_TYPE_ODU_CN", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-type": {
+"id": "odu-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"AMP": {
+"id": "AMP", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"BMP": {
+"id": "BMP", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"GFP-F": {
+"id": "GFP-F", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"GMP": {
+"id": "GMP", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"TTP_GFP_BMP": {
+"id": "TTP_GFP_BMP", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"NULL": {
+"id": "NULL", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mapping-type": {
+"id": "mapping-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DAPI": {
+"id": "DAPI", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SAPI": {
+"id": "SAPI", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"BOTH": {
+"id": "BOTH", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"OFF": {
+"id": "OFF", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tim-det-mo": {
+"id": "tim-det-mo", 
+"is-read-only": false, 
+"description": ["List of modes for trace identifier mismatch detection."]
+},
+"1G25": {
+"id": "1G25", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"2G5": {
+"id": "2G5", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-slot-size": {
+"id": "odu-slot-size", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"named-payload-type": {
+"id": "named-payload-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"hex-payload-type": {
+"id": "hex-payload-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-payload-type-g": {
+"id": "odu-payload-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"UNKNOWN": {
+"id": "UNKNOWN", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"UNINTERPRETABLE": {
+"id": "UNINTERPRETABLE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"odu-named-payload-type": {
+"id": "odu-named-payload-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"deg-thr-value": {
+"id": "deg-thr-value", 
+"is-read-only": false, 
+"description": ["Percentage of detected errored blocks"]
+},
+"deg-thr-type": {
+"id": "deg-thr-type", 
+"is-read-only": false, 
+"description": ["Number of errored blocks"]
+},
+"percentage-granularity": {
+"id": "percentage-granularity", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"deg-thr-g": {
+"id": "deg-thr-g", 
+"is-read-only": false, 
+"description": ["Degraded Threshold, specify either the percentage or the number of Errored Blocks in the defined interval. degThrValue when type is PERCENTAGE: percentageGranularity is used to indicate the number of decimal points So if percentageGranularity is ones, a value of 1 in degThrValue would indicate 1%, a value of 10 = 10%, a value of 100 = 100% So if percentageGranularity is thousandths a value of 1 in degThrValue would indicate 0.001%, a value of 1000 = 1%, a value of 1000000 = 100% degThrValue when type is NUMBER_ERROR_BLOCKS: Number of Errored Blocks is captured in an integer value."]
+},
+"PERCENTAGE": {
+"id": "PERCENTAGE", 
+"is-read-only": false, 
+"description": ["Choice of % or Number of errored blocks"]
+},
+"NUMBER_ERRORED_BLOCKS": {
+"id": "NUMBER_ERRORED_BLOCKS", 
+"is-read-only": false, 
+"description": ["Number of % or blocks"]
+},
+"deg-thr-type": {
+"id": "deg-thr-type", 
+"is-read-only": false, 
+"description": ["The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer."]
+},
+"NO_SOURCE_TC": {
+"id": "NO_SOURCE_TC", 
+"is-read-only": false, 
+"description": ["TCM byte 3 (bits 6 7 8) -- 0 0 0, No source Tandem Connection"]
+},
+"IN_USE_WITHOUT_IAE": {
+"id": "IN_USE_WITHOUT_IAE", 
+"is-read-only": false, 
+"description": ["TCM byte 3 (bits 6 7 8) -- 0 0 1, In use without IAE (Incoming Alignment Error)"]
+},
+"IN_USE_WITH_IAE": {
+"id": "IN_USE_WITH_IAE", 
+"is-read-only": false, 
+"description": ["TCM byte 3 (bits 6 7 8) -- 0 1 0, In use with IAE (Incoming Alignment Error)"]
+},
+"RESERVED_1": {
+"id": "RESERVED_1", 
+"is-read-only": false, 
+"description": ["TCM byte 3 (bits 6 7 8) -- 0 1 1, Reserved for future international standardization"]
+},
+"RESERVED_2": {
+"id": "RESERVED_2", 
+"is-read-only": false, 
+"description": ["TCM byte 3 (bits 6 7 8) -- 1 0 0, Reserved for future international standardization"]
+},
+"LCK": {
+"id": "LCK", 
+"is-read-only": false, 
+"description": ["TCM byte 3 (bits 6 7 8) -- 1 0 1, Maintenance signal: ODU-LCK"]
+},
+"OCI": {
+"id": "OCI", 
+"is-read-only": false, 
+"description": ["TCM byte 3 (bits 6 7 8) -- 1 1 0, Maintenance signal: ODU-OCI"]
+},
+"AIS": {
+"id": "AIS", 
+"is-read-only": false, 
+"description": ["TCM byte 3 (bits 6 7 8) -- 1 1 1, Maintenance signal: ODU-AIS"]
+},
+"tcm-status": {
+"id": "tcm-status", 
+"is-read-only": false, 
+"description": ["See Table 15-5/G.709/Y.1331"]
+},
+"OPERATIONAL": {
+"id": "OPERATIONAL", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"TRANSPARENT": {
+"id": "TRANSPARENT", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MONITOR": {
+"id": "MONITOR", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tcm-mode": {
+"id": "tcm-mode", 
+"is-read-only": false, 
+"description": ["List of value modes for the sink side of the tandem connection monitoring function."]
+},
+"INTRUSIVE": {
+"id": "INTRUSIVE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"NON-INTRUSIVE": {
+"id": "NON-INTRUSIVE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tcm-monitoring": {
+"id": "tcm-monitoring", 
+"is-read-only": false, 
+"description": ["Monitoring types for the tandem connection monitoring function."]
+},
+"NORMAL": {
+"id": "NORMAL", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"PASS-THROUGH": {
+"id": "PASS-THROUGH", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ERASE": {
+"id": "ERASE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"tcm-extension": {
+"id": "tcm-extension", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ONES": {
+"id": "ONES", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ONE_TENTHS": {
+"id": "ONE_TENTHS", 
+"is-read-only": false, 
+"description": ["value * (1/10)"]
+},
+"ONE_HUNDREDTHS": {
+"id": "ONE_HUNDREDTHS", 
+"is-read-only": false, 
+"description": ["value * (1/100)"]
+},
+"ONE_THOUSANDTHS": {
+"id": "ONE_THOUSANDTHS", 
+"is-read-only": false, 
+"description": ["value * (1/1000)"]
+},
+"percentage-granularity": {
+"id": "percentage-granularity", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"bidirectional": {
+"id": "bidirectional", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"uas": {
+"id": "uas", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"nuas": {
+"id": "nuas", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"fuas": {
+"id": "fuas", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"uas-choice-g": {
+"id": "uas-choice-g", 
+"is-read-only": false, 
+"description": ["If bidirectional is TRUE then use the uas attribute, if bidirectional is FALSE use the nuas, and fuas attributes"]
+}}
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-path-computation@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-path-computation@2018-08-31.schema-information.json
new file mode 100644
index 0000000..4cf6b1c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-path-computation@2018-08-31.schema-information.json
@@ -0,0 +1,403 @@
+{ "schama-information": {
+
+"tapi-path-computation": {
+"id": "tapi-path-computation", 
+"is-read-only": false, 
+"description": ["This module contains TAPI Path Computation Model definitions. Source: TapiPathComputation.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
+},
+"path-uuid": {
+"id": "path-uuid", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"path-ref-g": {
+"id": "path-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"link": {
+"id": "link", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"routing-constraint": {
+"id": "routing-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"direction": {
+"id": "direction", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"layer-protocol-name": {
+"id": "layer-protocol-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"path-g": {
+"id": "path-g", 
+"is-read-only": false, 
+"description": ["Path is described by an ordered list of TE Links. A TE Link is defined by a pair of Node/NodeEdgePoint IDs. A Connection is realized by concatenating link resources (associated with a Link) and the lower-level connections (cross-connections) in the different nodes"]
+},
+"service-interface-point": {
+"id": "service-interface-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"layer-protocol-name": {
+"id": "layer-protocol-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"layer-protocol-qualifier": {
+"id": "layer-protocol-qualifier", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"capacity": {
+"id": "capacity", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"role": {
+"id": "role", 
+"is-read-only": false, 
+"description": ["Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."]
+},
+"direction": {
+"id": "direction", 
+"is-read-only": false, 
+"description": ["The orientation of defined flow at the EndPoint."]
+},
+"path-service-end-point-g": {
+"id": "path-service-end-point-g", 
+"is-read-only": false, 
+"description": ["The association of the FC to LTPs is made via EndPoints. The EndPoint (EP) object class models the access to the FC function. The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances. In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC. It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point. The EP replaces the Protection Unit of a traditional protection model. The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component"]
+},
+"path": {
+"id": "path", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"end-point": {
+"id": "end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"routing-constraint": {
+"id": "routing-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"topology-constraint": {
+"id": "topology-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"objective-function": {
+"id": "objective-function", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"optimization-constraint": {
+"id": "optimization-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"path-computation-service-g": {
+"id": "path-computation-service-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"bandwidth-optimization": {
+"id": "bandwidth-optimization", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"concurrent-paths": {
+"id": "concurrent-paths", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"cost-optimization": {
+"id": "cost-optimization", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"link-utilization": {
+"id": "link-utilization", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"resource-sharing": {
+"id": "resource-sharing", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"path-objective-function-g": {
+"id": "path-objective-function-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"traffic-interruption": {
+"id": "traffic-interruption", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"path-optimization-constraint-g": {
+"id": "path-optimization-constraint-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"cost-characteristic": {
+"id": "cost-characteristic", 
+"is-read-only": false, 
+"description": ["The list of costs where each cost relates to some aspect of the TopologicalEntity."]
+},
+"latency-characteristic": {
+"id": "latency-characteristic", 
+"is-read-only": false, 
+"description": ["The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic."]
+},
+"risk-diversity-characteristic": {
+"id": "risk-diversity-characteristic", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"diversity-policy": {
+"id": "diversity-policy", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"route-objective-function": {
+"id": "route-objective-function", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"route-direction": {
+"id": "route-direction", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"is-exclusive": {
+"id": "is-exclusive", 
+"is-read-only": false, 
+"description": ["To distinguish if the resources are to be exclusive to the service"]
+},
+"routing-constraint-g": {
+"id": "routing-constraint-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"path-comp-service": {
+"id": "path-comp-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"path": {
+"id": "path", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"path-computation-context-g": {
+"id": "path-computation-context-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"include-topology": {
+"id": "include-topology", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"avoid-topology": {
+"id": "avoid-topology", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"include-path": {
+"id": "include-path", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"exclude-path": {
+"id": "exclude-path", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"include-link": {
+"id": "include-link", 
+"is-read-only": false, 
+"description": ["This is a loose constraint - that is it is unordered and could be a partial list"]
+},
+"exclude-link": {
+"id": "exclude-link", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"include-node": {
+"id": "include-node", 
+"is-read-only": false, 
+"description": ["This is a loose constraint - that is it is unordered and could be a partial list"]
+},
+"exclude-node": {
+"id": "exclude-node", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"preferred-transport-layer": {
+"id": "preferred-transport-layer", 
+"is-read-only": false, 
+"description": ["soft constraint requested by client to indicate the layer(s) of transport connection that it prefers to carry the service. This could be same as the service layer or one of the supported server layers"]
+},
+"topology-constraint-g": {
+"id": "topology-constraint-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MIN_WORK_ROUTE_HOP": {
+"id": "MIN_WORK_ROUTE_HOP", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MIN_WORK_ROUTE_COST": {
+"id": "MIN_WORK_ROUTE_COST", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MIN_WORK_ROUTE_LATENCY": {
+"id": "MIN_WORK_ROUTE_LATENCY", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_HOP": {
+"id": "MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_HOP", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_COST": {
+"id": "MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_COST", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_LATENCY": {
+"id": "MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_LATENCY", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"LOAD_BALANCE_MAX_UNUSED_CAPACITY": {
+"id": "LOAD_BALANCE_MAX_UNUSED_CAPACITY", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"route-objective-function": {
+"id": "route-objective-function", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SRLG": {
+"id": "SRLG", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SRNG": {
+"id": "SRNG", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SNG": {
+"id": "SNG", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"NODE": {
+"id": "NODE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"LINK": {
+"id": "LINK", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"diversity-policy": {
+"id": "diversity-policy", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"compute-p-2-p-path": {
+"id": "compute-p-2-p-path", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"sep": {
+"id": "sep", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"routing-constraint": {
+"id": "routing-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"topology-constraint": {
+"id": "topology-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"objective-function": {
+"id": "objective-function", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service": {
+"id": "service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"optimize-p-2-p-path": {
+"id": "optimize-p-2-p-path", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"path-id-or-name": {
+"id": "path-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"routing-constraint": {
+"id": "routing-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"optimization-constraint": {
+"id": "optimization-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"objective-function": {
+"id": "objective-function", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service": {
+"id": "service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"delete-p-2-p-path": {
+"id": "delete-p-2-p-path", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"path-id-or-name": {
+"id": "path-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service": {
+"id": "service", 
+"is-read-only": false, 
+"description": ["none"]
+}}
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-photonic-media@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-photonic-media@2018-08-31.schema-information.json
new file mode 100644
index 0000000..d4cf4ef
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-photonic-media@2018-08-31.schema-information.json
@@ -0,0 +1,798 @@
+{ "schama-information": {
+
+"tapi-photonic-media": {
+"id": "tapi-photonic-media", 
+"is-read-only": false, 
+"description": ["This module contains TAPI PhotonicMedia Model definitions. Source: TapiPhotonicMedia.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
+},
+"number-of-otsi": {
+"id": "number-of-otsi", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-gserver-adaptation-pac-g": {
+"id": "otsi-gserver-adaptation-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-termination": {
+"id": "otsi-termination", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-connection-end-point-spec-g": {
+"id": "otsi-connection-end-point-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"selected-central-frequency": {
+"id": "selected-central-frequency", 
+"is-read-only": false, 
+"unit":"MHz",
+"description": ["none"]
+},
+"selected-application-identifier": {
+"id": "selected-application-identifier", 
+"is-read-only": false, 
+"description": ["This attribute indicates the selected Application Identifier that is used by the OCh trail termination function. The syntax of ApplicationIdentifier is a pair {ApplicationIdentifierType, PrintableString}. The value of ApplicationIdentifierType is either STANDARD or PROPRIETARY. The value of PrintableString represents the standard application code as defined in the ITU-T Recommendations or a vendor-specific proprietary code. If the ApplicationIdentifierType is STANDARD the value of PrintableString represents a standard application code as defined in the ITU-T Recommendations. If the ApplicationIdentifierType is PROPRIETARY, the first six characters of the PrintableString must contain the Hexadecimal representation of an OUI assigned to the vendor whose implementation generated the Application Identifier; the remaining octets of the PrintableString are unspecified. The value of this attribute of an object instance has to be one of the values identified in the attribute SupportableApplicationIdentifierList of the same object instance. The values and value ranges of the optical interface parameters of a standard application code must be consistent with those values specified in the ITU-T Recommendation for that application code."]
+},
+"selected-modulation": {
+"id": "selected-modulation", 
+"is-read-only": false, 
+"description": ["This parameter defines the modulation used at the source"]
+},
+"selected-spectrum": {
+"id": "selected-spectrum", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"transmited-power": {
+"id": "transmited-power", 
+"is-read-only": false, 
+"description": ["Measured power at the Transmitter."]
+},
+"received-power": {
+"id": "received-power", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"laser-properties": {
+"id": "laser-properties", 
+"is-read-only": false, 
+"description": ["Laser properties."]
+},
+"otsi-termination-pac-g": {
+"id": "otsi-termination-pac-g", 
+"is-read-only": false, 
+"description": ["Provides status information only."]
+},
+"supportable-spectrum": {
+"id": "supportable-spectrum", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"available-spectrum": {
+"id": "available-spectrum", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"occupied-spectrum": {
+"id": "occupied-spectrum", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"media-channel-pool-capability-pac-g": {
+"id": "media-channel-pool-capability-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mc-pool": {
+"id": "mc-pool", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"media-channel-node-edge-point-spec-g": {
+"id": "media-channel-node-edge-point-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"optical-routing-strategy": {
+"id": "optical-routing-strategy", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-routing-spec-g": {
+"id": "otsi-routing-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"occupied-spectrum": {
+"id": "occupied-spectrum", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"measured-power-ingress": {
+"id": "measured-power-ingress", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"measured-power-egress": {
+"id": "measured-power-egress", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"media-channel-properties-pac-g": {
+"id": "media-channel-properties-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-adapter": {
+"id": "otsi-adapter", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"fec-parameters": {
+"id": "fec-parameters", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-assembly-connection-end-point-spec-g": {
+"id": "otsi-assembly-connection-end-point-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"supportable-lower-central-frequency": {
+"id": "supportable-lower-central-frequency", 
+"is-read-only": false, 
+"unit":"MHz",
+"description": ["The lower frequency of the channel spectrum"]
+},
+"supportable-upper-central-frequency": {
+"id": "supportable-upper-central-frequency", 
+"is-read-only": false, 
+"unit":"MHz",
+"description": ["The Upper frequency of the channel spectrum"]
+},
+"supportable-application-identifier": {
+"id": "supportable-application-identifier", 
+"is-read-only": false, 
+"description": ["The list of supportable ApplicationIdentifiers."]
+},
+"supportable-modulation": {
+"id": "supportable-modulation", 
+"is-read-only": false, 
+"description": ["This parameter defines the modulation used at the source"]
+},
+"total-power-warn-threshold": {
+"id": "total-power-warn-threshold", 
+"is-read-only": false, 
+"unit":"dBm",
+"description": ["none"]
+},
+"otsi-capability-pac-g": {
+"id": "otsi-capability-pac-g", 
+"is-read-only": false, 
+"description": ["Can read the status of the warning for the upper value that the power can reach."]
+},
+"otsi-capability": {
+"id": "otsi-capability", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-service-interface-point-spec-g": {
+"id": "otsi-service-interface-point-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-config": {
+"id": "otsi-config", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"nmc-config": {
+"id": "nmc-config", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"otsi-connectivity-service-end-point-spec-g": {
+"id": "otsi-connectivity-service-end-point-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"central-frequency": {
+"id": "central-frequency", 
+"is-read-only": false, 
+"unit":"MHz",
+"description": ["The central frequency of the laser. It is the oscillation frequency of the corresponding electromagnetic wave"]
+},
+"application-identifier": {
+"id": "application-identifier", 
+"is-read-only": false, 
+"description": ["This attribute indicates the selected Application Identifier."]
+},
+"modulation": {
+"id": "modulation", 
+"is-read-only": false, 
+"description": ["The modulation techniqu selected at the source."]
+},
+"laser-control": {
+"id": "laser-control", 
+"is-read-only": false, 
+"description": ["Laser control can be FORCED-ON, FORCED-OFF or AUTOMATIC-LASER-SHUTDOWN"]
+},
+"transmit-power": {
+"id": "transmit-power", 
+"is-read-only": false, 
+"description": ["Transmit power as requested."]
+},
+"total-power-warn-threshold-upper": {
+"id": "total-power-warn-threshold-upper", 
+"is-read-only": false, 
+"unit":"dBm",
+"description": ["Configure the Max, Default and Min values for the Upper power threshold."]
+},
+"total-power-warn-threshold-lower": {
+"id": "total-power-warn-threshold-lower", 
+"is-read-only": false, 
+"unit":"dBm",
+"description": ["Configure Max, Default and Min values for lower power threshold."]
+},
+"otsi-termination-config-pac-g": {
+"id": "otsi-termination-config-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"pre-fec-ber": {
+"id": "pre-fec-ber", 
+"is-read-only": false, 
+"description": ["counter: bit error rate before correction by FEC"]
+},
+"post-fec-ber": {
+"id": "post-fec-ber", 
+"is-read-only": false, 
+"description": ["counter: bit error rate after correction by FEC"]
+},
+"corrected-bytes": {
+"id": "corrected-bytes", 
+"is-read-only": false, 
+"description": ["Bytes corrected between those that were received corrupted"]
+},
+"corrected-bits": {
+"id": "corrected-bits", 
+"is-read-only": false, 
+"description": ["Bits corrected between those that were received corrupted"]
+},
+"uncorrectable-bytes": {
+"id": "uncorrectable-bytes", 
+"is-read-only": false, 
+"description": ["Bytes that could not be corrected by FEC"]
+},
+"uncorrectable-bits": {
+"id": "uncorrectable-bits", 
+"is-read-only": false, 
+"description": ["Bits that could not be corrected by FEC"]
+},
+"fec-properties-pac-g": {
+"id": "fec-properties-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mc-pool": {
+"id": "mc-pool", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"media-channel-service-interface-point-spec-g": {
+"id": "media-channel-service-interface-point-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mc-config": {
+"id": "mc-config", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"media-channel-connectivity-service-end-point-spec-g": {
+"id": "media-channel-connectivity-service-end-point-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"spectrum": {
+"id": "spectrum", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"media-channel-config-pac-g": {
+"id": "media-channel-config-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"media-channel": {
+"id": "media-channel", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"media-channel-connection-end-point-spec-g": {
+"id": "media-channel-connection-end-point-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ots-media-channel": {
+"id": "ots-media-channel", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ots-connection-end-point-spec-g": {
+"id": "ots-connection-end-point-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"media-channel-assembly-spec-g": {
+"id": "media-channel-assembly-spec-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"laser-status": {
+"id": "laser-status", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"laser-application-type": {
+"id": "laser-application-type", 
+"is-read-only": false, 
+"description": ["The type of laser, its operational wavelengths, and its applications. String size 255."]
+},
+"laser-bias-current": {
+"id": "laser-bias-current", 
+"is-read-only": false, 
+"description": ["The Bias current of the laser that is the medium polarization current of the laser."]
+},
+"laser-temperature": {
+"id": "laser-temperature", 
+"is-read-only": false, 
+"description": ["The temperature of the laser"]
+},
+"laser-properties-pac-g": {
+"id": "laser-properties-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"total-power": {
+"id": "total-power", 
+"is-read-only": false, 
+"description": ["The total power at any point in a channel specified in dBm. range of type : -99.000..99.000"]
+},
+"power-spectral-density": {
+"id": "power-spectral-density", 
+"is-read-only": false, 
+"description": ["This describes how power of a signal is distributed over frequency specified in nW/MHz range of type : -2147483648..2147483648"]
+},
+"power-properties-pac-g": {
+"id": "power-properties-pac-g", 
+"is-read-only": false, 
+"description": ["Indication with severity warning raised when a total power value measured is above the threshold."]
+},
+"total-power-upper-warn-threshold-default": {
+"id": "total-power-upper-warn-threshold-default", 
+"is-read-only": false, 
+"description": ["Can read the value of the default threshold that was set"]
+},
+"total-power-upper-warn-threshold-min": {
+"id": "total-power-upper-warn-threshold-min", 
+"is-read-only": false, 
+"description": ["Can read the value of the lower threshold that was set"]
+},
+"total-power-upper-warn-threshold-max": {
+"id": "total-power-upper-warn-threshold-max", 
+"is-read-only": false, 
+"description": ["Can read the value of the upper threshold that was set"]
+},
+"total-power-lower-warn-threshold-default": {
+"id": "total-power-lower-warn-threshold-default", 
+"is-read-only": false, 
+"description": ["Can read the value of the default threshold that was set"]
+},
+"total-power-lower-warn-threshold-max": {
+"id": "total-power-lower-warn-threshold-max", 
+"is-read-only": false, 
+"description": ["Can read the value of the upper threshold that was set"]
+},
+"total-power-lower-warn-threshold-min": {
+"id": "total-power-lower-warn-threshold-min", 
+"is-read-only": false, 
+"description": ["Can read the value of the lower threshold that was set"]
+},
+"total-power-threshold-pac-g": {
+"id": "total-power-threshold-pac-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SPECTRUM_TYPE": {
+"id": "SPECTRUM_TYPE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SPECTRUM_TYPE_OTSi": {
+"id": "SPECTRUM_TYPE_OTSi", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SPECTRUM_TYPE_OTSiA": {
+"id": "SPECTRUM_TYPE_OTSiA", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SPECTRUM_TYPE_OTSiG": {
+"id": "SPECTRUM_TYPE_OTSiG", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SPECTRUM_TYPE_NMC": {
+"id": "SPECTRUM_TYPE_NMC", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SPECTRUM_TYPE_NMCA": {
+"id": "SPECTRUM_TYPE_NMCA", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SPECTRUM_TYPE_SMC": {
+"id": "SPECTRUM_TYPE_SMC", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SPECTRUM_TYPE_SMCA": {
+"id": "SPECTRUM_TYPE_SMCA", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SPECTRUM_TYPE_OCH": {
+"id": "SPECTRUM_TYPE_OCH", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SPECTRUM_TYPE_OMS": {
+"id": "SPECTRUM_TYPE_OMS", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"SPECTRUM_TYPE_OTS": {
+"id": "SPECTRUM_TYPE_OTS", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"application-identifier-type": {
+"id": "application-identifier-type", 
+"is-read-only": false, 
+"description": ["The ITU-T recommendation which defines the application code format."]
+},
+"application-code": {
+"id": "application-code", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"application-identifier-g": {
+"id": "application-identifier-g", 
+"is-read-only": false, 
+"description": ["The syntax of ApplicationIdentifier is a pair {ApplicationIdentifierType, PrintableString}. The value of ApplicationIdentifierType is either STANDARD or PROPRIETARY. The value of PrintableString represents the standard application code as defined in the ITU-T Recommendations or a vendor-specific proprietary code. If the ApplicationIdentifierType is STANDARD the value of PrintableString represents a standard application code as defined in the ITU-T Recommendations. If the ApplicationIdentifierType is PROPRIETARY, the first six characters of the PrintableString must contain the Hexadecimal representation of an OUI assigned to the vendor whose implementation generated the Application Identifier; the remaining octets of the PrintableString are unspecified. The value of this attribute of an object instance has to be one of the values identified in the attribute SupportableApplicationIdentifierList of the same object instance. The values and value ranges of the optical interface parameters of a standard application code must be consistent with those values specified in the ITU-T Recommendation for that application code."]
+},
+"grid-type": {
+"id": "grid-type", 
+"is-read-only": false, 
+"description": ["Specifies the frequency grid standard used to determine the nominal central frequency and frequency slot width"]
+},
+"adjustment-granularity": {
+"id": "adjustment-granularity", 
+"is-read-only": false, 
+"description": ["Adjustment granularity in Gigahertz. As per ITU-T G.694.1, it is used to calculate nominal central frequency (in THz)"]
+},
+"central-frequency": {
+"id": "central-frequency", 
+"is-read-only": false, 
+"unit":"MHz",
+"description": ["The central frequency of the laser specified in MHz. It is the oscillation frequency of the corresponding electromagnetic wave."]
+},
+"channel-number": {
+"id": "channel-number", 
+"is-read-only": false, 
+"description": ["As per ITU-T G.694.1, this attribute is denoted as 'n' and is used to calculate the nominal central frequency (in THz) as follows: 193.1 + <channelNumber> × <adjustmentGranularity> where channelNumber is a positive or negative integer including 0 and adjustment_granularity is the nominal central frequency granularity in THz"]
+},
+"central-frequency-or-wavelength-g": {
+"id": "central-frequency-or-wavelength-g", 
+"is-read-only": false, 
+"description": ["This data-type holds the central frequency directly or optionally the information to determine the nominal central frequency of a FIXED grid (DWDM or CWDM) and FLEX grid type systems. As per ITU-T G.694.1, the nominal central frequency (in THz) is calculated as follows: 193.1 + <channelNumber> × <adjustmentGranularity> where channelNumber is a positive or negative integer including 0 and <adjustment_granularity> is the nominal central frequency granularity in THz For FIXED grid types, the adjustmentGranularity is one of (0.1/0.05/0.025/0.0125) THz corresponding to channel spacing of one of (100/50/25/12.5) GHz For FLEX grid type, the adjusmentGranularity is 0.00625 THz and the slot width is variable in increments of 12.5 GHz"]
+},
+"OPTIMAL_OSNR": {
+"id": "OPTIMAL_OSNR", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"NO_RELAY": {
+"id": "NO_RELAY", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MIN_RELAY": {
+"id": "MIN_RELAY", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"PREFERRED_NO_CHANGE_WAVELENGTH_AS_RESTORE": {
+"id": "PREFERRED_NO_CHANGE_WAVELENGTH_AS_RESTORE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"PREFERRED_NO_SKIPPING_WAVELENGTH": {
+"id": "PREFERRED_NO_SKIPPING_WAVELENGTH", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"optical-routing-strategy": {
+"id": "optical-routing-strategy", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"PROPRIETARY": {
+"id": "PROPRIETARY", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ITUT_G959_1": {
+"id": "ITUT_G959_1", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ITUT_G698_1": {
+"id": "ITUT_G698_1", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ITUT_G698_2": {
+"id": "ITUT_G698_2", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ITUT_G696_1": {
+"id": "ITUT_G696_1", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ITUT_G695": {
+"id": "ITUT_G695", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"application-identifier-type": {
+"id": "application-identifier-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DWDM": {
+"id": "DWDM", 
+"is-read-only": false, 
+"description": ["Fixed frequency grid in C & L bands as specified in ITU-T G.694.1"]
+},
+"CWDM": {
+"id": "CWDM", 
+"is-read-only": false, 
+"description": ["Fixed frequency grid as specified in ITU-T G.694.2"]
+},
+"FLEX": {
+"id": "FLEX", 
+"is-read-only": false, 
+"description": ["Flexible frequency grid as specified in ITU-T G.694.1. In this case, - the allowed frequency slots have a nominal central frequency (in THz) defined by: 193.1 + n × 0.00625 where n is a positive or negative integer including 0 and 0.00625 is the nominal central frequency granularity in THz - and a slot width defined by: 12.5 × m where m is a positive integer and 12.5 is the slot width granularity in GHz. Any combination of frequency slots is allowed as long as no two frequency slots overlap."]
+},
+"GRIDLESS": {
+"id": "GRIDLESS", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"UNSPECIFIED": {
+"id": "UNSPECIFIED", 
+"is-read-only": false, 
+"description": ["Unspecified/proprietary frequency grid"]
+},
+"grid-type": {
+"id": "grid-type", 
+"is-read-only": false, 
+"description": ["The frequency grid standard that specify reference set of frequencies used to denote allowed nominal central frequencies that may be used for defining applications."]
+},
+"G_100GHZ": {
+"id": "G_100GHZ", 
+"is-read-only": false, 
+"description": ["100000 MHz"]
+},
+"G_50GHZ": {
+"id": "G_50GHZ", 
+"is-read-only": false, 
+"description": ["50000 MHz"]
+},
+"G_25GHZ": {
+"id": "G_25GHZ", 
+"is-read-only": false, 
+"description": ["25000 MHz"]
+},
+"G_12_5GHZ": {
+"id": "G_12_5GHZ", 
+"is-read-only": false, 
+"description": ["12500 MHz"]
+},
+"G_6_25GHZ": {
+"id": "G_6_25GHZ", 
+"is-read-only": false, 
+"description": ["6250 MHz"]
+},
+"G_3_125GHZ": {
+"id": "G_3_125GHZ", 
+"is-read-only": false, 
+"description": ["3125 MHz"]
+},
+"UNCONSTRAINED": {
+"id": "UNCONSTRAINED", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"adjustment-granularity": {
+"id": "adjustment-granularity", 
+"is-read-only": false, 
+"description": ["Adjustment granularity in Gigahertz. As per ITU-T G.694.1, it is used to calculate nominal central frequency"]
+},
+"upper-frequency": {
+"id": "upper-frequency", 
+"is-read-only": false, 
+"unit":"MHz",
+"description": ["The upper frequency bound of the media channel spectrum specified in MHz"]
+},
+"lower-frequency": {
+"id": "lower-frequency", 
+"is-read-only": false,
+"unit":"MHz", 
+"description": ["The lower frequency bound of the media channel spectrum specified in MHz"]
+},
+"frequency-slot": {
+"id": "frequency-slot", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"spectrum-g": {
+"id": "spectrum-g", 
+"is-read-only": false, 
+"description": ["This data-type holds the spectrum information in termsof upper/lower frequency directly or optionally the information to determin this in terms of the nominal central frequency and spectral width for a FIXED grid (DWDM or CWDM) and FLEX grid type systems."]
+},
+"RZ": {
+"id": "RZ", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"NRZ": {
+"id": "NRZ", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"BPSK": {
+"id": "BPSK", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DPSK": {
+"id": "DPSK", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"QPSK": {
+"id": "QPSK", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"8QAM": {
+"id": "8QAM", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"16QAM": {
+"id": "16QAM", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"UNDEFINED": {
+"id": "UNDEFINED", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"modulation-technique": {
+"id": "modulation-technique", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"spectral-width": {
+"id": "spectral-width", 
+"is-read-only": false, 
+"description": ["Width of the media channel spectrum specified in MHz"]
+},
+"slot-width-number": {
+"id": "slot-width-number", 
+"is-read-only": false, 
+"description": ["As per ITU-T G.694.1, this attribute is denoted as 'm' and is used to calculate the slot width (in GHz) as follows: 12.5 × m where m is a positive integer and 12.5 is the slot width granularity in GHz."]
+},
+"frequency-slot-g": {
+"id": "frequency-slot-g", 
+"is-read-only": false, 
+"description": ["The frequency range allocated to a slot and unavailable to other slots within a flexible grid. A frequency slot is defined by its nominal central frequency. As per ITU-T G.694.1 the slot width is calculated as follows: 12.5 × <slotWidthNumber> where slotWidthNumber is a positive integer and 12.5 is the slot width granularity in GHz"]
+},
+"PUMP": {
+"id": "PUMP", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MODULATED": {
+"id": "MODULATED", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"PULSE": {
+"id": "PULSE", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"laser-type": {
+"id": "laser-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"spectrum-type": {
+"id": "spectrum-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"FORCED-ON": {
+"id": "FORCED-ON", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"FORCED-OFF": {
+"id": "FORCED-OFF", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"AUTOMATIC-LASER-SHUTDOWN": {
+"id": "AUTOMATIC-LASER-SHUTDOWN", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"UNDEFINED": {
+"id": "UNDEFINED", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"laser-control-type": {
+"id": "laser-control-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ON": {
+"id": "ON", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"OFF": {
+"id": "OFF", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"PULSING": {
+"id": "PULSING", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"UNDEFINED": {
+"id": "UNDEFINED", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"laser-control-status-type": {
+"id": "laser-control-status-type", 
+"is-read-only": false, 
+"description": ["none"]
+}}
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-topology@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-topology@2018-08-31.schema-information.json
new file mode 100644
index 0000000..b4a0dc1
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-topology@2018-08-31.schema-information.json
@@ -0,0 +1,648 @@
+{ "schama-information": {
+
+"tapi-topology": {
+"id": "tapi-topology", 
+"is-read-only": false, 
+"description": ["This module contains TAPI Topology Model definitions. Source: TapiTopology.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
+},
+"topology-uuid": {
+"id": "topology-uuid", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"topology-ref-g": {
+"id": "topology-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"link-uuid": {
+"id": "link-uuid", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"link-ref-g": {
+"id": "link-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"node-uuid": {
+"id": "node-uuid", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"node-ref-g": {
+"id": "node-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"node-edge-point-uuid": {
+"id": "node-edge-point-uuid", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"node-edge-point-ref-g": {
+"id": "node-edge-point-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"node-rule-group-uuid": {
+"id": "node-rule-group-uuid", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"node-rule-group-ref-g": {
+"id": "node-rule-group-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"node-edge-point": {
+"id": "node-edge-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"layer-protocol-name": {
+"id": "layer-protocol-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"direction": {
+"id": "direction", 
+"is-read-only": false, 
+"description": ["The directionality of the Link. Is applicable to simple Links where all LinkEnds are BIDIRECTIONAL (the Link will be BIDIRECTIONAL) or UNIDIRECTIONAL (the Link will be UNIDIRECTIONAL). Is not present in more complex cases."]
+},
+"resilience-type": {
+"id": "resilience-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"link-g": {
+"id": "link-g", 
+"is-read-only": false, 
+"description": ["The Link object class models effective adjacency between two or more ForwardingDomains (FD)."]
+},
+"owned-node-edge-point": {
+"id": "owned-node-edge-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"aggregated-node-edge-point": {
+"id": "aggregated-node-edge-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"node-rule-group": {
+"id": "node-rule-group", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"encap-topology": {
+"id": "encap-topology", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"layer-protocol-name": {
+"id": "layer-protocol-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"node-g": {
+"id": "node-g", 
+"is-read-only": false, 
+"description": ["The ForwardingDomain (FD) object class models the ForwardingDomain topological component which is used to effect forwarding of transport characteristic information and offers the potential to enable forwarding. At the lowest level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs)."]
+},
+"node": {
+"id": "node", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"link": {
+"id": "link", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"layer-protocol-name": {
+"id": "layer-protocol-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"topology-g": {
+"id": "topology-g", 
+"is-read-only": false, 
+"description": ["The ForwardingDomain (FD) object class models the ForwardingDomain topological component which is used to effect forwarding of transport characteristic information and offers the potential to enable forwarding. At the lowest level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs)."]
+},
+"transitioned-layer-protocol-name": {
+"id": "transitioned-layer-protocol-name", 
+"is-read-only": false, 
+"description": ["Provides the ordered structure of layer protocol transitions encapsulated in the TopologicalEntity. The ordering relates to the LinkPort role."]
+},
+"layer-protocol-transition-pac-g": {
+"id": "layer-protocol-transition-pac-g", 
+"is-read-only": false, 
+"description": ["Relevant for a Link that is formed by abstracting one or more LTPs (in a stack) to focus on the flow and deemphasize the protocol transformation. This abstraction is relevant when considering multi-layer routing. The layer protocols of the LTP and the order of their application to the signal is still relevant and need to be accounted for. This is derived from the LTP spec details. This Pac provides the relevant abstractions of the LTPs and provides the necessary association to the LTPs involved. Links that included details in this Pac are often referred to as Transitional Links."]
+},
+"layer-protocol-name": {
+"id": "layer-protocol-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"supported-cep-layer-protocol-qualifier": {
+"id": "supported-cep-layer-protocol-qualifier", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"aggregated-node-edge-point": {
+"id": "aggregated-node-edge-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"mapped-service-interface-point": {
+"id": "mapped-service-interface-point", 
+"is-read-only": false, 
+"description": ["NodeEdgePoint mapped to more than ServiceInterfacePoint (slicing/virtualizing) or a ServiceInterfacePoint mapped to more than one NodeEdgePoint (load balancing/Resilience) should be considered experimental"]
+},
+"link-port-direction": {
+"id": "link-port-direction", 
+"is-read-only": false, 
+"description": ["The orientation of defined flow at the LinkEnd."]
+},
+"link-port-role": {
+"id": "link-port-role", 
+"is-read-only": false, 
+"description": ["Each LinkEnd of the Link has a role (e.g., symmetric, hub, spoke, leaf, root) in the context of the Link with respect to the Link function."]
+},
+"node-edge-point-g": {
+"id": "node-edge-point-g", 
+"is-read-only": false, 
+"description": ["The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. The structure of LTP supports all transport protocols including circuit and packet forms."]
+},
+"risk-characteristic": {
+"id": "risk-characteristic", 
+"is-read-only": false, 
+"description": ["A list of risk characteristics for consideration in an analysis of shared risk. Each element of the list represents a specific risk consideration."]
+},
+"risk-parameter-pac-g": {
+"id": "risk-parameter-pac-g", 
+"is-read-only": false, 
+"description": ["The risk characteristics of a TopologicalEntity come directly from the underlying physical realization. The risk characteristics propagate from the physical realization to the client and from the server layer to the client layer, this propagation may be modified by protection. A TopologicalEntity may suffer degradation or failure as a result of a problem in a part of the underlying realization. The realization can be partitioned into segments which have some relevant common failure modes. There is a risk of failure/degradation of each segment of the underlying realization. Each segment is a part of a larger physical/geographical unit that behaves as one with respect to failure (i.e. a failure will have a high probability of impacting the whole unit (e.g. all cables in the same duct). Disruptions to that larger physical/geographical unit will impact (cause failure/errors to) all TopologicalEntities that use any part of that larger physical/geographical entity. Any TopologicalEntity that uses any part of that larger physical/geographical unit will suffer impact and hence each TopologicalEntity shares risk. The identifier of each physical/geographical unit that is involved in the realization of each segment of a Topological entity can be listed in the RiskParameter_Pac of that TopologicalEntity. A segment has one or more risk characteristic. Shared risk between two TopologicalEntities compromises the integrity of any solution that use one of those TopologicalEntity as a backup for the other. Where two TopologicalEntities have a common risk characteristic they have an elevated probability of failing simultaneously compared to two TopologicalEntities that do not share risk characteristics."]
+},
+"cost-characteristic": {
+"id": "cost-characteristic", 
+"is-read-only": false, 
+"description": ["The list of costs where each cost relates to some aspect of the TopologicalEntity."]
+},
+"transfer-cost-pac-g": {
+"id": "transfer-cost-pac-g", 
+"is-read-only": false, 
+"description": ["The cost characteristics of a TopologicalEntity not necessarily correlated to the cost of the underlying physical realization. They may be quite specific to the individual TopologicalEntity e.g. opportunity cost. Relates to layer capacity There may be many perspectives from which cost may be considered for a particular TopologicalEntity and hence many specific costs and potentially cost algorithms. Using an entity will incur a cost."]
+},
+"error-characteristic": {
+"id": "error-characteristic", 
+"is-read-only": false, 
+"description": ["Describes the degree to which the signal propagated can be errored. Applies to TDM systems as the errored signal will be propagated and not packet as errored packets will be discarded."]
+},
+"loss-characteristic": {
+"id": "loss-characteristic", 
+"is-read-only": false, 
+"description": ["Describes the acceptable characteristic of lost packets where loss may result from discard due to errors or overflow. Applies to packet systems and not TDM (as for TDM errored signals are propagated unless grossly errored and overflow/underflow turns into timing slips)."]
+},
+"repeat-delivery-characteristic": {
+"id": "repeat-delivery-characteristic", 
+"is-read-only": false, 
+"description": ["Primarily applies to packet systems where a packet may be delivered more than once (in fault recovery for example). It can also apply to TDM where several frames may be received twice due to switching in a system with a large differential propagation delay."]
+},
+"delivery-order-characteristic": {
+"id": "delivery-order-characteristic", 
+"is-read-only": false, 
+"description": ["Describes the degree to which packets will be delivered out of sequence. Does not apply to TDM as the TDM protocols maintain strict order."]
+},
+"unavailable-time-characteristic": {
+"id": "unavailable-time-characteristic", 
+"is-read-only": false, 
+"description": ["Describes the duration for which there may be no valid signal propagated."]
+},
+"server-integrity-process-characteristic": {
+"id": "server-integrity-process-characteristic", 
+"is-read-only": false, 
+"description": ["Describes the effect of any server integrity enhancement process on the characteristics of the TopologicalEntity."]
+},
+"transfer-integrity-pac-g": {
+"id": "transfer-integrity-pac-g", 
+"is-read-only": false, 
+"description": ["Transfer intergrity characteristic covers expected/specified/acceptable characteristic of degradation of the transfered signal. It includes all aspects of possible degradation of signal content as well as any damage of any form to the total TopologicalEntity and to the carried signals. Note that the statement is of total impact to the TopologicalEntity so any partial usage of the TopologicalEntity (e.g. a signal that does not use full capacity) will only suffer its portion of the impact."]
+},
+"latency-characteristic": {
+"id": "latency-characteristic", 
+"is-read-only": false, 
+"description": ["The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic."]
+},
+"transfer-timing-pac-g": {
+"id": "transfer-timing-pac-g", 
+"is-read-only": false, 
+"description": ["A TopologicalEntity will suffer effects from the underlying physical realization related to the timing of the information passed by the TopologicalEntity."]
+},
+"validation-mechanism": {
+"id": "validation-mechanism", 
+"is-read-only": false, 
+"description": ["Provides details of the specific validation mechanism(s) used to confirm the presence of an intended topologicalEntity."]
+},
+"validation-pac-g": {
+"id": "validation-pac-g", 
+"is-read-only": false, 
+"description": ["Validation covers the various adjacenct discovery and reachability verification protocols. Also may cover Information source and degree of integrity."]
+},
+"topology": {
+"id": "topology", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"network-topology-service-g": {
+"id": "network-topology-service-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"nw-topology-service": {
+"id": "nw-topology-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"topology": {
+"id": "topology", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"topology-context-g": {
+"id": "topology-context-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"rule": {
+"id": "rule", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"associated-node-rule-group": {
+"id": "associated-node-rule-group", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"inter-rule-group-g": {
+"id": "inter-rule-group-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"rule": {
+"id": "rule", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"node-edge-point": {
+"id": "node-edge-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"composed-rule-group": {
+"id": "composed-rule-group", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"inter-rule-group": {
+"id": "inter-rule-group", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"node-rule-group-g": {
+"id": "node-rule-group-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"rule-type": {
+"id": "rule-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"forwarding-rule": {
+"id": "forwarding-rule", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"override-priority": {
+"id": "override-priority", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"rule-g": {
+"id": "rule-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"cost-name": {
+"id": "cost-name", 
+"is-read-only": false, 
+"description": ["The cost characteristic will related to some aspect of the TopologicalEntity (e.g. $ cost, routing weight). This aspect will be conveyed by the costName."]
+},
+"cost-value": {
+"id": "cost-value", 
+"is-read-only": false, 
+"description": ["The specific cost."]
+},
+"cost-algorithm": {
+"id": "cost-algorithm", 
+"is-read-only": false, 
+"description": ["The cost may vary based upon some properties of the TopologicalEntity. The rules for the variation are conveyed by the costAlgorithm."]
+},
+"cost-characteristic-g": {
+"id": "cost-characteristic-g", 
+"is-read-only": false, 
+"description": ["The information for a particular cost characteristic."]
+},
+"traffic-property-name": {
+"id": "traffic-property-name", 
+"is-read-only": false, 
+"description": ["The identifier of the specific traffic property to which the queuing latency applies."]
+},
+"fixed-latency-characteristic": {
+"id": "fixed-latency-characteristic", 
+"is-read-only": false, 
+"description": ["A TopologicalEntity suffers delay caused by the realization of the servers (e.g. distance related; FEC encoding etc.) along with some client specific processing. This is the total average latency effect of the TopologicalEntity"]
+},
+"queing-latency-characteristic": {
+"id": "queing-latency-characteristic", 
+"is-read-only": false, 
+"description": ["The specific queuing latency for the traffic property."]
+},
+"jitter-characteristic": {
+"id": "jitter-characteristic", 
+"is-read-only": false, 
+"description": ["High frequency deviation from true periodicity of a signal and therefore a small high rate of change of transfer latency. Applies to TDM systems (and not packet)."]
+},
+"wander-characteristic": {
+"id": "wander-characteristic", 
+"is-read-only": false, 
+"description": ["Low frequency deviation from true periodicity of a signal and therefore a small low rate of change of transfer latency. Applies to TDM systems (and not packet)."]
+},
+"latency-characteristic-g": {
+"id": "latency-characteristic-g", 
+"is-read-only": false, 
+"description": ["Provides information on latency characteristic for a particular stated trafficProperty."]
+},
+"risk-characteristic-name": {
+"id": "risk-characteristic-name", 
+"is-read-only": false, 
+"description": ["The name of the risk characteristic. The characteristic may be related to a specific degree of closeness. For example a particular characteristic may apply to failures that are localized (e.g. to one side of a road) where as another characteristic may relate to failures that have a broader impact (e.g. both sides of a road that crosses a bridge). Depending upon the importance of the traffic being routed different risk characteristics will be evaluated."]
+},
+"risk-identifier-list": {
+"id": "risk-identifier-list", 
+"is-read-only": false, 
+"description": ["A list of the identifiers of each physical/geographic unit (with the specific risk characteristic) that is related to a segment of the TopologicalEntity."]
+},
+"risk-characteristic-g": {
+"id": "risk-characteristic-g", 
+"is-read-only": false, 
+"description": ["The information for a particular risk characteristic where there is a list of risk identifiers related to that characteristic."]
+},
+"validation-mechanism": {
+"id": "validation-mechanism", 
+"is-read-only": false, 
+"description": ["Name of mechanism used to validate adjacency"]
+},
+"layer-protocol-adjacency-validated": {
+"id": "layer-protocol-adjacency-validated", 
+"is-read-only": false, 
+"description": ["State of validatiion"]
+},
+"validation-robustness": {
+"id": "validation-robustness", 
+"is-read-only": false, 
+"description": ["Quality of validation (i.e. how likely is the stated validation to be invalid)"]
+},
+"validation-mechanism-g": {
+"id": "validation-mechanism-g", 
+"is-read-only": false, 
+"description": ["Identifies the validation mechanism and describes the characteristics of that mechanism"]
+},
+"MAY_FORWARD_ACROSS_GROUP": {
+"id": "MAY_FORWARD_ACROSS_GROUP", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"MUST_FORWARD_ACROSS_GROUP": {
+"id": "MUST_FORWARD_ACROSS_GROUP", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"CANNOT_FORWARD_ACROSS_GROUP": {
+"id": "CANNOT_FORWARD_ACROSS_GROUP", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"NO_STATEMENT_ON_FORWARDING": {
+"id": "NO_STATEMENT_ON_FORWARDING", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"forwarding-rule": {
+"id": "forwarding-rule", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"FORWARDING": {
+"id": "FORWARDING", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"CAPACITY": {
+"id": "CAPACITY", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"COST": {
+"id": "COST", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"TIMING": {
+"id": "TIMING", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"RISK": {
+"id": "RISK", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"GROUPING": {
+"id": "GROUPING", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"rule-type": {
+"id": "rule-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"restoration-policy": {
+"id": "restoration-policy", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"protection-type": {
+"id": "protection-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"resilience-type-g": {
+"id": "resilience-type-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"PER_DOMAIN_RESTORATION": {
+"id": "PER_DOMAIN_RESTORATION", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"END_TO_END_RESTORATION": {
+"id": "END_TO_END_RESTORATION", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"NA": {
+"id": "NA", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"restoration-policy": {
+"id": "restoration-policy", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"NO_PROTECTON": {
+"id": "NO_PROTECTON", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ONE_PLUS_ONE_PROTECTION": {
+"id": "ONE_PLUS_ONE_PROTECTION", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ONE_PLUS_ONE_PROTECTION_WITH_DYNAMIC_RESTORATION": {
+"id": "ONE_PLUS_ONE_PROTECTION_WITH_DYNAMIC_RESTORATION", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"PERMANENT_ONE_PLUS_ONE_PROTECTION": {
+"id": "PERMANENT_ONE_PLUS_ONE_PROTECTION", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ONE_FOR_ONE_PROTECTION": {
+"id": "ONE_FOR_ONE_PROTECTION", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"DYNAMIC_RESTORATION": {
+"id": "DYNAMIC_RESTORATION", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"PRE_COMPUTED_RESTORATION": {
+"id": "PRE_COMPUTED_RESTORATION", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"protection-type": {
+"id": "protection-type", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-topology-details": {
+"id": "get-topology-details", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"topology-id-or-name": {
+"id": "topology-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"topology": {
+"id": "topology", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-node-details": {
+"id": "get-node-details", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"topology-id-or-name": {
+"id": "topology-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"node-id-or-name": {
+"id": "node-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"node": {
+"id": "node", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-node-edge-point-details": {
+"id": "get-node-edge-point-details", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"topology-id-or-name": {
+"id": "topology-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"node-id-or-name": {
+"id": "node-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"ep-id-or-name": {
+"id": "ep-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"node-edge-point": {
+"id": "node-edge-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-link-details": {
+"id": "get-link-details", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"topology-id-or-name": {
+"id": "topology-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"link-id-or-name": {
+"id": "link-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"link": {
+"id": "link", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-topology-list": {
+"id": "get-topology-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"topology": {
+"id": "topology", 
+"is-read-only": false, 
+"description": ["none"]
+}}
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-virtual-network@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-virtual-network@2018-08-31.schema-information.json
new file mode 100644
index 0000000..868841d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-virtual-network@2018-08-31.schema-information.json
@@ -0,0 +1,198 @@
+{ "schama-information": {
+
+"tapi-virtual-network": {
+"id": "tapi-virtual-network", 
+"is-read-only": false, 
+"description": ["This module contains TAPI Virtual Network Model definitions. Source: TapiVirtualNetwork.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
+},
+"virtual-nw-service-uuid": {
+"id": "virtual-nw-service-uuid", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"virtual-nw-service-ref-g": {
+"id": "virtual-nw-service-ref-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"src-service-end-point": {
+"id": "src-service-end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"sink-service-end-point": {
+"id": "sink-service-end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"diversity-exclusion": {
+"id": "diversity-exclusion", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"requested-capacity": {
+"id": "requested-capacity", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-level": {
+"id": "service-level", 
+"is-read-only": false, 
+"description": ["An abstract value the meaning of which is mutually agreed – typically represents metrics such as - Class of service, priority, resiliency, availability"]
+},
+"service-layer": {
+"id": "service-layer", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"cost-characteristic": {
+"id": "cost-characteristic", 
+"is-read-only": false, 
+"description": ["The list of costs where each cost relates to some aspect of the TopologicalEntity."]
+},
+"latency-characteristic": {
+"id": "latency-characteristic", 
+"is-read-only": false, 
+"description": ["The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic."]
+},
+"virtual-network-constraint-g": {
+"id": "virtual-network-constraint-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"topology": {
+"id": "topology", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"end-point": {
+"id": "end-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"vnw-constraint": {
+"id": "vnw-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"schedule": {
+"id": "schedule", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"state": {
+"id": "state", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"layer-protocol-name": {
+"id": "layer-protocol-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"virtual-network-service-g": {
+"id": "virtual-network-service-g", 
+"is-read-only": false, 
+"description": ["The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms. At the lowest level of recursion, a FC represents a cross-connection within an NE."]
+},
+"service-interface-point": {
+"id": "service-interface-point", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"role": {
+"id": "role", 
+"is-read-only": false, 
+"description": ["Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."]
+},
+"direction": {
+"id": "direction", 
+"is-read-only": false, 
+"description": ["The orientation of defined flow at the EndPoint."]
+},
+"service-layer": {
+"id": "service-layer", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"virtual-network-service-end-point-g": {
+"id": "virtual-network-service-end-point-g", 
+"is-read-only": false, 
+"description": ["The association of the FC to LTPs is made via EndPoints. The EndPoint (EP) object class models the access to the FC function. The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances. In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC. It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point. The EP replaces the Protection Unit of a traditional protection model. The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component"]
+},
+"virtual-nw-service": {
+"id": "virtual-nw-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"virtual-network-context-g": {
+"id": "virtual-network-context-g", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"create-virtual-network-service": {
+"id": "create-virtual-network-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"sep": {
+"id": "sep", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"vnw-constraint": {
+"id": "vnw-constraint", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"conn-schedule": {
+"id": "conn-schedule", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service": {
+"id": "service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"delete-virtual-network-service": {
+"id": "delete-virtual-network-service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-id-or-name": {
+"id": "service-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service": {
+"id": "service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-virtual-network-service-details": {
+"id": "get-virtual-network-service-details", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service-id-or-name": {
+"id": "service-id-or-name", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service": {
+"id": "service", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"get-virtual-network-service-list": {
+"id": "get-virtual-network-service-list", 
+"is-read-only": false, 
+"description": ["none"]
+},
+"service": {
+"id": "service", 
+"is-read-only": false, 
+"description": ["none"]
+}}
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/mwtnMapping.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/mwtnMapping.json
new file mode 100644
index 0000000..21c7efb
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/mwtnMapping.json
@@ -0,0 +1,54 @@
+{
+    "settings": {
+       "analysis": {
+          "analyzer": {
+             "standard": {
+                 "type": "whitespace"
+             }
+          }
+       }
+    },
+    "mappings": {
+        "required-networkelement": {
+            "date_detection": false
+        },
+        "maintenancemode": {
+            "date_detection": false
+        },
+        "site": {
+            "properties": {
+                "id": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "name": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "location": {
+                    "geohash": true,
+                    "geohash_precision": 10,
+                    "type": "geo_point",
+                    "lat_lon": true,
+                    "geohash_prefix": true
+                }
+            }
+        },
+        "site-link": {
+            "properties": {
+                "id": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                 "siteZ": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "siteA": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                }
+            }
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/mwtnV1Alias.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/mwtnV1Alias.json
new file mode 100644
index 0000000..e4aa745
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/mwtnV1Alias.json
@@ -0,0 +1,8 @@
+{
+    "actions":[
+            { "add": {
+                "alias": "mwtn",
+                "index": "mwtn_v1"
+            }}
+        ]
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/sdnevents/sdneventsMapping.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/sdnevents/sdneventsMapping.json
new file mode 100644
index 0000000..25cabed
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/sdnevents/sdneventsMapping.json
@@ -0,0 +1,157 @@
+{
+	"mappings": {
+		"faultlog": {
+			"properties": {
+				"fault": {
+					"properties": {
+						"nodeName": {
+							"index": "not_analyzed",
+							"type": "string"
+						},
+						"severity": {
+							"index": "not_analyzed",
+							"type": "string"
+						},
+						"timeStamp": {
+							"index": "not_analyzed",
+							"type": "string"
+						},
+						"problem": {
+							"index": "not_analyzed",
+							"type": "string"
+						},
+						"counter": {
+							"index": "not_analyzed",
+							"type": "string"
+						},
+						"objectId": {
+							"index": "not_analyzed",
+							"type": "string"
+						}
+					}
+				}
+			}
+		},
+		"faultcurrent": {
+			"properties": {
+				"faultCurrent": {
+					"properties": {
+						"nodeName": {
+							"index": "not_analyzed",
+							"type": "string"
+						},
+						"severity": {
+							"index": "not_analyzed",
+							"type": "string"
+						},
+						"timeStamp": {
+							"index": "not_analyzed",
+							"type": "string"
+						},
+						"problem": {
+							"index": "not_analyzed",
+							"type": "string"
+						},
+						"counter": {
+							"index": "not_analyzed",
+							"type": "string"
+						},
+						"objectId": {
+							"index": "not_analyzed",
+							"type": "string"
+						}
+					}
+				}
+			}
+		},
+		"eventlog": {
+			"properties": {
+				"event": {
+					"properties": {
+						"nodeName": {
+							"index": "not_analyzed",
+							"type": "string"
+						},
+						"timeStamp": {
+							"index": "not_analyzed",
+							"type": "string"
+						},
+						"newValue": {
+							"index": "not_analyzed",
+							"type": "string"
+						},
+						"attributeName": {
+							"index": "not_analyzed",
+							"type": "string"
+						},
+						"counter": {
+							"index": "not_analyzed",
+							"type": "string"
+						},
+						"objectId": {
+							"index": "not_analyzed",
+							"type": "string"
+						}
+					}
+				}
+			}
+		},
+
+		"inventorytoplevel": {
+			"properties": {
+				"uuidList": {
+					"index": "not_analyzed",
+					"type": "string"
+				},
+				"mountpoint": {
+					"index": "not_analyzed",
+					"type": "string"
+				}
+			}
+		},
+		"inventoryequipment": {
+			"properties": {
+				"date": {
+					"index": "not_analyzed",
+					"type": "string"
+				},
+				"modelIdentifier": {
+					"index": "not_analyzed",
+					"type": "string"
+				},
+				"partTypeId": {
+					"index": "not_analyzed",
+					"type": "string"
+				},
+				"serial": {
+					"index": "not_analyzed",
+					"type": "string"
+				},
+				"typeName": {
+					"index": "not_analyzed",
+					"type": "string"
+				},
+				"description": {
+					"index": "not_analyzed",
+					"type": "string"
+				},
+				"uuid": {
+					"index": "not_analyzed",
+					"type": "string"
+				},
+				"version": {
+					"index": "not_analyzed",
+					"type": "string"
+				},
+				"containedHolder": {
+					"index": "not_analyzed",
+					"type": "string"
+				},
+				"mountpoint": {
+					"index": "not_analyzed",
+					"type": "string"
+				}
+			}
+		}
+	}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/sdnperformance/sdnperformanceMapping.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/sdnperformance/sdnperformanceMapping.json
new file mode 100644
index 0000000..92d5ad2
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/sdnperformance/sdnperformanceMapping.json
@@ -0,0 +1,92 @@
+{
+    "mappings":
+    {
+        "historicalperformance24h":
+        {
+            "properties":
+            {
+                "node-name":
+                {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "time-stamp":
+                {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "suspect-interval-flag":
+                {
+                    "type": "boolean"
+                },
+                "scanner-id":
+                {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "uuid-interface":
+                {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                 "layer-protocol-name": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "granularity-period":
+                {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "radio-signal-id": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                }
+            }
+        },
+
+        "historicalperformance15min":
+        {
+            "properties":
+            {
+                "node-name":
+                {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "time-stamp":
+                {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "suspect-interval-flag":
+                {
+                    "type": "boolean"
+                },
+                "scanner-id":
+                {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "uuid-interface":
+                {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                 "layer-protocol-name": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "granularity-period":
+                {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "radio-signal-id": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                }
+            }
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/delete-by-query/plugin-descriptor.properties b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/delete-by-query/plugin-descriptor.properties
new file mode 100644
index 0000000..70b21dc
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/delete-by-query/plugin-descriptor.properties
@@ -0,0 +1,80 @@
+# Elasticsearch plugin descriptor file
+# This file must exist as 'plugin-descriptor.properties' at
+# the root directory of all plugins.
+#
+# A plugin can be 'site', 'jvm', or both.
+#
+### example site plugin for "foo":
+#
+# foo.zip <-- zip file for the plugin, with this structure:
+#   _site/ <-- the contents that will be served
+#   plugin-descriptor.properties <-- example contents below:
+#
+# site=true
+# description=My cool plugin
+# version=1.0
+#
+### example jvm plugin for "foo"
+#
+# foo.zip <-- zip file for the plugin, with this structure:
+#   <arbitrary name1>.jar <-- classes, resources, dependencies
+#   <arbitrary nameN>.jar <-- any number of jars
+#   plugin-descriptor.properties <-- example contents below:
+#
+# jvm=true
+# classname=foo.bar.BazPlugin
+# description=My cool plugin
+# version=2.0.0-rc1
+# elasticsearch.version=2.0
+# java.version=1.7
+#
+### mandatory elements for all plugins:
+#
+# 'description': simple summary of the plugin
+description=The Delete By Query plugin allows to delete documents in Elasticsearch with a single query.
+#
+# 'version': plugin's version
+version=2.2.0
+#
+# 'name': the plugin name
+name=delete-by-query
+
+### mandatory elements for site plugins:
+#
+# 'site': set to true to indicate contents of the _site/
+#  directory in the root of the plugin should be served.
+site=false
+#
+### mandatory elements for jvm plugins :
+#
+# 'jvm': true if the 'classname' class should be loaded
+#  from jar files in the root directory of the plugin.
+#  Note that only jar files in the root directory are
+#  added to the classpath for the plugin! If you need
+#  other resources, package them into a resources jar.
+jvm=true
+#
+# 'classname': the name of the class to load, fully-qualified.
+classname=org.elasticsearch.plugin.deletebyquery.DeleteByQueryPlugin
+#
+# 'java.version' version of java the code is built against
+# use the system property java.specification.version
+# version string must be a sequence of nonnegative decimal integers
+# separated by "."'s and may have leading zeros
+java.version=1.7
+#
+# 'elasticsearch.version' version of elasticsearch compiled against
+# You will have to release a new version of the plugin for each new
+# elasticsearch release. This version is checked when the plugin
+# is loaded so Elasticsearch will refuse to start in the presence of
+# plugins with the incorrect elasticsearch.version.
+elasticsearch.version=2.2.0
+#
+### deprecated elements for jvm plugins :
+#
+# 'isolated': true if the plugin should have its own classloader.
+# passing false is deprecated, and only intended to support plugins 
+# that have hard dependencies against each other. If this is
+# not specified, then the plugin is isolated by default.
+isolated=true
+#
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/.jshintrc b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/.jshintrc
new file mode 100644
index 0000000..757f969
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/.jshintrc
@@ -0,0 +1,40 @@
+{
+	"maxerr": 1000,
+
+	"predef": [
+		"exports",
+		"describe",
+		"expect",
+		"it",
+		"beforeEach",
+		"afterEach",
+		"jasmine",
+		"test",
+		"spyOn"
+	],
+
+	"jquery" : true,
+	"browser" : true,
+
+	"curly": true,
+	"debug": false,
+	"devel": true,
+	"eqeqeq": true,
+	"eqnull": true,
+	"expr": true,
+	"forin": false,
+	"immed": false,
+	"latedef": true,
+	"newcap": true,
+	"noarg": true,
+	"noempty": false,
+	"nonew": false,
+	"nomen": false,
+	"plusplus": false,
+	"regexp": false,
+	"undef": true,
+	"sub": true,
+	"white": false,
+	"scripturl": true,
+	"esnext": true
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/Gruntfile.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/Gruntfile.js
new file mode 100644
index 0000000..d9607ac
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/Gruntfile.js
@@ -0,0 +1,115 @@
+module.exports = function(grunt) {
+
+	var fileSets = require("./grunt_fileSets.js");
+
+	// Project configuration.
+	grunt.initConfig({
+		clean: {
+			_site: {
+				src: ['_site']
+			}
+		},
+		concat: {
+			vendorjs: {
+				src: fileSets.vendorJs,
+				dest: '_site/vendor.js'
+			},
+			vendorcss: {
+				src: fileSets.vendorCss,
+				dest: '_site/vendor.css'
+			},
+			appjs: {
+				src: fileSets.srcJs,
+				dest: '_site/app.js'
+			},
+			appcss: {
+				src: fileSets.srcCss,
+				dest: '_site/app.css'
+			}
+		},
+
+		copy: {
+			site_index: {
+				src: 'index.html',
+				dest: '_site/index.html',
+				options: {
+					process: function( src ) {
+						return src.replace(/_site\//g, "");
+					}
+				}
+			},
+			base: {
+				expand: true,
+				cwd: 'src/app/base/',
+				src: [ '*.gif', '*.png', '*.css' ],
+				dest: '_site/base/'
+			},
+			iconFonts: {
+				expand: true,
+				cwd: 'src/vendor/font-awesome/fonts/',
+				src: '**',
+				dest: '_site/fonts'
+			},
+			i18n: {
+				src: 'src/vendor/i18n/i18n.js',
+				dest: '_site/i18n.js'
+			},
+			lang: {
+				expand: true,
+				cwd: 'src/app/lang/',
+				src: '**',
+				dest: '_site/lang/'
+			}
+		},
+
+		jasmine: {
+			task: {
+				src: [ fileSets.vendorJs, 'src/vendor/i18n/i18n.js', 'src/app/lang/en_strings.js', fileSets.srcJs ],
+				options: {
+					specs: 'src/app/**/*Spec.js',
+					helpers: 'test/spec/*Helper.js',
+					display: "short",
+					summary: true
+				}
+			}
+		},
+
+		watch: {
+			"scripts": {
+				files: ['src/**/*', 'test/spec/*' ],
+				tasks: ['default'],
+				options: {
+					spawn: false
+				}
+			},
+			"grunt": {
+				files: [ 'Gruntfile.js' ]
+			}
+		},
+
+		connect: {
+			server: {
+				options: {
+					port: 9100,
+					base: '.',
+					keepalive: true
+				}
+			}
+		}
+
+	});
+
+	grunt.loadNpmTasks('grunt-contrib-clean');
+	grunt.loadNpmTasks('grunt-contrib-concat');
+	grunt.loadNpmTasks('grunt-contrib-watch');
+	grunt.loadNpmTasks('grunt-contrib-connect');
+	grunt.loadNpmTasks('grunt-contrib-copy');
+	grunt.loadNpmTasks('grunt-contrib-jasmine');
+
+	// Default task(s).
+	grunt.registerTask('default', ['clean', 'concat', 'copy', 'jasmine']);
+	grunt.registerTask('server', ['connect:server']);
+	grunt.registerTask('dev', [ 'default', 'watch' ]);
+
+
+};
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/LICENCE b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/LICENCE
new file mode 100644
index 0000000..a93b4df
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/LICENCE
@@ -0,0 +1,13 @@
+Copyright 2010-2013 Ben Birch
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/README.textile b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/README.textile
new file mode 100644
index 0000000..6db8d5b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/README.textile
@@ -0,0 +1,98 @@
+h1. elasticsearch-head
+
+h2. A web front end for an Elasticsearch cluster
+
+h3. "http://mobz.github.io/elasticsearch-head":http://mobz.github.io/elasticsearch-head
+
+h2. Installing and Running
+
+There are two main ways of running and installing elasticsearch-head
+
+h4. Running as a plugin of Elasticsearch
+
+* Install elasticsearch-head:
+  - for Elasticsearch 5.x:
+    site plugins are not supported. Run elasticsearch-head "as a standalone server":#running-with-built-in-server
+  - for Elasticsearch 2.x - 4.x:
+    @sudo elasticsearch/bin/plugin install mobz/elasticsearch-head@
+  - for Elasticsearch 1.x:
+    @sudo elasticsearch/bin/plugin -install mobz/elasticsearch-head/1.x@
+  - for Elasticsearch 0.9:
+    @sudo elasticsearch/bin/plugin -install mobz/elasticsearch-head/0.9@
+
+* @open http://localhost:9200/_plugin/head/@
+
+This will automatically download the latest version of elasticsearch-head from github and run it as a plugin within the elasticsearch cluster. In this mode;
+* elasticsearch-head automatically connects to the node that is running it
+
+Note on different Elasticsearch installation path:
+* If you've installed the .deb package, then the plugin executable will be available at @/usr/share/elasticsearch/bin/plugin@.
+* If you've installed Elasticsearch via Homebrew, plugin executable will be available at @/usr/local/Cellar/elasticsearch/(elasticsearch version)/libexec/bin/plugin@.
+
+h4. Running with built in server
+
+* enable "cors":http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-http.html by adding @http.cors.enabled: true@ in elasticsearch configuration. Don't forget to also set @http.cors.allow-origin@ because no origin allowed by default. @http.cors.allow-origin: "*"@ is valid value, however it's considered as a security risk as your cluster is open to cross origin from *anywhere*. Check Elasticsearch documentation on this parameter:  https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html#modules-http
+* @git clone git://github.com/mobz/elasticsearch-head.git@
+* @cd elasticsearch-head@
+* @npm install@
+* @grunt server@
+* @open@ "http://localhost:9100/":http://localhost:9100/
+
+This will start a local webserver running on port 9100 serving elasticsearch-head
+* Best option if you are likely to connect to several different clusters
+
+h4. Alternatives
+
+h5. Running from the filesystem
+
+elastisearch-head is a standalone webapp written in good-ol' html5. This means, you can put it up on any webserver, run it directly from the filesystem, use it on an iPad, or put it on a floppy disk and carry it with you.
+
+h4. URL Parameters
+
+Parameters may be appended to the url to set an initial state eg. @head/index.html?base_uri=http://node-01.example.com:9200@
+
+* @base_uri@ force elasticsearch-head to connect to a particular node.
+* @dashboard@ experimental feature to open elasticsearch-head in a mode suitable for dashboard / radiator. Accepts one parameter @dashboard=cluster@
+* @auth_user@ adds basic auth credentials to http requests ( requires "elasticsearch-http-basic":https://github.com/karussell/elasticsearch-http-basic plugin or a reverse proxy )
+* @auth_password@ basic auth password as above (note: without "additional security layers":http://security.stackexchange.com/questions/988/is-basic-auth-secure-if-done-over-https, passwords are sent over the network *in the clear* )
+
+h4. Contributing
+
+To contribute to elasticsearch-head you will need the following developer tools
+
+# git and a "github":https://github.com/ account
+# "node ( including npm )":http://nodejs.org/download
+# "grunt-cli":http://gruntjs.com/getting-started
+# (to run jasmine tests) "phantomjs":http://phantomjs.org
+
+Then
+
+# create a fork of elasticsearch-head on github
+# clone your fork to your machine
+# @cd elasticsearch-head@
+# @npm install@ # downloads node dev dependencies
+# @grunt dev@ # builds the distribution files, then watches the src directory for changes
+
+Changes to both _site and src directories *must* be committed, to allow people to 
+run elasticsearch-head without running dev tools and follow existing dev patterns, 
+such as indenting with tabs.
+
+h5. Contributing an Internationalisation
+
+
+* Chinese by "darkcount":https://github.com/hangxin1940
+* English (primary) by "Ben Birch":https://twitter.com/mobz
+* French by "David Pilato":https://twitter.com/dadoonet
+* Portuguese by "caiodangelo":https://github.com/caiodangelo
+* Turkish by "Cemre Mengu":https://github.com/cemremengu
+
+To contribute an internationalisation
+
+# Follow "Contributing" instructions above
+# Find your 2-character "ISO 639-1 language code":http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
+# edit _site/index.html to add your 2 letter language code to the data-langs attribute of this line @<script src="_site/i18n.js" data-baseDir="_site/lang" data-langs="en,fr,your_lang_here"></script>@
+# make a copy of @src/app/langs/en_strings.js@ prefixed with your language code
+# convert english strings and fragments to your language. "Formatting Rules":http://docs.oracle.com/javase/tutorial/i18n/format/messageintro.html
+# Submit a pull request
+
+!http://mobz.github.com/elasticsearch-head/screenshots/clusterOverview.png(ClusterOverview Screenshot)!
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/app.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/app.css
new file mode 100644
index 0000000..2fa2152
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/app.css
@@ -0,0 +1,704 @@
+TABLE.table {
+	border-collapse: collapse;
+}
+
+
+TABLE.table TH {
+	font-weight: normal;
+	text-align: left;
+	vertical-align: middle;
+}
+
+TABLE.table TBODY.striped TR:nth-child(odd) {
+	background: #eee;
+}
+
+TABLE.table H3 {
+	margin: 0;
+	font-weight: bold;
+	font-size: 140%;
+}
+
+.require { color: #a00; }
+
+.uiButton {
+	padding: 0;
+	border: 0;
+	margin: 3px;
+	width: auto;
+	overflow: visible;
+	cursor: pointer;
+	background: transparent;
+}
+
+.uiButton-content {
+	height: 20px;
+	border: 1px solid #668dc6;
+	border-radius: 2px;
+	background: #96c6eb;
+	background: -moz-linear-gradient(top, #96c6eb, #5296c7);
+	background: -webkit-linear-gradient(top, #96c6eb, #5296c7);
+	color: white;
+	font-weight: bold;
+}
+
+.moz .uiButton-content { margin: 0 -2px; }
+
+.uiButton-label {
+		padding: 2px 6px;
+		white-space: nowrap;
+}
+.uiButton:hover .uiButton-content {
+	background: #2777ba;
+	background: -moz-linear-gradient(top, #6aaadf, #2777ba);
+	background: -webkit-linear-gradient(top, #6aaadf, #2777ba);
+}
+.uiButton.active .uiButton-content,
+.uiButton:active .uiButton-content {
+	background: #2575b7;
+	background: -moz-linear-gradient(top, #2576b8, #2575b7);
+	background: -webkit-linear-gradient(top, #2576b8, #2575b7);
+}
+.uiButton.disabled .uiButton-content,
+.uiButton.disabled:active .uiButton-content {
+		border-color: #c6c6c6;
+		color: #999999;
+		background: #ddd;
+		background: -moz-linear-gradient(top, #ddd, #ddd);
+		background: -webkit-linear-gradient(top, #ddd, #ddd);
+}
+
+.uiButton.disabled {
+		cursor: default;
+}
+
+.uiMenuButton {
+	display: inline-block;
+}
+
+.uiMenuButton .uiButton-label {
+	background-image: url('data:image/gif;base64,R0lGODlhDwAPAIABAP///////yH5BAEAAAEALAAAAAAPAA8AAAITjI+py+0P4wG0gmavq1HLD4ZiAQA7');
+	background-position: right 50%;
+	background-repeat: no-repeat;
+	padding-right: 17px;
+	text-align: left;
+}
+
+.uiSplitButton {
+	white-space: nowrap;
+}
+
+.uiSplitButton .uiButton:first-child {
+	margin-right: 0;
+	display: inline-block;
+}
+
+.uiSplitButton .uiButton:first-child .uiButton-content {
+	border-right-width: 1;
+	border-right-color: #5296c7;
+	border-top-right-radius: 0;
+	border-bottom-right-radius: 0;
+}
+
+.uiSplitButton .uiMenuButton {
+	margin-left: 0;
+}
+
+.uiSplitButton .uiButton:last-child .uiButton-content {
+	border-radius: 2px;
+	border-left-width: 1;
+	border-left-color: #96c6eb;
+	border-top-left-radius: 0;
+	border-bottom-left-radius: 0;
+	height: 20px;
+}
+
+.uiSplitButton .uiButton:last-child .uiButton-label {
+	padding: 2px 17px 2px 6px;
+	margin-left: -8px;
+}
+
+.uiToolbar {
+	height: 28px;
+	background: #fdfefe;
+	background: -moz-linear-gradient(top, #fdfefe, #eaedef);
+	background: -webkit-linear-gradient(top, #fdfefe, #eaedef);
+	border-bottom: 1px solid #d2d5d7;
+	padding: 3px 10px;
+}
+
+.uiToolbar H2 {
+	display: inline-block;
+	font-size: 120%;
+	margin: 0;
+	padding: 5px 20px 5px 0;
+}
+
+.uiToolbar .uiTextField {
+	display: inline-block;
+}
+
+.uiToolbar .uiTextField INPUT {
+	padding-top: 2px;
+	padding-bottom: 5px;
+}
+#uiModal {
+	background: black;
+}
+
+.uiPanel {
+	box-shadow: -1px 2.5px 4px -3px black, -1px -2.5px 4px -3px black, 3px 2.5px 4px -3px black, 3px -2.5px 4px -3px black;
+	position: absolute;
+	background: #eee;
+	border: 1px solid #666;
+}
+
+.uiPanel-titleBar {
+	text-align: center;
+	font-weight: bold;
+	padding: 2px 0;
+	background: rgba(223, 223, 223, 0.75);
+	background: -moz-linear-gradient(top, rgba(223, 223, 223, 0.75), rgba(193, 193, 193, 0.75), rgba(223, 223, 223, 0.75));
+	background: -webkit-linear-gradient(top, rgba(223, 223, 223, 0.75), rgba(193, 193, 193, 0.75), rgba(223, 223, 223, 0.75));
+	border-bottom: 1px solid #bbb;
+}
+
+.uiPanel-close {
+	cursor: pointer;
+	border: 1px solid #aaa;
+	background: #fff;
+	color: #fff;
+	float: left;
+	height: 10px;
+	left: 3px;
+	line-height: 9px;
+	padding: 1px 0;
+	position: relative;
+	text-shadow: 0 0 1px #000;
+	top: 0px;
+	width: 12px;
+}
+.uiPanel-close:hover {
+	background: #eee;
+}
+
+.uiPanel-body {
+	overflow: auto;
+}
+
+
+.uiInfoPanel {
+	background: rgba(0, 0, 0, 0.75);
+	color: white;
+	border-radius: 8px;
+	padding: 1px;
+}
+.uiInfoPanel .uiPanel-titleBar {
+	background: rgba(74, 74, 74, 0.75);
+	background: -moz-linear-gradient(top, rgba(84, 84, 84, 0.75), rgba(54, 54, 54, 0.75), rgba(64, 64, 64, 0.75));
+	background: -webkit-linear-gradient(top, rgba(84, 84, 84, 0.75), rgba(54, 54, 54, 0.75), rgba(64, 64, 64, 0.75));
+	border-radius: 8px 8px 0 0;
+	padding: 1px 0 2px 0;
+	border-bottom: 0;
+}
+.uiInfoPanel .uiPanel-close {
+	border-radius: 6px;
+	height: 13px;
+	width: 13px;
+	background: #ccc;
+	left: 3px;
+	top: 1px;
+	color: #333;
+	text-shadow: #222 0 0 1px;
+	line-height: 11px;
+	border: 0;
+	padding: 0;
+}
+.uiInfoPanel .uiPanel-close:hover {
+	background: #eee;
+}
+
+.uiInfoPanel .uiPanel-body {
+	background: transparent;
+	padding: 20px;
+	border-radius: 0 0 8px 8px;
+	border: 1px solid #222;
+}
+
+.uiMenuPanel {
+	border: 1px solid #668dc6;
+	position: absolute;
+	background: #96c6eb;
+	color: white;
+}
+
+.uiMenuPanel LI {
+	list-style: none;
+	border-bottom: 1px solid #668dc6;
+}
+
+.uiMenuPanel LI:hover {
+	background: #2575b7;
+}
+
+.uiMenuPanel LI:last-child {
+	border-bottom: 0;
+} 
+
+.uiMenuPanel-label {
+	white-space: nowrap;
+	padding: 2px 10px 2px 10px;
+	cursor: pointer;
+}
+
+.disabled .uiMenuPanel-label {
+	cursor: auto;
+	color: #888;
+}
+
+.uiSelectMenuPanel .uiMenuPanel-label {
+	margin-left: 1em;
+	padding-left: 4px;
+}
+
+.uiSelectMenuPanel .uiMenuPanel-item.selected .uiMenuPanel-label:before {
+	content: "\2713";
+	width: 12px;
+	margin-left: -12px;
+	display: inline-block;
+}
+
+.uiTable TABLE {
+	border-collapse: collapse;
+}
+
+.uiTable-body {
+	overflow-y: scroll;
+	overflow-x: auto;
+}
+
+.uiTable-headers {
+	overflow-x: hidden;
+}
+
+.uiTable-body TD {
+	white-space: nowrap;
+}
+
+.uiTable-body .uiTable-header-row TH,
+.uiTable-body .uiTable-header-row TH DIV {
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.uiTable-body .uiTable-header-cell > DIV {
+	height: 0;
+	overflow: hidden;
+}
+
+.uiTable-headercell-menu {
+	float: right;
+}
+
+.uiTable-tools {
+	padding: 3px 4px;
+	height: 14px;
+}
+
+.uiTable-header-row {
+	background: #ddd;
+	background: -moz-linear-gradient(top, #eee, #ccc);
+	background: -webkit-linear-gradient(top, #eee, #ccc);
+}
+
+.uiTable-headercell-text {
+	margin-right: 20px;
+}
+
+.uiTable-headercell-menu {
+	display: none;
+}
+
+.uiTable-header-row TH {
+	border-right: 1px solid #bbb;
+	padding: 0;
+	text-align: left;
+}
+
+.uiTable-header-row TH > DIV {
+	padding: 3px 4px;
+	border-right: 1px solid #eee;
+}
+
+.uiTable-headerEndCap > DIV {
+	width: 19px;
+}
+
+.uiTable-header-row .uiTable-sort {
+	background: #ccc;
+	background: -moz-linear-gradient(top, #bebebe, #ccc);
+	background: -webkit-linear-gradient(top, #bebebe, #ccc);
+}
+.uiTable-header-row TH.uiTable-sort > DIV {
+	border-right: 1px solid #ccc;
+}
+
+.uiTable-sort .uiTable-headercell-menu {
+	display: block;
+}
+
+.uiTable TABLE TD {
+	border-right: 1px solid transparent;
+	padding: 3px 4px;
+}
+
+.uiTable-body TABLE TR:nth-child(even) {
+	background: #f3f3f3;
+}
+
+.uiTable-body TABLE TR.selected {
+	color: white;
+	background: #6060f1;
+}
+
+DIV.uiJsonPretty-object { font-size: 1.26em; font-family: monospace; }
+UL.uiJsonPretty-object,
+UL.uiJsonPretty-array { margin: 0; padding: 0 0 0 2em; list-style: none; }
+UL.uiJsonPretty-object LI,
+UL.uiJsonPretty-array LI { padding: 0; margin: 0; }
+.expando > SPAN.uiJsonPretty-name:before { content: "\25bc\a0"; color: #555; position: relative; top: 2px; }
+.expando.uiJsonPretty-minimised > SPAN.uiJsonPretty-name:before { content: "\25ba\a0"; top: 0; }
+.uiJsonPretty-minimised > UL SPAN.uiJsonPretty-name:before,
+.expando .uiJsonPretty-minimised > UL SPAN.uiJsonPretty-name:before { content: ""; }
+SPAN.uiJsonPretty-string,
+SPAN.uiJsonPretty-string A { color: green; }
+SPAN.uiJsonPretty-string A { text-decoration: underline;}
+SPAN.uiJsonPretty-number { color: blue; }
+SPAN.uiJsonPretty-null { color: red; }
+SPAN.uiJsonPretty-boolean { color: purple; }
+.expando > .uiJsonPretty-name { cursor: pointer; }
+.expando > .uiJsonPretty-name:hover { text-decoration: underline; }
+.uiJsonPretty-minimised { white-space: nowrap; overflow: hidden; }
+.uiJsonPretty-minimised > UL { opacity: 0.6; }
+.uiJsonPretty-minimised .uiJsonPretty-minimised > UL { opacity: 1; }
+.uiJsonPretty-minimised UL, .uiJsonPretty-minimised LI { display: inline; padding: 0; }
+
+
+.uiJsonPanel SPAN.uiJsonPretty-string { color: #6F6; }
+.uiJsonPanel SPAN.uiJsonPretty-number { color: #66F; }
+.uiJsonPanel SPAN.uiJsonPretty-null { color: #F66; }
+.uiJsonPanel SPAN.uiJsonPretty-boolean { color: #F6F; }
+
+.uiPanelForm-field {
+	display: block;
+	padding: 2px 0;
+	clear: both;
+}
+
+.uiPanelForm-label {
+	float: left;
+	width: 200px;
+	padding: 3px 7px;
+	text-align: right;
+}
+
+.uiSidebarSection-head {
+	background-color: #b9cfff;
+	background-image: url('data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAcCAMAAABifa5OAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAMAUExURQUCFf///wICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4ODg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiMjIyQkJCUlJSYmJicnJygoKCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0NDU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVVVVZWVldXV1hYWFlZWVpaWltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2RkZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1tbW5ubm9vb3BwcHFxcXJycnNzc3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CAgIGBgYKCgoODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+vr7CwsLGxsbKysrOzs7S0tLW1tba2tre3t7i4uLm5ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///2Oyy/cAAAACdFJOU/8A5bcwSgAAADxJREFUeNq8zzkOACAMA8Hd/3+agiuRcIsrRopIjArOoLK1QAMNNBCRPkhLyzkn35Bjfd7JR1Nr09NoDACnvgDl1zlzoQAAAABJRU5ErkJggg==');
+	background-repeat: no-repeat;
+	background-position: 2px 5px;
+	margin-bottom: 1px;
+	padding: 3px 3px 3px 17px;
+	cursor: pointer;
+}
+
+.shown > .uiSidebarSection-head {
+	background-position: 2px -13px;
+}
+
+.uiSidebarSection-body {
+	margin-bottom: 3px;
+	display: none;
+}
+
+.uiSidebarSection-help {
+	text-shadow: #228 1px 1px 2px;
+	color: blue;
+	cursor: pointer;
+}
+
+.uiSidebarSection-help:hover {
+	text-decoration: underline;
+}
+
+.uiQueryFilter {
+	width: 350px;
+	padding: 5px;
+	background: #d8e7ff;
+	background: -moz-linear-gradient(left, #d8e7ff, #e8f1ff);
+	background: -webkit-linear-gradient(left, #d8e7ff, #e8f1ff);
+}
+
+.uiQueryFilter DIV.uiQueryFilter-section {
+	margin-bottom: 5px;
+}
+
+.uiQueryFilter HEADER {
+	display: block;
+	font-variant: small-caps;
+	font-weight: bold;
+	margin: 5px 0;
+}
+
+.uiQueryFilter-aliases SELECT {
+	width: 100%;
+}
+
+.uiQueryFilter-booble {
+	cursor: pointer;
+	background: #e8f1ff;
+	border: 1px solid #e8f1ff;
+	border-radius: 5px;
+	padding: 1px 4px;
+	margin-bottom: 1px;
+	overflow: hidden;
+	white-space: nowrap;
+}
+
+.uiQueryFilter-booble.selected {
+	background: #dae3f0;
+	border-top: 1px solid #c8d4e6;
+	border-left: 1px solid #c8d4e6;
+	border-bottom: 1px solid #ffffff;
+	border-right: 1px solid #ffffff;
+}
+
+.uiQueryFilter-filterName {
+	background-color: #cbdfff;
+	margin-bottom: 4px;
+	padding: 3px;
+	cursor: pointer;
+}
+
+.uiQueryFilter-filters INPUT  {
+	width: 300px;
+}
+
+.uiQueryFilter-subMultiFields {
+	padding-left: 10px;
+}
+
+.uiQueryFilter-rangeHintFrom,
+.uiQueryFilter-rangeHintTo {
+	margin: 0;
+	opacity: 0.75;
+}
+.uiBrowser-filter {
+	float: left;
+}
+
+.uiBrowser-table {
+	margin-left: 365px;
+}
+
+.uiAnyRequest-request {
+	float: left;
+	width: 350px;
+	padding: 5px;
+	background: #d8e7ff;
+	background: -moz-linear-gradient(left, #d8e7ff, #e8f1ff);
+	background: -webkit-linear-gradient(left, #d8e7ff, #e8f1ff);
+}
+
+.uiAnyRequest-request INPUT[type=text],
+.uiAnyRequest-request TEXTAREA {
+	width: 340px;
+}
+
+.anyRequest INPUT[name=path] {
+	width: 259px;
+}
+
+.uiAnyRequest-out {
+	margin-left: 365px;
+}
+
+.uiAnyRequest-out P {
+	margin-top: 0;
+}
+
+.uiAnyRequest-jsonErr {
+	color: red;
+}
+
+.uiAnyRequest-history {
+	margin: 0;
+	padding: 0;
+	list-style: none;
+	max-height: 100px;
+	overflow-x: hidden;
+	overflow-y: auto;
+}
+
+.uiNodesView TH,
+.uiNodesView TD {
+	vertical-align: top;
+	padding: 2px 20px;
+}
+
+.uiNodesView TH.close,
+.uiNodesView TD.close {
+	color: #888;
+	background: #f2f2f2;
+}
+
+.uiNodesView .uiMenuButton .uiButton-content {
+	padding-right: 3px;
+	border-radius: 8px;
+	height: 14px;
+}
+
+.uiNodesView .uiMenuButton.active .uiButton-content,
+.uiNodesView .uiMenuButton:active .uiButton-content {
+	border-bottom-right-radius: 0px;
+	border-bottom-left-radius: 0px;
+}
+
+.uiNodesView .uiMenuButton .uiButton-label {
+	padding: 0px 17px 0px 7px;
+}
+
+.uiNodesView-hasAlias {
+	text-align: center;
+}
+.uiNodesView-hasAlias.max {
+	border-top-right-radius: 8px;
+	border-bottom-right-radius: 8px;
+}
+.uiNodesView-hasAlias.min {
+	border-top-left-radius: 8px;
+	border-bottom-left-radius: 8px;
+}
+.uiNodesView-hasAlias-remove {
+	float: right;
+	font-weight: bold;
+	cursor: pointer;
+}
+
+.uiNodesView TD.uiNodesView-icon {
+	padding: 20px 0px 15px 20px;
+}
+
+.uiNodesView-node:nth-child(odd) {
+	background: #eee;
+}
+
+.uiNodesView-routing {
+	position: relative;
+	min-width: 90px;
+}
+
+.uiNodesView-nullReplica,
+.uiNodesView-replica {
+	box-sizing: border-box;
+	cursor: pointer;
+	float: left;
+	height: 40px;
+	width: 35px;
+	margin: 4px;
+	border: 2px solid #444;
+	padding: 2px;
+	font-size: 32px;
+	line-height: 32px;
+	text-align: center;
+	letter-spacing: -5px;
+	text-indent: -7px;
+}
+
+.uiNodesView-replica.primary {
+	border-width: 4px;
+	line-height: 29px;
+}
+
+.uiNodesView-nullReplica {
+	border-color: transparent;
+}
+
+.uiNodesView-replica.state-UNASSIGNED { background: #eeeeee; color: #999; border-color: #666; float: none; display: inline-block; }
+.uiNodesView-replica.state-INITIALIZING { background: #dddc88; }
+.uiNodesView-replica.state-STARTED { background: #99dd88; }
+.uiNodesView-replica.state-RELOCATING { background: #dc88dd; }
+
+
+.uiClusterConnect-uri {
+	width: 280px;
+}
+
+.uiStructuredQuery {
+	padding: 10px;
+}
+
+.uiStructuredQuery-out {
+	min-height: 30px;
+}
+
+.uiFilterBrowser-row * {
+	margin-right: 0.4em;
+}
+
+.uiFilterBrowser-row BUTTON {
+	height: 22px;
+	position: relative;
+	top: 1px;
+}
+
+.uiHeader {
+	padding: 3px 10px;
+}
+
+.uiHeader-name, .uiHeader-status {
+	font-size: 1.2em;
+	font-weight: bold;
+	padding: 0 10px;
+}
+
+
+.uiApp-header {
+	background: #eee;
+	position: fixed;
+	width: 100%;
+	z-index: 9;
+}
+
+.uiApp-header H1 {
+	margin: -2px 0 -4px 0;
+	float: left;
+	padding-right: 25px;
+}
+
+.uiApp-headerMenu {
+	border-bottom: 1px solid #bbb;
+	padding: 0px 3px;
+	height: 22px;
+}
+
+.uiApp-headerMenu .active {
+	background: white;
+	border-bottom-color: white;
+}
+
+.uiApp-headerMenuItem {
+	border: 1px solid #bbb;
+	padding: 4px 8px 1px ;
+	margin: 2px 1px 0;
+	height: 14px;
+	cursor: pointer;
+}
+
+.uiApp-body {
+	padding: 51px 0px 0px 0px;
+}
+
+.uiApp-headerNewMenuItem {
+	color: blue;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/app.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/app.js
new file mode 100644
index 0000000..1cdc1f5
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/app.js
@@ -0,0 +1,4389 @@
+(function() {
+
+	var window = this,
+		$ = jQuery;
+
+	function ns( namespace ) {
+		return (namespace || "").split(".").reduce( function( space, name ) {
+			return space[ name ] || ( space[ name ] = { ns: ns } );
+		}, this );
+	}
+
+	var app = ns("app");
+
+	var acx = ns("acx");
+
+	/**
+	 * object iterator, returns an array with one element for each property of the object
+	 * @function
+	 */
+	acx.eachMap = function(obj, fn, thisp) {
+		var ret = [];
+		for(var n in obj) {
+			ret.push(fn.call(thisp, n, obj[n], obj));
+		}
+		return ret;
+	};
+
+	/**
+	 * augments the first argument with the properties of the second and subsequent arguments
+	 * like {@link $.extend} except that existing properties are not overwritten
+	 */
+	acx.augment = function() {
+		var args = Array.prototype.slice.call(arguments),
+			src = (args.length === 1) ? this : args.shift(),
+			augf = function(n, v) {
+				if(! (n in src)) {
+					src[n] = v;
+				}
+			};
+		for(var i = 0; i < args.length; i++) {
+			$.each(args[i], augf);
+		}
+		return src;
+	};
+
+	/**
+	 * tests whether the argument is an array
+	 * @function
+	 */
+	acx.isArray = $.isArray;
+
+	/**
+	 * tests whether the argument is an object
+	 * @function
+	 */
+	acx.isObject = function (value) {
+		return Object.prototype.toString.call(value) == "[object Object]";
+	};
+
+	/**
+	 * tests whether the argument is a function
+	 * @function
+	 */
+	acx.isFunction = $.isFunction;
+
+	/**
+	 * tests whether the argument is a date
+	 * @function
+	 */
+	acx.isDate = function (value) {
+		return Object.prototype.toString.call(value) == "[object Date]";
+	};
+
+	/**
+	 * tests whether the argument is a regexp
+	 * @function
+	 */
+	acx.isRegExp = function (value) {
+		return Object.prototype.toString.call(value) == "[object RegExp]";
+	};
+
+	/**
+	 * tests whether the value is blank or empty
+	 * @function
+	 */
+	acx.isEmpty = function (value, allowBlank) {
+		return value === null || value === undefined || ((acx.isArray(value) && !value.length)) || (!allowBlank ? value === '' : false);
+	};
+
+	/**
+	 * data type for performing chainable geometry calculations<br>
+	 * can be initialised x,y | {x, y} | {left, top}
+	 */
+	acx.vector = function(x, y) {
+		return new acx.vector.prototype.Init(x, y);
+	};
+
+	acx.vector.prototype = {
+		Init : function(x, y) {
+			x = x || 0;
+			this.y = isFinite(x.y) ? x.y : (isFinite(x.top) ? x.top : (isFinite(y) ? y : 0));
+			this.x = isFinite(x.x) ? x.x : (isFinite(x.left) ? x.left : (isFinite(x) ? x : 0));
+		},
+		
+		add : function(i, j) {
+			var d = acx.vector(i, j);
+			return new this.Init(this.x + d.x, this.y + d.y);
+		},
+		
+		sub : function(i, j) {
+			var d = acx.vector(i, j);
+			return new this.Init(this.x - d.x, this.y - d.y);
+		},
+		
+		addX : function(i) {
+			return new this.Init(this.x + i, this.y);
+		},
+		
+		addY : function(j) {
+			return new this.Init(this.x, this.y + j);
+		},
+
+		mod : function(fn) { // runs a function against the x and y values
+			return new this.Init({x: fn.call(this, this.x, "x"), y: fn.call(this, this.y, "y")});
+		},
+		
+		/** returns true if this is within a rectangle formed by the points p and q */
+		within : function(p, q) {
+			return ( this.x >= ((p.x < q.x) ? p.x : q.x) && this.x <= ((p.x > q.x) ? p.x : q.x) &&
+					this.y >= ((p.y < q.y) ? p.y : q.y) && this.y <= ((p.y > q.y) ? p.y : q.y) );
+		},
+		
+		asOffset : function() {
+			return { top: this.y, left: this.x };
+		},
+		
+		asSize : function() {
+			return { height: this.y, width: this.x };
+		}
+	};
+
+	acx.vector.prototype.Init.prototype = acx.vector.prototype;
+
+	/**
+	 * short cut functions for working with vectors and jquery.
+	 * Each function returns the equivalent jquery value in a two dimentional vector
+	 */
+	$.fn.vSize = function() { return acx.vector(this.width(), this.height()); };
+	$.fn.vOuterSize = function(margin) { return acx.vector(this.outerWidth(margin), this.outerHeight(margin)); };
+	$.fn.vScroll = function() { return acx.vector(this.scrollLeft(), this.scrollTop()); };
+	$.fn.vOffset = function() { return acx.vector(this.offset()); };
+	$.fn.vPosition = function() { return acx.vector(this.position()); };
+	$.Event.prototype.vMouse = function() { return acx.vector(this.pageX, this.pageY); };
+
+	/**
+	 * object extensions (ecma5 compatible)
+	 */
+	acx.augment(Object, {
+		keys: function(obj) {
+			var ret = [];
+			for(var n in obj) if(Object.prototype.hasOwnProperty.call(obj, n)) ret.push(n);
+			return ret;
+		}
+	});
+
+	/**
+	 * Array prototype extensions
+	 */
+	acx.augment(Array.prototype, {
+		'contains' : function(needle) {
+			return this.indexOf(needle) !== -1;
+		},
+
+		// returns a new array consisting of all the members that are in both arrays
+		'intersection' : function(b) {
+			var ret = [];
+			for(var i = 0; i < this.length; i++) {
+				if(b.contains(this[i])) {
+					ret.push(this[i]);
+				}
+			}
+			return ret;
+		},
+		
+		'remove' : function(value) {
+			var i = this.indexOf(value);
+			if(i !== -1) {
+				this.splice(i, 1);
+			}
+		}
+	});
+
+	/**
+	 * String prototype extensions
+	 */
+	acx.augment(String.prototype, {
+		'contains' : function(needle) {
+			return this.indexOf(needle) !== -1;
+		},
+
+		'equalsIgnoreCase' : function(match) {
+			return this.toLowerCase() === match.toLowerCase();
+		},
+
+		'escapeHtml' : function() {
+			return this.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
+		},
+
+		'escapeJS' : function() {
+			var meta = {'"':'\\"', '\\':'\\\\', '/':'\\/', '\b':'\\b', '\f':'\\f', '\n':'\\n', '\r':'\\r', '\t':'\\t'},
+				xfrm = function(c) { return meta[c] || "\\u" + c.charCodeAt(0).toString(16).zeroPad(4); };
+			return this.replace(new RegExp('(["\\\\\x00-\x1f\x7f-\uffff])', 'g'), xfrm);
+		},
+
+		'escapeRegExp' : function() {
+			var ret = "", esc = "\\^$*+?.()=|{,}[]-";
+			for ( var i = 0; i < this.length; i++) {
+				ret += (esc.contains(this.charAt(i)) ? "\\" : "") + this.charAt(i);
+			}
+			return ret;
+		},
+		
+		'zeroPad' : function(len) {
+			return ("0000000000" + this).substring(this.length - len + 10);
+		}
+	});
+
+	$.fn.forEach = Array.prototype.forEach;
+
+	// joey / jquery integration
+	$.joey = function( obj ) {
+		return $( window.joey( obj ) );
+	};
+
+	window.joey.plugins.push( function( obj ) {
+		if( obj instanceof jQuery ) {
+			return obj[0];
+		}
+	});
+
+})();
+
+/**
+ * base class for creating inheritable classes
+ * based on resigs 'Simple Javascript Inheritance Class' (based on base2 and prototypejs)
+ * modified with static super and auto config
+ * @name Class
+ * @constructor
+ */
+(function( $, app ){
+
+	var ux = app.ns("ux");
+
+	var initializing = false, fnTest = /\b_super\b/;
+
+	ux.Class = function(){};
+
+	ux.Class.extend = function(prop) {
+		function Class() {
+			if(!initializing) {
+				var args = Array.prototype.slice.call(arguments);
+				this.config = $.extend( function(t) { // automatically construct a config object based on defaults and last item passed into the constructor
+					return $.extend(t._proto && t._proto() && arguments.callee(t._proto()) || {}, t.defaults);
+				} (this) , args.pop() );
+				this.init && this.init.apply(this, args); // automatically run the init function when class created
+			}
+		}
+
+		initializing = true;
+		var prototype = new this();
+		initializing = false;
+		
+		var _super = this.prototype;
+		prototype._proto = function() {
+			return _super;
+		};
+
+		for(var name in prop) {
+			prototype[name] = typeof prop[name] === "function" && typeof _super[name] === "function" && fnTest.test(prop[name]) ?
+				(function(name, fn){
+					return function() { this._super = _super[name]; return fn.apply(this, arguments); };
+				})(name, prop[name]) : prop[name];
+		}
+
+		Class.prototype = prototype;
+		Class.constructor = Class;
+
+		Class.extend = arguments.callee; // make class extendable
+
+		return Class;
+	};
+})( this.jQuery, this.app );
+
+(function( app ) {
+
+	var ut = app.ns("ut");
+
+	ut.option_template = function(v) { return { tag: "OPTION", value: v, text: v }; };
+
+	ut.require_template = function(f) { return f.require ? { tag: "SPAN", cls: "require", text: "*" } : null; };
+
+
+	var sib_prefix = ['B','ki','Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi'];
+
+	ut.byteSize_template = function(n) {
+		var i = 0;
+		while( n >= 1000 ) {
+			i++;
+			n /= 1024;
+		}
+		return (i === 0 ? n.toString() : n.toFixed( 3 - parseInt(n,10).toString().length )) + ( sib_prefix[ i ] || "..E" );
+	};
+
+	var sid_prefix = ['','k','M', 'G', 'T', 'P', 'E', 'Z', 'Y'];
+
+	ut.count_template = function(n) {
+		var i = 0;
+		while( n >= 1000 ) {
+			i++;
+			n /= 1000;
+		}
+		return i === 0 ? n.toString() : ( n.toFixed( 3 - parseInt(n,10).toString().length ) + ( sid_prefix[ i ] || "..E" ) );
+	};
+
+})( this.app );
+
+(function( app ) {
+
+	var ux = app.ns("ux");
+
+	ux.Observable = ux.Class.extend((function() {
+		return {
+			init: function() {
+				this.observers = {};
+				for( var opt in this.config ) { // automatically install observers that are defined in the configuration
+					if( opt.indexOf( 'on' ) === 0 ) {
+						this.on( opt.substring(2) , this.config[ opt ] );
+					}
+				}
+			},
+			_getObs: function( type ) {
+				return ( this.observers[ type.toLowerCase() ] || ( this.observers[ type.toLowerCase() ] = [] ) );
+			},
+			on: function( type, fn, params, thisp ) {
+				this._getObs( type ).push( { "cb" : fn, "args" : params || [] , "cx" : thisp || this } );
+				return this;
+			},
+			fire: function( type ) {
+				var params = Array.prototype.slice.call( arguments, 1 );
+				this._getObs( type ).slice().forEach( function( ob ) {
+					ob["cb"].apply( ob["cx"], ob["args"].concat( params ) );
+				} );
+				return this;
+			},
+			removeAllObservers: function() {
+				this.observers = {};
+			},
+			removeObserver: function( type, fn ) {
+				var obs = this._getObs( type ),
+					index = obs.reduce( function(p, t, i) { return (t.cb === fn) ? i : p; }, -1 );
+				if(index !== -1) {
+					obs.splice( index, 1 );
+				}
+				return this; // make observable functions chainable
+			},
+			hasObserver: function( type ) {
+				return !! this._getObs( type ).length;
+			}
+		};
+	})());
+
+})( this.app );
+(function( app ) {
+
+	var ux = app.ns("ux");
+
+	var extend = ux.Observable.extend;
+	var instance = function() {
+		if( ! ("me" in this) ) {
+			this.me = new this();
+		}
+		return this.me;
+	};
+
+	ux.Singleton = ux.Observable.extend({});
+
+	ux.Singleton.extend = function() {
+		var Self = extend.apply( this, arguments );
+		Self.instance = instance;
+		return Self;
+	};
+
+})( this.app );
+
+(function( $, app ) {
+
+	var ux = app.ns("ux");
+
+	/**
+	 * Provides drag and drop functionality<br>
+	 * a DragDrop instance is created for each usage pattern and then used over and over again<br>
+	 * first a dragObj is defined - this is the jquery node that will be dragged around<br>
+	 * second, the event callbacks are defined - these allow you control the ui during dragging and run functions when successfully dropping<br>
+	 * thirdly drop targets are defined - this is a list of DOM nodes, the constructor works in one of two modes:
+	 * <li>without targets - objects can be picked up and dragged around, dragStart and dragStop events fire</li>
+	 * <li>with targets - as objects are dragged over targets dragOver, dragOut and DragDrop events fire
+	 * to start dragging call the DragDrop.pickup_handler() function, dragging stops when the mouse is released.
+	 * @constructor
+	 * The following options are supported
+	 * <dt>targetSelector</dt>
+	 *   <dd>an argument passed directly to jquery to create a list of targets, as such it can be a CSS style selector, or an array of DOM nodes<br>if target selector is null the DragDrop does Drag only and will not fire dragOver dragOut and dragDrop events</dd>
+	 * <dt>pickupSelector</dt>
+	 *   <dd>a jquery selector. The pickup_handler is automatically bound to matched elements (eg clicking on these elements starts the drag). if pickupSelector is null, the pickup_handler must be manually bound <code>$(el).bind("mousedown", dragdrop.pickup_handler)</code></dd>
+	 * <dt>dragObj</dt>
+	 *   <dd>the jQuery element to drag around when pickup is called. If not defined, dragObj must be set in onDragStart</dd>
+	 * <dt>draggingClass</dt>
+	 *   <dd>the class(es) added to items when they are being dragged</dd>
+	 * The following observables are supported
+	 * <dt>dragStart</dt>
+	 *   <dd>a callback when start to drag<br><code>function(jEv)</code></dd>
+	 * <dt>dragOver</dt>
+	 *   <dd>a callback when we drag into a target<br><code>function(jEl)</code></dd>
+	 * <dt>dragOut</dt>
+	 *   <dd>a callback when we drag out of a target, or when we drop over a target<br><code>function(jEl)</code></dd>
+	 * <dt>dragDrop</dt>
+	 *   <dd>a callback when we drop on a target<br><code>function(jEl)</code></dd>
+	 * <dt>dragStop</dt>
+	 *   <dd>a callback when we stop dragging<br><code>function(jEv)</code></dd>
+	 */
+	ux.DragDrop = ux.Observable.extend({
+		defaults : {
+			targetsSelector : null,
+			pickupSelector:   null,
+			dragObj :         null,
+			draggingClass :   "dragging"
+		},
+
+		init: function(options) {
+			this._super(); // call the class initialiser
+		
+			this.drag_handler = this.drag.bind(this);
+			this.drop_handler = this.drop.bind(this);
+			this.pickup_handler = this.pickup.bind(this);
+			this.targets = [];
+			this.dragObj = null;
+			this.dragObjOffset = null;
+			this.currentTarget = null;
+			if(this.config.pickupSelector) {
+				$(this.config.pickupSelector).bind("mousedown", this.pickup_handler);
+			}
+		},
+
+		drag : function(jEv) {
+			jEv.preventDefault();
+			var mloc = acx.vector( this.lockX || jEv.pageX, this.lockY || jEv.pageY );
+			this.dragObj.css(mloc.add(this.dragObjOffset).asOffset());
+			if(this.targets.length === 0) {
+				return;
+			}
+			if(this.currentTarget !== null && mloc.within(this.currentTarget[1], this.currentTarget[2])) {
+				return;
+			}
+			if(this.currentTarget !== null) {
+				this.fire('dragOut', this.currentTarget[0]);
+				this.currentTarget = null;
+			}
+			for(var i = 0; i < this.targets.length; i++) {
+				if(mloc.within(this.targets[i][1], this.targets[i][2])) {
+					this.currentTarget = this.targets[i];
+					break;
+				}
+			}
+			if(this.currentTarget !== null) {
+				this.fire('dragOver', this.currentTarget[0]);
+			}
+		},
+		
+		drop : function(jEv) {
+			$(document).unbind("mousemove", this.drag_handler);
+			$(document).unbind("mouseup", this.drop_handler);
+			this.dragObj.removeClass(this.config.draggingClass);
+			if(this.currentTarget !== null) {
+				this.fire('dragOut', this.currentTarget[0]);
+				this.fire('dragDrop', this.currentTarget[0]);
+			}
+			this.fire('dragStop', jEv);
+			this.dragObj = null;
+		},
+		
+		pickup : function(jEv, opts) {
+			$.extend(this.config, opts);
+			this.fire('dragStart', jEv);
+			this.dragObj = this.dragObj || this.config.dragObj;
+			this.dragObjOffset = this.config.dragObjOffset || acx.vector(this.dragObj.offset()).sub(jEv.pageX, jEv.pageY);
+			this.lockX = this.config.lockX ? jEv.pageX : 0;
+			this.lockY = this.config.lockY ? jEv.pageY : 0;
+			this.dragObj.addClass(this.config.draggingClass);
+			if(!this.dragObj.get(0).parentNode || this.dragObj.get(0).parentNode.nodeType === 11) { // 11 = document fragment
+				$(document.body).append(this.dragObj);
+			}
+			if(this.config.targetsSelector) {
+				this.currentTarget = null;
+				var targets = ( this.targets = [] );
+				// create an array of elements optimised for rapid collision detection calculation
+				$(this.config.targetsSelector).each(function(i, el) {
+					var jEl = $(el);
+					var tl = acx.vector(jEl.offset());
+					var br = tl.add(jEl.width(), jEl.height());
+					targets.push([jEl, tl, br]);
+				});
+			}
+			$(document).bind("mousemove", this.drag_handler);
+			$(document).bind("mouseup", this.drop_handler);
+			this.drag_handler(jEv);
+		}
+	});
+
+})( this.jQuery, this.app );
+
+(function( app ) {
+
+	var ux = app.ns("ux");
+
+	ux.FieldCollection = ux.Observable.extend({
+		defaults: {
+			fields: []	// the collection of fields
+		},
+		init: function() {
+			this._super();
+			this.fields = this.config.fields;
+		},
+		validate: function() {
+			return this.fields.reduce(function(r, field) {
+				return r && field.validate();
+			}, true);
+		},
+		getData: function(type) {
+			return this.fields.reduce(function(r, field) {
+				r[field.name] = field.val(); return r;
+			}, {});
+		}
+	});
+
+})( this.app );
+
+(function( $, app ) {
+
+	var data = app.ns("data");
+	var ux = app.ns("ux");
+
+	data.Model = ux.Observable.extend({
+		defaults: {
+			data: null
+		},
+		init: function() {
+			this.set( this.config.data );
+		},
+		set: function( key, value ) {
+			if( arguments.length === 1 ) {
+				this._data = $.extend( {}, key );
+			} else {
+				key.split(".").reduce(function( ptr, prop, i, props) {
+					if(i === (props.length - 1) ) {
+						ptr[prop] = value;
+					} else {
+						if( !(prop in ptr) ) {
+							ptr[ prop ] = {};
+						}
+						return ptr[prop];
+					}
+				}, this._data );
+			}
+		},
+		get: function( key ) {
+			return key.split(".").reduce( function( ptr, prop ) {
+				return ( ptr && ( prop in ptr ) ) ? ptr[ prop ] : undefined;
+			}, this._data );
+		},
+	});
+})( this.jQuery, this.app );
+
+(function( app ) {
+
+	var data = app.ns("data");
+	var ux = app.ns("ux");
+
+	data.DataSourceInterface = ux.Observable.extend({
+		/*
+		properties
+			meta = { total: 0 },
+			headers = [ { name: "" } ],
+			data = [ { column: value, column: value } ],
+			sort = { column: "name", dir: "desc" }
+		events
+			data: function( DataSourceInterface )
+		 */
+		_getSummary: function(res) {
+			this.summary = i18n.text("TableResults.Summary", res._shards.successful, res._shards.total, res.hits.total, (res.took / 1000).toFixed(3));
+		},
+		_getMeta: function(res) {
+			this.meta = { total: res.hits.total, shards: res._shards, tool: res.took };
+		}
+	});
+
+})( this.app );
+(function( app ) {
+
+	var data = app.ns("data");
+
+	data.ResultDataSourceInterface = data.DataSourceInterface.extend({
+		results: function(res) {
+			this._getSummary(res);
+			this._getMeta(res);
+			this._getData(res);
+			this.sort = {};
+			this.fire("data", this);
+		},
+		_getData: function(res) {
+			var columns = this.columns = [];
+			this.data = res.hits.hits.map(function(hit) {
+				var row = (function(path, spec, row) {
+					for(var prop in spec) {
+						if(acx.isObject(spec[prop])) {
+							arguments.callee(path.concat(prop), spec[prop], row);
+						} else if(acx.isArray(spec[prop])) {
+							if(spec[prop].length) {
+								arguments.callee(path.concat(prop), spec[prop][0], row)
+							}
+						} else {
+							var dpath = path.concat(prop).join(".");
+							if(! columns.contains(dpath)) {
+								columns.push(dpath);
+							}
+							row[dpath] = (spec[prop] || "null").toString();
+						}
+					}
+					return row;
+				})([ hit._type ], hit, {});
+				row._source = hit;
+				return row;
+			}, this);
+		}
+	});
+
+})( this.app );
+
+(function( app ) {
+
+	/*
+	notes on elasticsearch terminology used in this project
+
+	indices[index] contains one or more
+	types[type] contains one or more
+	documents contain one or more
+	paths[path]
+	each path contains one element of data
+	each path maps to one field
+
+	eg PUT, "/twitter/tweet/1"
+	{
+		user: "mobz",
+		date: "2011-01-01",
+		message: "You know, for browsing elasticsearch",
+		name: {
+			first: "Ben",
+			last: "Birch"
+		}
+	}
+
+	creates
+		1 index: twitter
+				this is the collection of index data
+		1 type: tweet
+				this is the type of document (kind of like a table in sql)
+		1 document: /twitter/tweet/1
+				this is an actual document in the index ( kind of like a row in sql)
+		5 paths: [ ["user"], ["date"], ["message"], ["name","first"], ["name","last"] ]
+				since documents can be heirarchical this maps a path from a document root to a piece of data
+		5 fields: [ "user", "date", "message", "first", "last" ]
+				this is an indexed 'column' of data. fields are not heirarchical
+
+		the relationship between a path and a field is called a mapping. mappings also contain a wealth of information about how es indexes the field
+
+	notes
+	1) a path is stored as an array, the dpath is  <index> . <type> . path.join("."),
+			which can be considered the canonical reference for a mapping
+	2) confusingly, es uses the term index for both the collection of indexed data, and the individually indexed fields
+			so the term index_name is the same as field_name in this sense.
+
+	*/
+
+	var data = app.ns("data");
+	var ux = app.ns("ux");
+
+	var coretype_map = {
+		"string" : "string",
+		"keyword" : "string",
+		"text" : "string",
+		"byte" : "number",
+		"short" : "number",
+		"long" : "number",
+		"integer" : "number",
+		"float" : "number",
+		"double" : "number",
+		"ip" : "number",
+		"date" : "date",
+		"boolean" : "boolean",
+		"binary" : "binary",
+		"multi_field" : "multi_field"
+	};
+
+	var default_property_map = {
+		"string" : { "store" : "no", "index" : "analysed" },
+		"number" : { "store" : "no", "precision_steps" : 4 },
+		"date" : { "store" : "no", "format" : "dateOptionalTime", "index": "yes", "precision_steps": 4 },
+		"boolean" : { "store" : "no", "index": "yes" },
+		"binary" : { },
+		"multi_field" : { }
+	};
+
+	// parses metatdata from a cluster, into a bunch of useful data structures
+	data.MetaData = ux.Observable.extend({
+		defaults: {
+			state: null // (required) response from a /_cluster/state request
+		},
+		init: function() {
+			this._super();
+			this.refresh(this.config.state);
+		},
+		getIndices: function(alias) {
+			return alias ? this.aliases[alias] : this.indicesList;
+		},
+		// returns an array of strings containing all types that are in all of the indices passed in, or all types
+		getTypes: function(indices) {
+			var indices = indices || [], types = [];
+			this.typesList.forEach(function(type) {
+				for(var i = 0; i < indices.length; i++) {
+					if(! this.indices[indices[i]].types.contains(type))
+						return;
+				}
+				types.push(type);
+			}, this);
+			return types;
+		},
+		refresh: function(state) {
+			// currently metadata expects all like named fields to have the same type, even when from different types and indices
+			var aliases = this.aliases = {};
+			var indices = this.indices = {};
+			var types = this.types = {};
+			var fields = this.fields = {};
+			var paths = this.paths = {};
+
+			function createField( mapping, index, type, path, name ) {
+				var dpath = [ index, type ].concat( path ).join( "." );
+				var field_name = mapping.index_name || path.join( "." );
+				var field = paths[ dpath ] = fields[ field_name ] || $.extend({
+					field_name : field_name,
+					core_type : coretype_map[ mapping.type ],
+					dpaths : []
+				}, default_property_map[ coretype_map[ mapping.type ] ], mapping );
+
+				if (field.type === "multi_field" && typeof field.fields !== "undefined") {
+					for (var subField in field.fields) {
+						field.fields[ subField ] = createField( field.fields[ subField ], index, type, path.concat( subField ), name + "." + subField );
+					}
+				}
+				if (fields.dpaths) {
+					field.dpaths.push(dpath);
+				}
+				return field;
+			}
+			function getFields(properties, type, index, listeners) {
+				(function procPath(prop, path) {
+					for (var n in prop) {
+						if ("properties" in prop[n]) {
+							procPath( prop[ n ].properties, path.concat( n ) );
+						} else {
+							var field = createField(prop[n], index, type, path.concat(n), n);							
+							listeners.forEach( function( listener ) {
+								listener[ field.field_name ] = field;
+							} );
+						}
+					}
+				})(properties, []);
+			}
+			for (var index in state.metadata.indices) {
+				indices[index] = {
+					types : [], fields : {}, paths : {}, parents : {}
+				};
+				indices[index].aliases = state.metadata.indices[index].aliases;
+				indices[index].aliases.forEach(function(alias) {
+					(aliases[alias] || (aliases[alias] = [])).push(index);
+				});
+				var mapping = state.metadata.indices[index].mappings;
+				for (var type in mapping) {
+					indices[index].types.push(type);
+					if ( type in types) {
+						types[type].indices.push(index);
+					} else {
+						types[type] = {
+							indices : [index], fields : {}
+						};
+					}
+					getFields(mapping[type].properties, type, index, [fields, types[type].fields, indices[index].fields]);
+					if ( typeof mapping[type]._parent !== "undefined") {
+						indices[index].parents[type] = mapping[type]._parent.type;
+					}
+				}
+			}
+
+			this.aliasesList = Object.keys(aliases);
+			this.indicesList = Object.keys(indices);
+			this.typesList = Object.keys(types);
+			this.fieldsList = Object.keys(fields);
+		}
+	});
+
+})( this.app );	
+
+(function( app ) {
+
+	var data = app.ns("data");
+	var ux = app.ns("ux");
+
+	data.MetaDataFactory = ux.Observable.extend({
+		defaults: {
+			cluster: null // (required) an app.services.Cluster
+		},
+		init: function() {
+			this._super();
+			this.config.cluster.get("_cluster/state", function(data) {
+				this.metaData = new app.data.MetaData({state: data});
+				this.fire("ready", this.metaData,  { originalData: data }); // TODO originalData needed for legacy ui.FilterBrowser
+			}.bind(this));
+		}
+	});
+
+})( this.app );
+
+(function( app ) {
+
+	var data = app.ns("data");
+	var ux = app.ns("ux");
+
+	data.Query = ux.Observable.extend({
+		defaults: {
+			cluster: null,  // (required) instanceof app.services.Cluster
+			size: 50        // size of pages to return
+		},
+		init: function() {
+			this._super();
+			this.cluster = this.config.cluster;
+			this.refuid = 0;
+			this.refmap = {};
+			this.indices = [];
+			this.types = [];
+			this.search = {
+				query: { bool: { must: [], must_not: [], should: [] } },
+				from: 0,
+				size: this.config.size,
+				sort: [],
+				aggs: {},
+				version: true
+			};
+			this.defaultClause = this.addClause();
+			this.history = [ this.getState() ];
+		},
+		clone: function() {
+			var q = new data.Query({ cluster: this.cluster });
+			q.restoreState(this.getState());
+			for(var uqid in q.refmap) {
+				q.removeClause(uqid);
+			}
+			return q;
+		},
+		getState: function() {
+			return $.extend(true, {}, { search: this.search, indices: this.indices, types: this.types });
+		},
+		restoreState: function(state) {
+			state = $.extend(true, {}, state || this.history[this.history.length - 1]);
+			this.indices = state.indices;
+			this.types = state.types;
+			this.search = state.search;
+		},
+		getData: function() {
+			return JSON.stringify(this.search);
+		},
+		query: function() {
+			var state = this.getState();
+			this.cluster.post(
+					(this.indices.join(",") || "_all") + "/" + ( this.types.length ? this.types.join(",") + "/" : "") + "_search",
+					this.getData(),
+					function(results) {
+						if(results === null) {
+							alert(i18n.text("Query.FailAndUndo"));
+							this.restoreState();
+							return;
+						}
+						this.history.push(state);
+
+						this.fire("results", this, results);
+					}.bind(this));
+		},
+		loadParents: function(res,metadata){
+			//create data for mget
+			var data = { docs :[] };
+			var indexToTypeToParentIds = {};
+			res.hits.hits.forEach(function(hit) {
+			if (typeof hit.fields != "undefined"){
+				if (typeof hit.fields._parent != "undefined"){
+					var parentType = metadata.indices[hit._index].parents[hit._type];
+					if (typeof indexToTypeToParentIds[hit._index] == "undefined"){
+						indexToTypeToParentIds[hit._index] = new Object();
+					}
+					if (typeof indexToTypeToParentIds[hit._index][hit._type] == "undefined"){
+						indexToTypeToParentIds[hit._index][hit._type] = new Object();
+					}
+					if (typeof indexToTypeToParentIds[hit._index][hit._type][hit.fields._parent] == "undefined"){
+						indexToTypeToParentIds[hit._index][hit._type][hit.fields._parent] = null;
+						data.docs.push({ _index:hit._index, _type:parentType, _id:hit.fields._parent});
+					}
+				}
+			}
+		});
+
+		//load parents
+		var state = this.getState();
+			this.cluster.post("_mget",JSON.stringify(data),
+				function(results) {
+					if(results === null) {
+						alert(i18n.text("Query.FailAndUndo"));
+						this.restoreState();
+						return;
+					}
+					this.history.push(state);
+					var indexToTypeToParentIdToHit = new Object();
+					results.docs.forEach(function(doc) {
+						if (typeof indexToTypeToParentIdToHit[doc._index] == "undefined"){
+						indexToTypeToParentIdToHit[doc._index] = new Object();
+					}
+					
+					if (typeof indexToTypeToParentIdToHit[doc._index][doc._type] == "undefined"){
+						indexToTypeToParentIdToHit[doc._index][doc._type] = new Object();
+					}
+					
+					indexToTypeToParentIdToHit[doc._index][doc._type][doc._id] = doc;
+					});
+					
+					res.hits.hits.forEach(function(hit) {
+						if (typeof hit.fields != "undefined"){
+							if (typeof hit.fields._parent != "undefined"){
+								var parentType = metadata.indices[hit._index].parents[hit._type];
+								hit._parent = indexToTypeToParentIdToHit[hit._index][parentType][hit.fields._parent];
+							}
+						}
+					});
+
+					this.fire("resultsWithParents", this, res);
+				}.bind(this));
+		},
+		setPage: function(page) {
+			this.search.from = this.config.size * (page - 1);
+		},
+		setSort: function(index, desc) {
+			var sortd = {}; sortd[index] = { reverse: !!desc };
+			this.search.sort.unshift( sortd );
+			for(var i = 1; i < this.search.sort.length; i++) {
+				if(Object.keys(this.search.sort[i])[0] === index) {
+					this.search.sort.splice(i, 1);
+					break;
+				}
+			}
+		},
+		setIndex: function(index, add) {
+			if(add) {
+				if(! this.indices.contains(index)) this.indices.push(index);
+			} else {
+				this.indices.remove(index);
+			}
+			this.fire("setIndex", this, { index: index, add: !!add });
+		},
+		setType: function(type, add) {
+			if(add) {
+				if(! this.types.contains(type)) this.types.push(type);
+			} else {
+				this.types.remove(type);
+			}
+			this.fire("setType", this, { type: type, add: !!add });
+		},
+		addClause: function(value, field, op, bool) {
+			bool = bool || "should";
+			op = op || "match_all";
+			field = field || "_all";
+			var clause = this._setClause(value, field, op, bool);
+			var uqid = "q-" + this.refuid++;
+			this.refmap[uqid] = { clause: clause, value: value, field: field, op: op, bool: bool };
+			if(this.search.query.bool.must.length + this.search.query.bool.should.length > 1) {
+				this.removeClause(this.defaultClause);
+			}
+			this.fire("queryChanged", this, { uqid: uqid, search: this.search} );
+			return uqid; // returns reference to inner query object to allow fast updating
+		},
+		removeClause: function(uqid) {
+			var ref = this.refmap[uqid],
+				bool = this.search.query.bool[ref.bool];
+			bool.remove(ref.clause);
+			if(this.search.query.bool.must.length + this.search.query.bool.should.length === 0) {
+				this.defaultClause = this.addClause();
+			}
+		},
+		addAggs: function(aggs) {
+			var aggsId = "f-" + this.refuid++;
+			this.search.aggs[aggsId] = aggs;
+			this.refmap[aggsId] = { aggsId: aggsId, aggs: aggs };
+			return aggsId;
+		},
+		removeAggs: function(aggsId) {
+			delete this.search.aggs[aggsId];
+			delete this.refmap[aggsId];
+		},
+		_setClause: function(value, field, op, bool) {
+			var clause = {}, query = {};
+			if(op === "match_all") {
+			} else if(op === "query_string") {
+				query["default_field"] = field;
+				query["query"] = value;
+			} else if(op === "missing") {
+				op = "constant_score"
+				var missing = {}, filter = {};
+				missing["field"] = field;
+				filter["missing"] = missing
+				query["filter"] = filter;
+			} else {
+				query[field] = value;
+			}
+			clause[op] = query;
+			this.search.query.bool[bool].push(clause);
+			return clause;
+		}
+	});
+
+})( this.app );
+
+(function( app ) {
+
+	var data = app.ns("data");
+
+	data.QueryDataSourceInterface = data.DataSourceInterface.extend({
+		defaults: {
+			metadata: null, // (required) instanceof app.data.MetaData, the cluster metadata
+			query: null     // (required) instanceof app.data.Query the data source
+		},
+		init: function() {
+			this._super();
+			this.config.query.on("results", this._results_handler.bind(this) );
+			this.config.query.on("resultsWithParents", this._load_parents.bind(this) );
+		},
+		_results_handler: function(query, res) {
+			this._getSummary(res);
+			this._getMeta(res);
+			var sort = query.search.sort[0] || { "_score": { reverse: false }};
+			var sortField = Object.keys(sort)[0];
+			this.sort = { column: sortField, dir: (sort[sortField].reverse ? "asc" : "desc") };
+			this._getData(res, this.config.metadata);
+			this.fire("data", this);
+		},
+		_load_parents: function(query, res) {
+			query.loadParents(res, this.config.metadata);
+		},
+		_getData: function(res, metadata) {
+			var metaColumns = ["_index", "_type", "_id", "_score"];
+			var columns = this.columns = [].concat(metaColumns);
+
+			this.data = res.hits.hits.map(function(hit) {
+				var row = (function(path, spec, row) {
+					for(var prop in spec) {
+						if(acx.isObject(spec[prop])) {
+							arguments.callee(path.concat(prop), spec[prop], row);
+						} else if(acx.isArray(spec[prop])) {
+							if(spec[prop].length) {
+								arguments.callee(path.concat(prop), spec[prop][0], row)
+							}
+						} else {
+							var dpath = path.concat(prop).join(".");
+							if(metadata.paths[dpath]) {
+								var field_name = metadata.paths[dpath].field_name;
+								if(! columns.contains(field_name)) {
+									columns.push(field_name);
+								}
+								row[field_name] = (spec[prop] === null ? "null" : spec[prop] ).toString();
+							} else {
+								// TODO: field not in metadata index
+							}
+						}
+					}
+					return row;
+				})([ hit._index, hit._type ], hit._source, {});
+				metaColumns.forEach(function(n) { row[n] = hit[n]; });
+				row._source = hit;
+				if (typeof hit._parent!= "undefined") {
+					(function(prefix, path, spec, row) {
+					for(var prop in spec) {
+						if(acx.isObject(spec[prop])) {
+							arguments.callee(prefix, path.concat(prop), spec[prop], row);
+						} else if(acx.isArray(spec[prop])) {
+							if(spec[prop].length) {
+								arguments.callee(prefix, path.concat(prop), spec[prop][0], row)
+							}
+						} else {
+							var dpath = path.concat(prop).join(".");
+							if(metadata.paths[dpath]) {
+								var field_name = metadata.paths[dpath].field_name;
+								var column_name = prefix+"."+field_name;
+								if(! columns.contains(column_name)) {
+									columns.push(column_name);
+								}
+								row[column_name] = (spec[prop] === null ? "null" : spec[prop] ).toString();
+							} else {
+								// TODO: field not in metadata index
+							}
+						}
+					}
+					})(hit._parent._type,[hit._parent._index, hit._parent._type], hit._parent._source, row);
+				}
+				return row;
+			}, this);
+		}
+	});
+
+})( this.app );
+
+(function( app ) {
+
+	var data = app.ns("data");
+	var ux = app.ns("ux");
+
+	data.BoolQuery = ux.Observable.extend({
+		defaults: {
+			size: 50		// size of pages to return
+		},
+		init: function() {
+			this._super();
+			this.refuid = 0;
+			this.refmap = {};
+			this.search = {
+				query: { bool: { must: [], must_not: [], should: [] } },
+				from: 0,
+				size: this.config.size,
+				sort: [],
+				aggs: {}
+			};
+			this.defaultClause = this.addClause();
+		},
+		setSize: function(size) {
+			this.search.size = parseInt( size, 10 );
+		},
+		setPage: function(page) {
+			this.search.from = this.config.size * (page - 1) + 1;
+		},
+		addClause: function(value, field, op, bool) {
+			bool = bool || "should";
+			op = op || "match_all";
+			field = field || "_all";
+			var clause = this._setClause(value, field, op, bool);
+			var uqid = "q-" + this.refuid++;
+			this.refmap[uqid] = { clause: clause, value: value, field: field, op: op, bool: bool };
+			if(this.search.query.bool.must.length + this.search.query.bool.should.length > 1) {
+				this.removeClause(this.defaultClause);
+			}
+			this.fire("queryChanged", this, { uqid: uqid, search: this.search} );
+			return uqid; // returns reference to inner query object to allow fast updating
+		},
+		removeClause: function(uqid) {
+			var ref = this.refmap[uqid],
+				bool = this.search.query.bool[ref.bool];
+			var clauseIdx = bool.indexOf(ref.clause);
+			// Check that this clause hasn't already been removed
+			if (clauseIdx >=0) {
+				bool.splice(clauseIdx, 1);
+			}
+		},
+		_setClause: function(value, field, op, bool) {
+			var clause = {}, query = {};
+			if(op === "match_all") {
+			} else if(op === "query_string") {
+				query["default_field"] = field;
+				query["query"] = value;
+			} else if(op === "missing") {
+				op = "constant_score"
+				var missing = {}, filter = {};
+				missing["field"] = field;
+				filter["missing"] = missing
+				query["filter"] = filter;
+			} else {
+				query[field.substring(field.indexOf(".")+1)] = value;
+			}
+			clause[op] = query;
+			this.search.query.bool[bool].push(clause);
+			return clause;
+		},
+		getData: function() {
+			return JSON.stringify(this.search);
+		}
+	});
+
+})( this.app );
+(function( app ) {
+	
+	var ux = app.ns("ux");
+	var services = app.ns("services");
+
+	services.Preferences = ux.Singleton.extend({
+		init: function() {
+			this._storage = window.localStorage;
+			this._setItem("__version", 1 );
+		},
+		get: function( key ) {
+			return this._getItem( key );
+		},
+		set: function( key, val ) {
+			return this._setItem( key, val );
+		},
+		_getItem: function( key ) {
+			try {
+				return JSON.parse( this._storage.getItem( key ) );
+			} catch(e) {
+				console.warn( e );
+				return undefined;
+			}
+		},
+		_setItem: function( key, val ) {
+			try {
+				return this._storage.setItem( key, JSON.stringify( val ) );
+			} catch(e) {
+				console.warn( e );
+				return undefined;
+			}
+		}
+	});
+
+})( this.app );
+
+(function( $, app ) {
+
+	var services = app.ns("services");
+	var ux = app.ns("ux");
+
+	function parse_version( v ) {
+		return v.match(/^(\d+)\.(\d+)\.(\d+)/).slice(1,4).map( function(d) { return parseInt(d || 0, 10); } );
+	}
+
+	services.Cluster = ux.Class.extend({
+		defaults: {
+			base_uri: null
+		},
+		init: function() {
+			this.base_uri = this.config.base_uri;
+		},
+		setVersion: function( v ) {
+			this.version = v;
+			this._version_parts = parse_version( v );
+		},
+		versionAtLeast: function( v ) {
+			var testVersion = parse_version( v );
+			for( var i = 0; i < 3; i++ ) {
+				if( testVersion[i] !== this._version_parts[i] ) {
+					return testVersion[i] < this._version_parts[i];
+				}
+			}
+			return true;
+		},
+		request: function( params ) {
+			return $.ajax( $.extend({
+				url: this.base_uri + params.path,
+				dataType: "json",
+				error: function(xhr, type, message) {
+					if("console" in window) {
+						console.log({ "XHR Error": type, "message": message });
+					}
+				}
+			},  params) );
+		},
+		"get": function(path, success) { return this.request( { type: "GET", path: path, success: success } ); },
+		"post": function(path, data, success) { return this.request( { type: "POST", path: path, data: data, success: success } ); },
+		"put": function(path, data, success) { return this.request( { type: "PUT", path: path, data: data, success: success } ); },
+		"delete": function(path, data, success) { return this.request( { type: "DELETE", path: path, data: data, success: success } ); }
+	});
+
+})( this.jQuery, this.app );
+
+	(function( app ) {
+
+	var services = app.ns("services");
+	var ux = app.ns("ux");
+
+	services.ClusterState = ux.Observable.extend({
+		defaults: {
+			cluster: null
+		},
+		init: function() {
+			this._super();
+			this.cluster = this.config.cluster;
+			this.clusterState = null;
+			this.status = null;
+			this.nodeStats = null;
+			this.clusterNodes = null;
+		},
+		refresh: function() {
+			var self = this, clusterState, status, nodeStats, clusterNodes, clusterHealth;
+			function updateModel() {
+				if( clusterState && status && nodeStats && clusterNodes && clusterHealth ) {
+					this.clusterState = clusterState;
+					this.status = status;
+					this.nodeStats = nodeStats;
+					this.clusterNodes = clusterNodes;
+					this.clusterHealth = clusterHealth;
+					this.fire( "data", this );
+				}
+			}
+			this.cluster.get("_cluster/state", function( data ) {
+				clusterState = data;
+				updateModel.call( self );
+			});
+			this.cluster.get("_stats", function( data ) {
+				status = data;
+				updateModel.call( self );
+			});
+			this.cluster.get("_nodes/stats", function( data ) {
+				nodeStats = data;
+				updateModel.call( self );
+			});
+			this.cluster.get("_nodes", function( data ) {
+				clusterNodes = data;
+				updateModel.call( self );
+			});
+			this.cluster.get("_cluster/health", function( data ) {
+				clusterHealth = data;
+				updateModel.call( self );
+			});
+		},
+		_clusterState_handler: function(state) {
+			this.clusterState = state;
+			this.redraw("clusterState");
+		},
+		_status_handler: function(status) {
+			this.status = status;
+			this.redraw("status");
+		},
+		_clusterNodeStats_handler: function(stats) {
+			this.nodeStats = stats;
+			this.redraw("nodeStats");
+		},
+		_clusterNodes_handler: function(nodes) {
+			this.clusterNodes = nodes;
+			this.redraw("clusterNodes");
+		},
+		_clusterHealth_handler: function(health) {
+			this.clusterHealth = health;
+			this.redraw("status");
+		}
+	});
+
+})( this.app );
+
+(function( $, joey, app ) {
+
+	var ui = app.ns("ui");
+	var ux = app.ns("ux");
+
+	ui.AbstractWidget = ux.Observable.extend({
+		defaults : {
+			id: null     // the id of the widget
+		},
+
+		el: null,       // this is the jquery wrapped dom element(s) that is the root of the widget
+
+		init: function() {
+			this._super();
+			for(var prop in this) {       // automatically bind all the event handlers
+				if(prop.contains("_handler")) {
+					this[prop] = this[prop].bind(this);
+				}
+			}
+		},
+
+		id: function(suffix) {
+			return this.config.id ? (this.config.id + (suffix ? "-" + suffix : "")) : undefined;
+		},
+
+		attach: function( parent, method ) {
+			if( parent ) {
+				this.el[ method || "appendTo"]( parent );
+			}
+			this.fire("attached", this );
+			return this;
+		},
+
+		remove: function() {
+			this.el.remove();
+			this.fire("removed", this );
+			this.removeAllObservers();
+			this.el = null;
+			return this;
+		}
+	});
+
+	joey.plugins.push( function( obj ) {
+		if( obj instanceof ui.AbstractWidget ) {
+			return obj.el[0];
+		}
+	});
+
+})( this.jQuery, this.joey, this.app );
+
+(function( $, app, joey ) {
+
+	var ui = app.ns("ui");
+
+	ui.AbstractField = ui.AbstractWidget.extend({
+
+		defaults: {
+			name : "",			// (required) - name of the field
+			require: false,	// validation requirements (false, true, regexp, function)
+			value: "",			// default value
+			label: ""				// human readable label of this field
+		},
+
+		init: function(parent) {
+			this._super();
+			this.el = $.joey(this._main_template());
+			this.field = this.el.find("[name="+this.config.name+"]");
+			this.label = this.config.label;
+			this.require = this.config.require;
+			this.name = this.config.name;
+			this.val( this.config.value );
+			this.attach( parent );
+		},
+
+		val: function( val ) {
+			if(val === undefined) {
+				return this.field.val();
+			} else {
+				this.field.val( val );
+				return this;
+			}
+		},
+
+		validate: function() {
+			var val = this.val(), req = this.require;
+			if( req === false ) {
+				return true;
+			} else if( req === true ) {
+				return val.length > 0;
+			} else if( req.test && $.isFunction(req.test) ) {
+				return req.test( val );
+			} else if( $.isFunction(req) ) {
+				return req( val, this );
+			}
+		}
+
+	});
+
+})( this.jQuery, this.app, this.joey );
+
+(function( app ) {
+
+	var ui = app.ns("ui");
+
+	ui.TextField = ui.AbstractField.extend({
+		init: function() {
+			this._super();
+		},
+		_keyup_handler: function() {
+			this.fire("change", this );
+		},
+		_main_template: function() {
+			return { tag: "DIV", id: this.id(), cls: "uiField uiTextField", children: [
+				{ tag: "INPUT",
+					type: "text",
+					name: this.config.name,
+					placeholder: this.config.placeholder,
+					onkeyup: this._keyup_handler
+				}
+			]};
+		}
+	});
+
+})( this.app );
+
+(function( app ) {
+
+	var ui = app.ns("ui");
+
+	ui.CheckField = ui.AbstractField.extend({
+		_main_template: function() { return (
+			{ tag: "DIV", id: this.id(), cls: "uiCheckField", children: [
+				{ tag: "INPUT", type: "checkbox", name: this.config.name, checked: !!this.config.value }
+			] }
+		); },
+		validate: function() {
+			return this.val() || ( ! this.require );
+		},
+		val: function( val ) {
+			if( val === undefined ) {
+				return !!this.field.attr( "checked" );
+			} else {
+				this.field.attr( "checked", !!val );
+			}
+		}
+	});
+
+})( this.app );
+
+
+
+(function( $, joey, app ) {
+
+	var ui = app.ns("ui");
+
+	ui.Button = ui.AbstractWidget.extend({
+		defaults : {
+			label: "",                 // the label text
+			disabled: false,           // create a disabled button
+			autoDisable: false         // automatically disable the button when clicked
+		},
+
+		_baseCls: "uiButton",
+
+		init: function(parent) {
+			this._super();
+			this.el = $.joey(this.button_template())
+				.bind("click", this.click_handler);
+			this.config.disabled && this.disable();
+			this.attach( parent );
+		},
+
+		click_handler: function(jEv) {
+			if(! this.disabled) {
+				this.fire("click", jEv, this);
+				this.config.autoDisable && this.disable();
+			}
+		},
+
+		enable: function() {
+			this.el.removeClass("disabled");
+			this.disabled = false;
+			return this;
+		},
+
+		disable: function(disable) {
+			if(disable === false) {
+					return this.enable();
+			}
+			this.el.addClass("disabled");
+			this.disabled = true;
+			return this;
+		},
+
+		button_template: function() { return (
+			{ tag: 'BUTTON', type: 'button', id: this.id(), cls: this._baseCls, children: [
+				{ tag: 'DIV', cls: 'uiButton-content', children: [
+					{ tag: 'DIV', cls: 'uiButton-label', text: this.config.label }
+				] }
+			] }
+		); }
+	});
+
+})( this.jQuery, this.joey, this.app );
+
+(function( $, app ) {
+
+	var ui = app.ns("ui");
+
+	ui.MenuButton = app.ui.Button.extend({
+		defaults: {
+			menu: null
+		},
+		_baseCls: "uiButton uiMenuButton",
+		init: function(parent) {
+			this._super(parent);
+			this.menu = this.config.menu;
+			this.on("click", this.openMenu_handler);
+			this.menu.on("open", function() { this.el.addClass("active"); }.bind(this));
+			this.menu.on("close", function() { this.el.removeClass("active"); }.bind(this));
+		},
+		openMenu_handler: function(jEv) {
+			this.menu && this.menu.open(jEv);
+		}
+	});
+
+})( this.jQuery, this.app );
+
+(function( $, app ) {
+
+	var ui = app.ns("ui");
+
+	ui.SplitButton = ui.AbstractWidget.extend({
+		defaults: {
+			items: [],
+			label: ""
+		},
+		_baseCls: "uiSplitButton",
+		init: function( parent ) {
+			this._super( parent );
+			this.value = null;
+			this.button = new ui.Button({
+				label: this.config.label,
+				onclick: this._click_handler
+			});
+			this.menu = new ui.SelectMenuPanel({
+				value: this.config.value,
+				items: this._getItems(),
+				onSelect: this._select_handler
+			});
+			this.menuButton = new ui.MenuButton({
+				label: "\u00a0",
+				menu: this.menu
+			});
+			this.el = $.joey(this._main_template());
+		},
+		remove: function() {
+			this.menu.remove();
+		},
+		disable: function() {
+			this.button.disable();
+		},
+		enable: function() {
+			this.button.enable();
+		},
+		_click_handler: function() {
+			this.fire("click", this, { value: this.value } );
+		},
+		_select_handler: function( panel, event ) {
+			this.fire( "select", this, event );
+		},
+		_getItems: function() {
+			return this.config.items;
+		},
+		_main_template: function() {
+			return { tag: "DIV", cls: this._baseCls, children: [
+				this.button, this.menuButton
+			] };
+		}
+	});
+
+})( this.jQuery, this.app );
+
+(function( $, app, i18n ) {
+
+	var ui = app.ns("ui");
+
+	ui.RefreshButton = ui.SplitButton.extend({
+		defaults: {
+			timer: -1
+		},
+		init: function( parent ) {
+			this.config.label = i18n.text("General.RefreshResults");
+			this._super( parent );
+			this.set( this.config.timer );
+		},
+		set: function( value ) {
+			this.value = value;
+			window.clearInterval( this._timer );
+			if( this.value > 0 ) {
+				this._timer = window.setInterval( this._refresh_handler, this.value );
+			}
+		},
+		_click_handler: function() {
+			this._refresh_handler();
+		},
+		_select_handler: function( el, event ) {
+			this.set( event.value );
+			this.fire("change", this );
+		},
+		_refresh_handler: function() {
+			this.fire("refresh", this );
+		},
+		_getItems: function() {
+			return [
+				{ text: i18n.text("General.ManualRefresh"), value: -1 },
+				{ text: i18n.text("General.RefreshQuickly"), value: 100 },
+				{ text: i18n.text("General.Refresh5seconds"), value: 5000 },
+				{ text: i18n.text("General.Refresh1minute"), value: 60000 }
+			];
+		}
+	});
+
+})( this.jQuery, this.app, this.i18n );
+
+(function( $, app ) {
+
+	var ui = app.ns("ui");
+
+	ui.Toolbar = ui.AbstractWidget.extend({
+		defaults: {
+			label: "",
+			left: [],
+			right: []
+		},
+		init: function(parent) {
+			this._super();
+			this.el = $.joey(this._main_template());
+		},
+		_main_template: function() {
+			return { tag: "DIV", cls: "uiToolbar", children: [
+				{ tag: "DIV", cls: "pull-left", children: [
+					{ tag: "H2", text: this.config.label }
+				].concat(this.config.left) },
+				{ tag: "DIV", cls: "pull-right", children: this.config.right }
+			]};
+		}
+	});
+
+})( this.jQuery, this.app );
+
+(function( $, app ) {
+
+	var ui = app.ns("ui");
+
+	ui.AbstractPanel = ui.AbstractWidget.extend({
+		defaults: {
+			body: null,            // initial content of the body
+			modal: true,           // create a modal panel - creates a div that blocks interaction with page
+			height: 'auto',        // panel height
+			width: 400,            // panel width (in pixels)
+			open: false,           // show the panel when it is created
+			parent: 'BODY',        // node that panel is attached to
+			autoRemove: false      // remove the panel from the dom and destroy it when the widget is closed
+		},
+		shared: {  // shared data for all instances of ui.Panel and decendants
+			stack: [], // array of all open panels
+			modal: $( { tag: "DIV", id: "uiModal", css: { opacity: 0.2, position: "absolute", top: "0px", left: "0px" } } )
+		},
+		init: function() {
+			this._super();
+		},
+		open: function( ev ) {
+			this.el
+				.css( { visibility: "hidden" } )
+				.appendTo( this.config.parent )
+				.css( this._getPosition( ev ) )
+				.css( { zIndex: (this.shared.stack.length ? (+this.shared.stack[this.shared.stack.length - 1].el.css("zIndex") + 10) : 100) } )
+				.css( { visibility: "visible", display: "block" } );
+			this.shared.stack.remove(this);
+			this.shared.stack.push(this);
+			this._setModal();
+			$(document).bind("keyup", this._close_handler );
+			this.fire("open", { source: this, event: ev } );
+			return this;
+		},
+		close: function() {
+			var index = this.shared.stack.indexOf(this);
+			if(index !== -1) {
+				this.shared.stack.splice(index, 1);
+				this.el.css( { left: "-2999px" } ); // move the dialog to the left rather than hiding to prevent ie6 rendering artifacts
+				this._setModal();
+				this.fire("close", this );
+				if(this.config.autoRemove) {
+					this.remove();
+				}
+			}
+			return this;
+		},
+		// close the panel and remove it from the dom, destroying it (you can not reuse the panel after calling remove)
+		remove: function() {
+			this.close();
+			$(document).unbind("keyup", this._close_handler );
+			this._super();
+		},
+		// starting at the top of the stack, find the first panel that wants a modal and put it just underneath, otherwise remove the modal
+		_setModal: function() {
+			for(var stackPtr = this.shared.stack.length - 1; stackPtr >= 0; stackPtr--) {
+				if(this.shared.stack[stackPtr].config.modal) {
+					this.shared.modal
+						.appendTo( document.body )
+						.css( { zIndex: this.shared.stack[stackPtr].el.css("zIndex") - 5 } )
+						.css( $(document).vSize().asSize() );
+					return;
+				}
+			}
+			this.shared.modal.remove(); // no panels that want a modal were found
+		},
+		_getPosition: function() {
+			return $(window).vSize()                        // get the current viewport size
+				.sub(this.el.vSize())                         // subtract the size of the panel
+				.mod(function(s) { return s / 2; })           // divide by 2 (to center it)
+				.add($(document).vScroll())                   // add the current scroll offset
+				.mod(function(s) { return Math.max(5, s); })  // make sure the panel is not off the edge of the window
+				.asOffset();                                  // and return it as a {top, left} object
+		},
+		_close_handler: function( ev ) {
+			if( ev.type === "keyup" && ev.keyCode !== 27) { return; } // press esc key to close
+			$(document).unbind("keyup", this._close_handler);
+			this.close( ev );
+		}
+	});
+
+})( this.jQuery, this.app );
+
+(function( $, app ) {
+
+	var ui = app.ns("ui");
+
+	ui.DraggablePanel = ui.AbstractPanel.extend({
+		defaults: {
+	//		title: ""   // (required) text for the panel title
+		},
+
+		_baseCls: "uiPanel",
+
+		init: function() {
+			this._super();
+			this.body = $(this._body_template());
+			this.title = $(this._title_template());
+			this.el = $.joey( this._main_template() );
+			this.el.css( { width: this.config.width } );
+			this.dd = new app.ux.DragDrop({
+				pickupSelector: this.el.find(".uiPanel-titleBar"),
+				dragObj: this.el
+			});
+			// open the panel if set in configuration
+			this.config.open && this.open();
+		},
+
+		setBody: function(body) {
+				this.body.empty().append(body);
+		},
+		_body_template: function() { return { tag: "DIV", cls: "uiPanel-body", css: { height: this.config.height + (this.config.height === 'auto' ? "" : "px" ) }, children: [ this.config.body ] }; },
+		_title_template: function() { return { tag: "SPAN", cls: "uiPanel-title", text: this.config.title }; },
+		_main_template: function() { return (
+			{ tag: "DIV", id: this.id(), cls: this._baseCls, children: [
+				{ tag: "DIV", cls: "uiPanel-titleBar", children: [
+					{ tag: "DIV", cls: "uiPanel-close", onclick: this._close_handler, text: "x" },
+					this.title
+				]},
+				this.body
+			] }
+		); }
+	});
+
+})( this.jQuery, this.app );
+
+(function( app ) {
+
+	var ui = app.ns("ui");
+
+	ui.InfoPanel = ui.DraggablePanel.extend({
+		_baseCls: "uiPanel uiInfoPanel"
+	});
+
+})( this.app );
+
+(function( app ) {
+
+	var ui = app.ns("ui");
+
+	ui.DialogPanel = ui.DraggablePanel.extend({
+		_commit_handler: function(jEv) {
+			this.fire("commit", this, { jEv: jEv });
+		},
+		_main_template: function() {
+			var t = this._super();
+			t.children.push(this._actionsBar_template());
+			return t;
+		},
+		_actionsBar_template: function() {
+			return { tag: "DIV", cls: "pull-right", children: [
+				new app.ui.Button({ label: "Cancel", onclick: this._close_handler }),
+				new app.ui.Button({ label: "OK", onclick: this._commit_handler })
+			]};
+		}
+	});
+
+})( this.app );
+
+(function( app ) {
+
+	var ui = app.ns("ui");
+
+	ui.MenuPanel = ui.AbstractPanel.extend({
+		defaults: {
+			items: [],		// (required) an array of menu items
+			modal: false
+		},
+		_baseCls: "uiMenuPanel",
+		init: function() {
+			this._super();
+			this.el = $(this._main_template());
+		},
+		open: function(jEv) {
+			this._super(jEv);
+			var cx = this; setTimeout(function() { $(document).bind("click", cx._close_handler); }, 50);
+		},
+		_getItems: function() {
+			return this.config.items;
+		},
+		_close_handler: function(jEv) {
+			this._super(jEv);
+			$(document).unbind("click", this._close_handler);
+		},
+		_main_template: function() {
+			return { tag: "DIV", cls: this._baseCls, children: this._getItems().map(this._menuItem_template, this) };
+		},
+		_menuItem_template: function(item) {
+			var dx = item.disabled ? { onclick: function() {} } : {};
+			return { tag: "LI", cls: "uiMenuPanel-item" + (item.disabled ? " disabled" : "") + (item.selected ? " selected" : ""), children: [ $.extend({ tag: "DIV", cls: "uiMenuPanel-label" }, item, dx ) ] };
+		},
+		_getPosition: function(jEv) {
+			var right = !! $(jEv.target).parents(".pull-right").length;
+			var parent = $(jEv.target).closest("BUTTON");
+			return parent.vOffset()
+				.addY(parent.vSize().y)
+				.addX( right ? parent.vSize().x - this.el.vOuterSize().x : 0 )
+				.asOffset();
+		}
+	});
+
+})( this.app );
+
+(function( app ) {
+
+	var ui = app.ns("ui");
+
+	ui.SelectMenuPanel = ui.MenuPanel.extend({
+		defaults: {
+			items: [],		// (required) an array of menu items
+			value: null
+		},
+		_baseCls: "uiSelectMenuPanel uiMenuPanel",
+		init: function() {
+			this.value = this.config.value;
+			this._super();
+		},
+		_getItems: function() {
+			return this.config.items.map( function( item ) {
+				return {
+					text: item.text,
+					selected: this.value === item.value,
+					onclick: function( jEv ) {
+						var el = $( jEv.target ).closest("LI");
+						el.parent().children().removeClass("selected");
+						el.addClass("selected");
+						this.fire( "select", this, { value: item.value } );
+						this.value = item.value;
+					}.bind(this)
+				};
+			}, this );
+
+		}
+	});
+
+})( this.app );
+
+( function( $, app ) {
+
+	var ui = app.ns("ui");
+
+	ui.Table = ui.AbstractWidget.extend({
+		defaults: {
+			store: null, // (required) implements interface app.data.DataSourceInterface
+			height: 0,
+			width: 0
+		},
+		_baseCls: "uiTable",
+		init: function(parent) {
+			this._super();
+			this.initElements(parent);
+			this.config.store.on("data", this._data_handler);
+		},
+		attach: function(parent) {
+			if(parent) {
+				this._super(parent);
+				this._reflow();
+			}
+		},
+		initElements: function(parent) {
+			this.el = $.joey(this._main_template());
+			this.body = this.el.find(".uiTable-body");
+			this.headers = this.el.find(".uiTable-headers");
+			this.tools = this.el.find(".uiTable-tools");
+			this.attach( parent );
+		},
+		_data_handler: function(store) {
+			this.tools.text(store.summary);
+			this.headers.empty().append(this._header_template(store.columns));
+			this.body.empty().append(this._body_template(store.data, store.columns));
+			this._reflow();
+		},
+		_reflow: function() {
+			var firstCol = this.body.find("TR:first TH.uiTable-header-cell > DIV"),
+					headers = this.headers.find("TR:first TH.uiTable-header-cell > DIV");
+			for(var i = 0; i < headers.length; i++) {
+				$(headers[i]).width( $(firstCol[i]).width() );
+			}
+			this._scroll_handler();
+		},
+		_scroll_handler: function(ev) {
+			this.el.find(".uiTable-headers").scrollLeft(this.body.scrollLeft());
+		},
+		_dataClick_handler: function(ev) {
+			var row = $(ev.target).closest("TR");
+			if(row.length) {
+				this.fire("rowClick", this, { row: row } );
+			}
+		},
+		_headerClick_handler: function(ev) {
+			var header = $(ev.target).closest("TH.uiTable-header-cell");
+			if(header.length) {
+				this.fire("headerClick", this, { header: header, column: header.data("column"), dir: header.data("dir") });
+			}
+		},
+		_main_template: function() {
+			return { tag: "DIV", id: this.id(), css: { width: this.config.width + "px" }, cls: this._baseCls, children: [
+				{ tag: "DIV", cls: "uiTable-tools" },
+				{ tag: "DIV", cls: "uiTable-headers", onclick: this._headerClick_handler },
+				{ tag: "DIV", cls: "uiTable-body",
+					onclick: this._dataClick_handler,
+					onscroll: this._scroll_handler,
+					css: { height: this.config.height + "px", width: this.config.width + "px" }
+				}
+			] };
+		},
+		_header_template: function(columns) {
+			var ret = { tag: "TABLE", children: [ this._headerRow_template(columns) ] };
+			ret.children[0].children.push(this._headerEndCap_template());
+			return ret;
+		},
+		_headerRow_template: function(columns) {
+			return { tag: "TR", cls: "uiTable-header-row", children: columns.map(function(column) {
+				var dir = ((this.config.store.sort.column === column) && this.config.store.sort.dir) || "none";
+				return { tag: "TH", data: { column: column, dir: dir }, cls: "uiTable-header-cell" + ((dir !== "none") ? " uiTable-sort" : ""), children: [
+					{ tag: "DIV", children: [
+						{ tag: "DIV", cls: "uiTable-headercell-menu", text: dir === "asc" ? "\u25b2" : "\u25bc" },
+						{ tag: "DIV", cls: "uiTable-headercell-text", text: column }
+					]}
+				]};
+			}, this)};
+		},
+		_headerEndCap_template: function() {
+			return { tag: "TH", cls: "uiTable-headerEndCap", children: [ { tag: "DIV" } ] };
+		},
+		_body_template: function(data, columns) {
+			return { tag: "TABLE", children: []
+				.concat(this._headerRow_template(columns))
+				.concat(data.map(function(row) {
+					return { tag: "TR", data: { row: row }, cls: "uiTable-row", children: columns.map(function(column){
+						return { tag: "TD", cls: "uiTable-cell", children: [ { tag: "DIV", text: (row[column] || "").toString() } ] };
+					})};
+				}))
+			};
+		}
+
+	});
+
+})( this.jQuery, this.app );
+
+( function( $, app, joey ) {
+
+	var ui = app.ns("ui");
+
+	var CELL_SEPARATOR = ",";
+	var CELL_QUOTE = '"';
+	var LINE_SEPARATOR = "\r\n";
+
+	ui.CSVTable = ui.AbstractWidget.extend({
+		defaults: {
+			results: null
+		},
+		_baseCls: "uiCSVTable",
+		init: function( parent ) {
+			this._super();
+			var results = this.config.results.hits.hits;
+			var columns = this._parseResults( results );
+			this._downloadButton = new ui.Button({
+				label: "Generate Download Link",
+				onclick: this._downloadLinkGenerator_handler
+			});
+			this._downloadLink = $.joey( { tag: "A", text: "download", });
+			this._downloadLink.hide();
+			this._csvText = this._csv_template( columns, results );
+			this.el = $.joey( this._main_template() );
+			this.attach( parent );
+		},
+		_downloadLinkGenerator_handler: function() {
+			var csvData = new Blob( [ this._csvText ], { type: 'text/csv' });
+			var csvURL = URL.createObjectURL( csvData );
+			this._downloadLink.attr( "href", csvURL );
+			this._downloadLink.show();
+		},
+		_parseResults: function( results ) {
+			var columnPaths = {};
+			(function parse( path, obj ) {
+				if( obj instanceof Array ) {
+					for( var i = 0; i < obj.length; i++ ) {
+						parse( path, obj[i] );
+					}
+				} else if( typeof obj === "object" ) {
+					for( var prop in obj ) {
+						parse( path + "." + prop, obj[ prop ] );
+					}
+				} else {
+					columnPaths[ path ] = true;
+				}
+			})( "root", results );
+			var columns = [];
+			for( var column in columnPaths ) {
+				columns.push( column.split(".").slice(1) );
+			}
+			return columns;
+		},
+		_main_template: function() { return (
+			{ tag: "DIV", cls: this._baseCls, id: this.id(), children: [
+				this._downloadButton,
+				this._downloadLink,
+				{ tag: "PRE", text: this._csvText }
+			] }
+		); },
+		_csv_template: function( columns, results ) {
+			return this._header_template( columns ) + LINE_SEPARATOR + this._results_template( columns, results );
+		},
+		_header_template: function( columns ) {
+			return columns.map( function( column ) {
+				return column.join(".");
+			}).join( CELL_SEPARATOR );
+		},
+		_results_template: function( columns, results ) {
+			return results.map( function( result ) {
+				return columns.map( function( column ) {
+					var l = 0,
+						ptr = result;
+					while( l !== column.length && ptr != null ) {
+						ptr = ptr[ column[ l++ ] ];
+					}
+					return ( ptr == null ) ? "" : ( CELL_QUOTE + ptr.toString().replace(/"/g, '""') + CELL_QUOTE );
+				}).join( CELL_SEPARATOR );
+			}).join( LINE_SEPARATOR );
+		}
+	});
+
+})( this.jQuery, this.app, this.joey );
+
+(function( $, app ) {
+
+	var ui = app.ns("ui");
+
+	ui.JsonPretty = ui.AbstractWidget.extend({
+		defaults: {
+			obj: null
+		},
+		init: function(parent) {
+			this._super();
+			this.el = $(this._main_template());
+			this.attach(parent);
+			this.el.click(this._click_handler);
+		},
+		
+		_click_handler: function(jEv) {
+			var t = $(jEv.target).closest(".uiJsonPretty-name").closest("LI");
+			if(t.length === 0 || t.parents(".uiJsonPretty-minimised").length > 0) { return; }
+			t.toggleClass("uiJsonPretty-minimised");
+			jEv.stopPropagation();
+		},
+		
+		_main_template: function() {
+			try {
+					return { tag: "DIV", cls: "uiJsonPretty", children: this.pretty.parse(this.config.obj) };
+			}	catch (error) {
+					throw "JsonPretty error: " + error.message;
+			}
+		},
+		
+		pretty: { // from https://github.com/RyanAmos/Pretty-JSON/blob/master/pretty_json.js
+			"expando" : function(value) {
+				return (value && (/array|object/i).test(value.constructor.name)) ? "expando" : "";
+			},
+			"parse": function (member) {
+				return this[(member == null) ? 'null' : member.constructor.name.toLowerCase()](member);
+			},
+			"null": function (value) {
+				return this['value']('null', 'null');
+			},
+			"array": function (value) {
+				var results = [];
+				var lastItem = value.length - 1;
+				value.forEach(function( v, i ) {
+					results.push({ tag: "LI", cls: this.expando(v), children: [ this['parse'](v) ] });
+					if( i !== lastItem ) {
+						results.push(",");
+					}
+				}, this);
+				return [ "[ ", ((results.length > 0) ? { tag: "UL", cls: "uiJsonPretty-array", children: results } : null), "]" ];
+			},
+			"object": function (value) {
+				var results = [];
+				var keys = Object.keys( value );
+				var lastItem = keys.length - 1;
+				keys.forEach( function( key, i ) {
+					var children = [ this['value']( 'name', '"' + key + '"' ), ": ", this['parse']( value[ key ]) ];
+					if( i !== lastItem ) {
+						children.push(",");
+					}
+					results.push( { tag: "LI", cls: this.expando( value[ key ] ), children: children } );
+				}, this);
+				return [ "{ ", ((results.length > 0) ? { tag: "UL", cls: "uiJsonPretty-object", children: results } : null ),  "}" ];
+			},
+			"number": function (value) {
+				return this['value']('number', value.toString());
+			},
+			"string": function (value) {
+				if (/^(http|https|file):\/\/[^\s]+$/.test(value)) {
+					return this['link']( value );
+				} else {
+					return this['value']('string', '"' + value.toString() + '"');
+				}
+			},
+			"boolean": function (value) {
+				return this['value']('boolean', value.toString());
+			},
+			"link": function( value ) {
+					return this['value']("string", { tag: "A", href: value, target: "_blank", text: '"' + value + '"' } );
+			},
+			"value": function (type, value) {
+				if (/^(http|https|file):\/\/[^\s]+$/.test(value)) {
+				}
+				return { tag: "SPAN", cls: "uiJsonPretty-" + type, text: value };
+			}
+		}
+	});
+
+})( this.jQuery, this.app );
+
+(function( $, app ) {
+
+	var ui = app.ns("ui");
+	var ut = app.ns("ut");
+
+	ui.PanelForm = ui.AbstractWidget.extend({
+		defaults: {
+			fields: null	// (required) instanceof app.ux.FieldCollection
+		},
+		init: function(parent) {
+			this._super();
+			this.el = $.joey(this._main_template());
+			this.attach( parent );
+		},
+		_main_template: function() {
+			return { tag: "DIV", id: this.id(), cls: "uiPanelForm", children: this.config.fields.fields.map(this._field_template, this) };
+		},
+		_field_template: function(field) {
+			return { tag: "LABEL", cls: "uiPanelForm-field", children: [
+				{ tag: "DIV", cls: "uiPanelForm-label", children: [ field.label, ut.require_template(field) ] },
+				field
+			]};
+		}
+	});
+
+})( this.jQuery, this.app );
+
+(function( app ){
+
+	var ui = app.ns("ui");
+
+	ui.HelpPanel = ui.InfoPanel.extend({
+		defaults: {
+			ref: "",
+			open: true,
+			autoRemove: true,
+			modal: false,
+			width: 500,
+			height: 450,
+			title: i18n.text("General.Help")
+		},
+		init: function() {
+			this._super();
+			this.body.append(i18n.text(this.config.ref));
+		}
+	});
+
+})( this.app );
+
+(function( app ) {
+
+	var ui = app.ns("ui");
+
+	ui.JsonPanel = ui.InfoPanel.extend({
+		defaults: {
+			json: null, // (required)
+			modal: false,
+			open: true,
+			autoRemove: true,
+			height: 500,
+			width: 600
+		},
+
+		_baseCls: "uiPanel uiInfoPanel uiJsonPanel",
+
+		_body_template: function() {
+			var body = this._super();
+			body.children = [ new ui.JsonPretty({ obj: this.config.json }) ];
+			return body;
+		}
+	});
+
+})( this.app );
+
+(function( $, app, i18n ) {
+
+	var ui = app.ns("ui");
+
+	ui.SidebarSection = ui.AbstractWidget.extend({
+		defaults: {
+			title: "",
+			help: null,
+			body: null,
+			open: false
+		},
+		init: function() {
+			this._super();
+			this.el = $.joey( this._main_template() );
+			this.body = this.el.children(".uiSidebarSection-body");
+			this.config.open && ( this.el.addClass("shown") && this.body.css("display", "block") );
+		},
+		_showSection_handler: function( ev ) {
+			var shown = $( ev.target ).closest(".uiSidebarSection")
+				.toggleClass("shown")
+					.children(".uiSidebarSection-body").slideToggle(200, function() { this.fire("animComplete", this); }.bind(this))
+				.end()
+				.hasClass("shown");
+			this.fire(shown ? "show" : "hide", this);
+		},
+		_showHelp_handler: function( ev ) {
+			new ui.HelpPanel({ref: this.config.help});
+			ev.stopPropagation();
+		},
+		_main_template: function() { return (
+			{ tag: "DIV", cls: "uiSidebarSection", children: [
+				(this.config.title && { tag: "DIV", cls: "uiSidebarSection-head", onclick: this._showSection_handler, children: [
+					this.config.title,
+					( this.config.help && { tag: "SPAN", cls: "uiSidebarSection-help pull-right", onclick: this._showHelp_handler, text: i18n.text("General.HelpGlyph") } )
+				] }),
+				{ tag: "DIV", cls: "uiSidebarSection-body", children: [ this.config.body ] }
+			] }
+		); }
+	});
+
+})( this.jQuery, this.app, this.i18n );
+
+(function( $, app ) {
+
+	var ui = app.ns("ui");
+
+	ui.ResultTable = ui.Table.extend({
+		defaults: {
+			width: 500,
+			height: 400
+		},
+
+		init: function() {
+			this._super();
+			this.on("rowClick", this._showPreview_handler);
+			this.selectedRow = null;
+			$(document).bind("keydown", this._nav_handler);
+		},
+		remove: function() {
+			$(document).unbind("keydown", this._nav_handler);
+			this._super();
+		},
+		attach: function(parent) {
+			if(parent) {
+				var height = parent.height() || ( $(document).height() - parent.offset().top - 41 ); // 41 = height in px of .uiTable-tools + uiTable-header
+				var width = parent.width();
+				this.el.width( width );
+				this.body.width( width ).height( height );
+			}
+			this._super(parent);
+		},
+		showPreview: function(row) {
+			row.addClass("selected");
+			this.preview = new app.ui.JsonPanel({
+				title: i18n.text("Browser.ResultSourcePanelTitle"),
+				json: row.data("row")._source,
+				onClose: function() { row.removeClass("selected"); }
+			});
+		},
+		_nav_handler: function(jEv) {
+			if(jEv.keyCode !== 40 && jEv.keyCode !== 38) {
+				return;
+			}
+			this.selectedRow && this.preview && this.preview.remove();
+			if(jEv.keyCode === 40) { // up arrow
+				this.selectedRow = this.selectedRow ? this.selectedRow.next("TR") : this.body.find("TR:first");
+			} else if(jEv.keyCode === 38) { // down arrow
+				this.selectedRow = this.selectedRow ? this.selectedRow.prev("TR") : this.body.find("TR:last");
+			}
+			this.selectedRow && this.showPreview(this.selectedRow);
+		},
+		_showPreview_handler: function(obj, data) {
+			this.showPreview(this.selectedRow = data.row);
+		}
+	});
+
+})( this.jQuery, this.app );
+
+(function( $, app, i18n ) {
+
+	var ui = app.ns("ui");
+	var ut = app.ns("ut");
+
+	ui.QueryFilter = ui.AbstractWidget.extend({
+		defaults: {
+			metadata: null,   // (required) instanceof app.data.MetaData
+			query: null       // (required) instanceof app.data.Query that the filters will act apon
+		},
+		init: function() {
+			this._super();
+			this.metadata = this.config.metadata;
+			this.query = this.config.query;
+			this.el = $(this._main_template());
+		},
+		helpTypeMap: {
+			"date" : "QueryFilter.DateRangeHelp"
+		},
+		requestUpdate: function(jEv) {
+			if(jEv && jEv.originalEvent) { // we only want to update on real user interaction not generated events
+				this.query.setPage(1);
+				this.query.query();
+			}
+		},
+		getSpec: function(fieldName) {
+			return this.metadata.fields[fieldName];
+		},
+		_selectAlias_handler: function(jEv) {
+			var indices = (jEv.target.selectedIndex === 0) ? [] : this.metadata.getIndices($(jEv.target).val());
+			$(".uiQueryFilter-index").each(function(i, el) {
+				var jEl = $(el);
+				if(indices.contains(jEl.text()) !== jEl.hasClass("selected")) {
+					jEl.click();
+				}
+			});
+			this.requestUpdate(jEv);
+		},
+		_selectIndex_handler: function(jEv) {
+			var jEl = $(jEv.target).closest(".uiQueryFilter-index");
+			jEl.toggleClass("selected");
+			var selected = jEl.hasClass("selected");
+			this.query.setIndex(jEl.text(), selected);
+			if(selected) {
+				var types = this.metadata.getTypes(this.query.indices);
+				this.el.find("DIV.uiQueryFilter-type.selected").each(function(n, el) {
+					if(! types.contains($(el).text())) {
+						$(el).click();
+					}
+				});
+			}
+			this.requestUpdate(jEv);
+		},
+		_selectType_handler: function(jEv) {
+			var jEl = $(jEv.target).closest(".uiQueryFilter-type");
+			jEl.toggleClass("selected");
+			var type = jEl.text(), selected = jEl.hasClass("selected");
+			this.query.setType(type, selected);
+			if(selected) {
+				var indices = this.metadata.types[type].indices;
+				// es throws a 500 if searching an index for a type it does not contain - so we prevent that
+				this.el.find("DIV.uiQueryFilter-index.selected").each(function(n, el) {
+					if(! indices.contains($(el).text())) {
+						$(el).click();
+					}
+				});
+				// es throws a 500 if you specify types from different indices with _all
+				jEl.siblings(".uiQueryFilter-type.selected").forEach(function(el) {
+					if(this.metadata.types[$(el).text()].indices.intersection(indices).length === 0) {
+						$(el).click();
+					}
+				}, this);
+			}
+			this.requestUpdate(jEv);
+		},
+		_openFilter_handler: function(section) {
+			var field_name = section.config.title;
+			if(! section.loaded) {
+				var spec = this.getSpec(field_name);
+				if(spec.core_type === "string") {
+					section.body.append(this._textFilter_template(spec));
+				} else if(spec.core_type === "date") {
+					section.body.append(this._dateFilter_template(spec));
+					section.body.append(new ui.DateHistogram({ printEl: section.body.find("INPUT"), cluster: this.cluster, query: this.query, spec: spec }));
+				} else if(spec.core_type === "number") {
+					section.body.append(this._numericFilter_template(spec));
+				} else if(spec.core_type === 'boolean') {
+					section.body.append(this._booleanFilter_template(spec));
+				} else if (spec.core_type === 'multi_field') {
+					section.body.append(this._multiFieldFilter_template(section, spec));
+				} 
+				section.loaded = true;
+			}
+			section.on("animComplete", function(section) { section.body.find("INPUT").focus(); });
+		},
+		_textFilterChange_handler: function(jEv) {
+			var jEl = $(jEv.target).closest("INPUT");
+			var val = jEl.val();
+			var spec = jEl.data("spec");
+			var uqids = jEl.data("uqids") || [];
+			uqids.forEach(function(uqid) {
+				uqid && this.query.removeClause(uqid);
+			}, this);
+			if(val.length) {
+				if(jEl[0] === document.activeElement && jEl[0].selectionStart === jEl[0].selectionEnd) {
+					val = val.replace(new RegExp("(.{"+jEl[0].selectionStart+"})"), "$&*");
+				}
+				uqids = val.split(/\s+/).map(function(term) {
+					// Figure out the actual field name - needed for multi_field, because
+					// querying for "field.field" will not work. Simply "field" must be used
+					// if nothing is aliased.
+					var fieldNameParts = spec.field_name.split('.');
+					var part = fieldNameParts.length - 1;
+					var name = fieldNameParts[part];
+					while (part >= 1) {
+						if (fieldNameParts[part] !== fieldNameParts[part - 1]) {
+							name = fieldNameParts[part - 1] + "." + name;
+						}
+						part--;
+					}
+					return term && this.query.addClause(term, name, "wildcard", "must");
+				}, this);
+			}
+			jEl.data("uqids", uqids);
+			this.requestUpdate(jEv);
+		},
+		_dateFilterChange_handler: function(jEv) {
+			var jEl = $(jEv.target).closest("INPUT");
+			var val = jEl.val();
+			var spec = jEl.data("spec");
+			var uqid = jEl.data("uqid") || null;
+			var range = window.dateRangeParser.parse(val);
+			var lastRange = jEl.data("lastRange");
+			if(!range || (lastRange && lastRange.start === range.start && lastRange.end === range.end)) {
+				return;
+			}
+			uqid && this.query.removeClause(uqid);
+			if((range.start && range.end) === null) {
+				uqid = null;
+			} else {
+				var value = {};
+				if( range.start ) {
+					value["gte"] = range.start;
+				}
+				if( range.end ) {
+					value["lte"] = range.end;
+				}
+				uqid = this.query.addClause( value, spec.field_name, "range", "must");
+			}
+			jEl.data("lastRange", range);
+			jEl.siblings(".uiQueryFilter-rangeHintFrom")
+				.text(i18n.text("QueryFilter.DateRangeHint.from", range.start && new Date(range.start).toUTCString()));
+			jEl.siblings(".uiQueryFilter-rangeHintTo")
+				.text(i18n.text("QueryFilter.DateRangeHint.to", range.end && new Date(range.end).toUTCString()));
+			jEl.data("uqid", uqid);
+			this.requestUpdate(jEv);
+		},
+		_numericFilterChange_handler: function(jEv) {
+			var jEl = $(jEv.target).closest("INPUT");
+			var val = jEl.val();
+			var spec = jEl.data("spec");
+			var uqid = jEl.data("uqid") || null;
+			var lastRange = jEl.data("lastRange");
+			var range = (function(val) {
+				var ops = val.split(/->|<>|</).map( function(v) { return parseInt(v.trim(), 10); });
+				if(/<>/.test(val)) {
+					return { gte: (ops[0] - ops[1]), lte: (ops[0] + ops[1]) };
+				} else if(/->|</.test(val)) {
+					return { gte: ops[0], lte: ops[1] };
+				} else {
+					return { gte: ops[0], lte: ops[0] };
+				}
+			})(val || "");
+			if(!range || (lastRange && lastRange.lte === range.lte && lastRange.gte === range.gte)) {
+				return;
+			}
+			jEl.data("lastRange", range);
+			uqid && this.query.removeClause(uqid);
+			uqid = this.query.addClause( range, spec.field_name, "range", "must");
+			jEl.data("uqid", uqid);
+			this.requestUpdate(jEv);
+		},
+		_booleanFilterChange_handler: function( jEv ) {
+			var jEl = $(jEv.target).closest("SELECT");
+			var val = jEl.val();
+			var spec = jEl.data("spec");
+			var uqid = jEl.data("uqid") || null;
+			uqid && this.query.removeClause(uqid);
+			if(val === "true" || val === "false") {
+				jEl.data("uqid", this.query.addClause(val, spec.field_name, "term", "must") );
+			}
+			this.requestUpdate(jEv);
+		},
+		_main_template: function() {
+			return { tag: "DIV", id: this.id(), cls: "uiQueryFilter", children: [
+				this._aliasSelector_template(),
+				this._indexSelector_template(),
+				this._typesSelector_template(),
+				this._filters_template()
+			] };
+		},
+		_aliasSelector_template: function() {
+			var aliases = Object.keys(this.metadata.aliases).sort();
+			aliases.unshift( i18n.text("QueryFilter.AllIndices") );
+			return { tag: "DIV", cls: "uiQueryFilter-section uiQueryFilter-aliases", children: [
+				{ tag: "SELECT", onChange: this._selectAlias_handler, children: aliases.map(ut.option_template) }
+			] };
+		},
+		_indexSelector_template: function() {
+			var indices = Object.keys( this.metadata.indices ).sort();
+			return { tag: "DIV", cls: "uiQueryFilter-section uiQueryFilter-indices", children: [
+				{ tag: "HEADER", text: i18n.text("QueryFilter-Header-Indices") },
+				{ tag: "DIV", onClick: this._selectIndex_handler, children: indices.map( function( name ) {
+					return { tag: "DIV", cls: "uiQueryFilter-booble uiQueryFilter-index", text: name };
+				})}
+			] };
+		},
+		_typesSelector_template: function() {
+			var types = Object.keys( this.metadata.types ).sort();
+			return { tag: "DIV", cls: "uiQueryFilter-section uiQueryFilter-types", children: [
+				{ tag: "HEADER", text: i18n.text("QueryFilter-Header-Types") },
+				{ tag: "DIV", onClick: this._selectType_handler, children: types.map( function( name ) {
+					return { tag: "DIV", cls: "uiQueryFilter-booble uiQueryFilter-type", text: name };
+				})}
+			] };
+		},
+		_filters_template: function() {
+			var _metadataFields = this.metadata.fields;
+			var fields = Object.keys( _metadataFields ).sort()
+				.filter(function(d) { return (_metadataFields[d].core_type !== undefined); });
+			return { tag: "DIV", cls: "uiQueryFilter-section uiQueryFilter-filters", children: [
+				{ tag: "HEADER", text: i18n.text("QueryFilter-Header-Fields") },
+				{ tag: "DIV", children: fields.map( function(name ) {
+					return new app.ui.SidebarSection({
+						title: name,
+						help: this.helpTypeMap[this.metadata.fields[ name ].type],
+						onShow: this._openFilter_handler
+					});
+				}, this ) }
+			] };
+		},
+		_textFilter_template: function(spec) {
+			return { tag: "INPUT", data: { spec: spec }, onKeyup: this._textFilterChange_handler };
+		},
+		_dateFilter_template: function(spec) {
+			return { tag: "DIV", children: [
+				{ tag: "INPUT", data: { spec: spec }, onKeyup: this._dateFilterChange_handler },
+				{ tag: "PRE", cls: "uiQueryFilter-rangeHintFrom", text: i18n.text("QueryFilter.DateRangeHint.from", "")},
+				{ tag: "PRE", cls: "uiQueryFilter-rangeHintTo", text: i18n.text("QueryFilter.DateRangeHint.to", "") }
+			]};
+		},
+		_numericFilter_template: function(spec) {
+			return { tag: "INPUT", data: { spec: spec }, onKeyup: this._numericFilterChange_handler };
+		},
+		_booleanFilter_template: function(spec) {
+			return { tag: "SELECT", data: { spec: spec }, onChange: this._booleanFilterChange_handler,
+				children: [ i18n.text("QueryFilter.AnyValue"), "true", "false" ].map( function( val ) {
+					return { tag: "OPTION", value: val, text: val };
+				})
+			};
+		},
+		_multiFieldFilter_template: function(section, spec) {
+			return {
+				tag : "DIV", cls : "uiQueryFilter-subMultiFields", children : acx.eachMap(spec.fields, function(name, data) {
+					if (name === spec.field_name) {
+						section.config.title = spec.field_name + "." + name;
+						return this._openFilter_handler(section);
+					}
+					return new app.ui.SidebarSection({
+						title : data.field_name, help : this.helpTypeMap[data.type], onShow : this._openFilter_handler
+					});
+				}, this)
+			};
+		}	
+	});
+
+})( this.jQuery, this.app, this.i18n );
+
+(function( app ) {
+
+	var ui = app.ns("ui");
+
+	ui.Page = ui.AbstractWidget.extend({
+		show: function() {
+			this.el.show();
+		},
+		hide: function() {
+			this.el.hide();
+		}
+	});
+
+})( this.app );
+(function( $, app, i18n ){
+
+	var ui = app.ns("ui");
+	var data = app.ns("data");
+
+	ui.Browser = ui.Page.extend({
+		defaults: {
+			cluster: null  // (required) instanceof app.services.Cluster
+		},
+		init: function() {
+			this._super();
+			this.cluster = this.config.cluster;
+			this.query = new app.data.Query( { cluster: this.cluster } );
+			this._refreshButton = new ui.Button({
+				label: i18n.text("General.RefreshResults"),
+				onclick: function( btn ) {
+					this.query.query();
+				}.bind(this)
+			});
+			this.el = $(this._main_template());
+			new data.MetaDataFactory({
+				cluster: this.cluster,
+				onReady: function(metadata) {
+					this.metadata = metadata;
+					this.store = new data.QueryDataSourceInterface( { metadata: metadata, query: this.query } );
+					this.queryFilter = new ui.QueryFilter({ metadata: metadata, query: this.query });
+					this.queryFilter.attach(this.el.find("> .uiBrowser-filter") );
+					this.resultTable = new ui.ResultTable( {
+						onHeaderClick: this._changeSort_handler,
+						store: this.store
+					} );
+					this.resultTable.attach( this.el.find("> .uiBrowser-table") );
+					this.updateResults();
+				}.bind(this)
+			});
+		},
+		updateResults: function() {
+			this.query.query();
+		},
+		_changeSort_handler: function(table, wEv) {
+			this.query.setSort(wEv.column, wEv.dir === "desc");
+			this.query.setPage(1);
+			this.query.query();
+		},
+		_main_template: function() {
+			return { tag: "DIV", cls: "uiBrowser", children: [
+				new ui.Toolbar({
+					label: i18n.text("Browser.Title"),
+					left: [ ],
+					right: [ this._refreshButton ]
+				}),
+				{ tag: "DIV", cls: "uiBrowser-filter" },
+				{ tag: "DIV", cls: "uiBrowser-table" }
+			] };
+		}
+	});
+
+})( this.jQuery, this.app, this.i18n );
+
+(function( $, app, i18n, raphael ) {
+
+	var ui = app.ns("ui");
+	var ut = app.ns("ut");
+	var services = app.ns("services");
+
+	ui.AnyRequest = ui.Page.extend({
+		defaults: {
+			cluster: null,       // (required) instanceof app.services.Cluster
+			path: "_search",     // default uri to send a request to
+			query: { query: { match_all: { }}},
+			transform: "  return root;" // default transformer function (does nothing)
+		},
+		init: function(parent) {
+			this._super();
+			this.prefs = services.Preferences.instance();
+			this.history = this.prefs.get("anyRequest-history") || [ { type: "POST", path: this.config.path, query : JSON.stringify(this.config.query), transform: this.config.transform } ];
+			this.el = $.joey(this._main_template());
+			this.base_uriEl = this.el.find("INPUT[name=base_uri]");
+			this.pathEl = this.el.find("INPUT[name=path]");
+			this.typeEl = this.el.find("SELECT[name=method]");
+			this.dataEl = this.el.find("TEXTAREA[name=body]");
+			this.prettyEl = this.el.find("INPUT[name=pretty]");
+			this.transformEl = this.el.find("TEXTAREA[name=transform]");
+			this.asGraphEl = this.el.find("INPUT[name=asGraph]");
+			this.asTableEl = this.el.find("INPUT[name=asTable]");
+			this.asJsonEl = this.el.find("INPUT[name=asJson]");
+			this.cronEl = this.el.find("SELECT[name=cron]");
+			this.outEl = this.el.find("DIV.uiAnyRequest-out");
+			this.errEl = this.el.find("DIV.uiAnyRequest-jsonErr");
+			this.typeEl.val("GET");
+			this.attach(parent);
+			this.setHistoryItem(this.history[this.history.length - 1]);
+		},
+		setHistoryItem: function(item) {
+			this.pathEl.val(item.path);
+			this.typeEl.val(item.type);
+			this.dataEl.val(item.query);
+			this.transformEl.val(item.transform);
+		},
+		_request_handler: function( ev ) {
+			if(! this._validateJson_handler()) {
+				return;
+			}
+			var path = this.pathEl.val(),
+					type = this.typeEl.val(),
+					query = JSON.stringify(JSON.parse(this.dataEl.val())),
+					transform = this.transformEl.val(),
+					base_uri = this.base_uriEl.val();
+			if( ev ) { // if the user click request
+				if(this.timer) {
+					window.clearTimeout(this.timer); // stop any cron jobs
+				}
+				delete this.prevData; // remove data from previous cron runs
+				this.outEl.text(i18n.text("AnyRequest.Requesting"));
+				if( ! /\/$/.test( base_uri )) {
+					base_uri += "/";
+					this.base_uriEl.val( base_uri );
+				}
+				for(var i = 0; i < this.history.length; i++) {
+					if(this.history[i].path === path &&
+						this.history[i].type === type &&
+						this.history[i].query === query &&
+						this.history[i].transform === transform) {
+						this.history.splice(i, 1);
+					}
+				}
+				this.history.push({
+					path: path,
+					type: type,
+					query: query,
+					transform: transform
+				});
+				this.history.slice(250); // make sure history does not get too large
+				this.prefs.set( "anyRequest-history", this.history );
+				this.el.find("UL.uiAnyRequest-history")
+					.empty()
+					.append($( { tag: "UL", children: this.history.map(this._historyItem_template, this) }).children())
+					.children().find(":last-child").each(function(i, j) { j.scrollIntoView(false); }).end()
+					.scrollLeft(0);
+			}
+			this.config.cluster.request({
+				url: base_uri + path,
+				type: type,
+				data: query,
+				success: this._responseWriter_handler,
+				error: this._responseError_handler
+			});
+		},
+		_responseError_handler: function (response) {
+			var obj;
+			try {
+				obj = JSON.parse(response.responseText);
+				if (obj) {
+					this._responseWriter_handler(obj);
+				}
+			} catch (err) {
+			}
+		},
+		_responseWriter_handler: function(data) {
+			this.outEl.empty();
+			try {
+				data = (new Function("root", "prev", this.transformEl.val()))(data, this.prevData)
+			} catch(e) {
+				this.errEl.text(e.message);
+				return;
+			}
+			if(this.asGraphEl.attr("checked")) {
+				var w = this.outEl.width();
+				raphael(this.outEl[0], w - 10, 300)
+					.g.barchart(10, 10, w - 20, 280, [data]);
+			}
+			if(this.asTableEl.attr("checked")) {
+				try {
+					var store = new app.data.ResultDataSourceInterface();
+					this.outEl.append(new app.ui.ResultTable({
+						width: this.outEl.width() - 23,
+						store: store
+					} ) );
+					store.results(data);
+				} catch(e) {
+					this.errEl.text("Results Table Failed: " + e.message);
+				}
+			}
+			if(this.asJsonEl.attr("checked")) {
+				this.outEl.append(new ui.JsonPretty({ obj: data }));
+			}
+			if(this.cronEl.val() > 0) {
+				this.timer = window.setTimeout(function(){
+					this._request_handler();
+				}.bind(this), this.cronEl.val());
+			}
+			this.prevData = data;
+		},
+		_validateJson_handler: function( ev ) {
+			/* if the textarea is empty, we replace its value by an empty JSON object : "{}" and the request goes on as usual */
+			var jsonData = this.dataEl.val().trim();
+			var j;
+			if(jsonData === "") {
+				jsonData = "{}";
+				this.dataEl.val( jsonData );
+			}
+			try {
+				j = JSON.parse(jsonData);
+			} catch(e) {
+				this.errEl.text(e.message);
+				return false;
+			}
+			this.errEl.text("");
+			if(this.prettyEl.attr("checked")) {
+				this.dataEl.val(JSON.stringify(j, null, "  "));
+			}
+			return true;
+		},
+		_historyClick_handler: function( ev ) {
+			var item = $( ev.target ).closest( "LI" ).data( "item" );
+			this.setHistoryItem( item );
+		},
+		_main_template: function() {
+			return { tag: "DIV", cls: "anyRequest", children: [
+				{ tag: "DIV", cls: "uiAnyRequest-request", children: [
+					new app.ui.SidebarSection({
+						open: false,
+						title: i18n.text("AnyRequest.History"),
+						body: { tag: "UL", onclick: this._historyClick_handler, cls: "uiAnyRequest-history", children: this.history.map(this._historyItem_template, this)	}
+					}),
+					new app.ui.SidebarSection({
+						open: true,
+						title: i18n.text("AnyRequest.Query"),
+						body: { tag: "DIV", children: [
+							{ tag: "INPUT", type: "text", name: "base_uri", value: this.config.cluster.config.base_uri },
+							{ tag: "BR" },
+							{ tag: "INPUT", type: "text", name: "path", value: this.config.path },
+							{ tag: "SELECT", name: "method", children: ["POST", "GET", "PUT", "HEAD", "DELETE"].map(ut.option_template) },
+							{ tag: "TEXTAREA", name: "body", rows: 20, text: JSON.stringify(this.config.query) },
+							{ tag: "BUTTON", css: { cssFloat: "right" }, type: "button", children: [ { tag: "B", text: i18n.text("AnyRequest.Request") } ], onclick: this._request_handler },
+							{ tag: "BUTTON", type: "button", text: i18n.text("AnyRequest.ValidateJSON"), onclick: this._validateJson_handler },
+							{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", name: "pretty" }, i18n.text("AnyRequest.Pretty") ] },
+							{ tag: "DIV", cls: "uiAnyRequest-jsonErr" }
+						]}
+					}),
+					new app.ui.SidebarSection({
+						title: i18n.text("AnyRequest.Transformer"),
+						help: "AnyRequest.TransformerHelp",
+						body: { tag: "DIV", children: [
+							{ tag: "CODE", text: "function(root, prev) {" },
+							{ tag: "BR" },
+							{ tag: "TEXTAREA", name: "transform", rows: 5, text: this.config.transform },
+							{ tag: "BR" },
+							{ tag: "CODE", text: "}" }
+						] }
+					}),
+					new app.ui.SidebarSection({
+						title: i18n.text("AnyRequest.RepeatRequest"),
+						body: { tag: "DIV", children: [
+							i18n.text("AnyRequest.RepeatRequestSelect"), " ",
+							{ tag: "SELECT", name: "cron", children: [
+								{ value: 0, text: "do not repeat" },
+								{ value: 1000, text: "second" },
+								{ value: 1000 * 2, text: "2 seconds" },
+								{ value: 1000 * 5, text: "5 seconds" },
+								{ value: 1000 * 20, text: "20 seconds" },
+								{ value: 1000 * 60, text: "minute" },
+								{ value: 1000 * 60 * 10, text: "10 minutes" },
+								{ value: 1000 * 60 * 60, text: "hour" }
+							].map(function(op) { return $.extend({ tag: "OPTION"}, op); }) }
+						] }
+					}),
+					new app.ui.SidebarSection({
+						title: i18n.text("AnyRequest.DisplayOptions"),
+						help: "AnyRequest.DisplayOptionsHelp",
+						body: { tag: "DIV", children: [
+							{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", checked: true, name: "asJson" }, i18n.text("AnyRequest.AsJson") ] },
+							{ tag: "BR" },
+							{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", name: "asGraph" }, i18n.text("AnyRequest.AsGraph") ] },
+							{ tag: "BR" },
+							{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", name: "asTable" }, i18n.text("AnyRequest.AsTable") ] }
+						] }
+					})
+				] },
+				{ tag: "DIV", cls: "uiAnyRequest-out" }
+			] };
+		},
+		_historyItem_template: function(item) {
+			return { tag: "LI", cls: "booble", data: { item: item }, children: [
+				{ tag: "SPAN", text: item.path },
+				" ",
+				{ tag: "EM", text: item.query },
+				" ",
+				{ tag: "SPAN", text: item.transform }
+			] };
+		}
+	});
+	
+})( this.jQuery, this.app, this.i18n, this.Raphael );
+
+(function( app, i18n, joey ) {
+
+	var ui = app.ns("ui");
+	var ut = app.ns("ut");
+
+	ui.NodesView = ui.AbstractWidget.extend({
+		defaults: {
+			interactive: true,
+			aliasRenderer: "list",
+			scaleReplicas: 1,
+			cluster: null,
+			data: null
+		},
+		init: function() {
+			this._super();
+			this.interactive = this.config.interactive;
+			this.cluster = this.config.cluster;
+			this._aliasRenderFunction = {
+				"none": this._aliasRender_template_none,
+				"list": this._aliasRender_template_list,
+				"full": this._aliasRender_template_full
+			}[ this.config.aliasRenderer ];
+			this._styleSheetEl = joey({ tag: "STYLE", text: ".uiNodesView-nullReplica, .uiNodesView-replica { zoom: " + this.config.scaleReplicas + " }" });
+			this.el = $( this._main_template( this.config.data.cluster, this.config.data.indices ) );
+		},
+
+		_newAliasAction_handler: function( index ) {
+			var fields = new app.ux.FieldCollection({
+				fields: [
+					new ui.TextField({ label: i18n.text("AliasForm.AliasName"), name: "alias", require: true })
+				]
+			});
+			var dialog = new ui.DialogPanel({
+				title: i18n.text("AliasForm.NewAliasForIndexName", index.name),
+				body: new ui.PanelForm({ fields: fields }),
+				onCommit: function(panel, args) {
+					if(fields.validate()) {
+						var data = fields.getData();
+						var command = {
+							"actions" : [
+								{ "add" : { "index" : index.name, "alias" : data["alias"] } }
+							]
+						};
+						this.config.cluster.post('_aliases', JSON.stringify(command), function(d) {
+							dialog.close();
+							alert(JSON.stringify(d));
+							this.fire("redraw");
+						}.bind(this) );
+					}
+				}.bind(this)
+			}).open();
+		},
+		_postIndexAction_handler: function(action, index, redraw) {
+			this.cluster.post(encodeURIComponent( index.name ) + "/" + encodeURIComponent( action ), null, function(r) {
+				alert(JSON.stringify(r));
+				redraw && this.fire("redraw");
+			}.bind(this));
+		},
+		_optimizeIndex_handler: function(index) {
+			var fields = new app.ux.FieldCollection({
+				fields: [
+					new ui.TextField({ label: i18n.text("OptimizeForm.MaxSegments"), name: "max_num_segments", value: "1", require: true }),
+					new ui.CheckField({ label: i18n.text("OptimizeForm.ExpungeDeletes"), name: "only_expunge_deletes", value: false }),
+					new ui.CheckField({ label: i18n.text("OptimizeForm.FlushAfter"), name: "flush", value: true }),
+					new ui.CheckField({ label: i18n.text("OptimizeForm.WaitForMerge"), name: "wait_for_merge", value: false })
+				]
+			});
+			var dialog = new ui.DialogPanel({
+				title: i18n.text("OptimizeForm.OptimizeIndex", index.name),
+				body: new ui.PanelForm({ fields: fields }),
+				onCommit: function( panel, args ) {
+					if(fields.validate()) {
+						this.cluster.post(encodeURIComponent( index.name ) + "/_optimize", fields.getData(), function(r) {
+							alert(JSON.stringify(r));
+						});
+						dialog.close();
+					}
+				}.bind(this)
+			}).open();
+		},
+		_testAnalyser_handler: function(index) {
+			this.cluster.get(encodeURIComponent( index.name ) + "/_analyze?text=" + encodeURIComponent( prompt( i18n.text("IndexCommand.TextToAnalyze") ) ), function(r) {
+				alert(JSON.stringify(r, true, "  "));
+			});
+		},
+		_deleteIndexAction_handler: function(index) {
+			if( prompt( i18n.text("AliasForm.DeleteAliasMessage", i18n.text("Command.DELETE"), index.name ) ) === i18n.text("Command.DELETE") ) {
+				this.cluster["delete"](encodeURIComponent( index.name ), null, function(r) {
+					alert(JSON.stringify(r));
+					this.fire("redraw");
+				}.bind(this) );
+			}
+		},
+		_shutdownNode_handler: function(node) {
+			if(prompt( i18n.text("IndexCommand.ShutdownMessage", i18n.text("Command.SHUTDOWN"), node.cluster.name ) ) === i18n.text("Command.SHUTDOWN") ) {
+				this.cluster.post( "_cluster/nodes/" + encodeURIComponent( node.name ) + "/_shutdown", null, function(r) {
+					alert(JSON.stringify(r));
+					this.fire("redraw");
+				}.bind(this));
+			}
+		},
+		_deleteAliasAction_handler: function( index, alias ) {
+			if( confirm( i18n.text("Command.DeleteAliasMessage" ) ) ) {
+				var command = {
+					"actions" : [
+						{ "remove" : { "index" : index.name, "alias" : alias.name } }
+					]
+				};
+				this.config.cluster.post('_aliases', JSON.stringify(command), function(d) {
+					alert(JSON.stringify(d));
+					this.fire("redraw");
+				}.bind(this) );
+			}
+		},
+
+		_replica_template: function(replica) {
+			var r = replica.replica;
+			return { tag: "DIV",
+				cls: "uiNodesView-replica" + (r.primary ? " primary" : "") + ( " state-" + r.state ),
+				text: r.shard.toString(),
+				onclick: function() { new ui.JsonPanel({
+					json: replica.status || r,
+					title: r.index + "/" + r.node + " [" + r.shard + "]" });
+				}
+			};
+		},
+		_routing_template: function(routing) {
+			var cell = { tag: "TD", cls: "uiNodesView-routing" + (routing.open ? "" : " close"), children: [] };
+			for(var i = 0; i < routing.replicas.length; i++) {
+				if(i % routing.max_number_of_shards === 0 && i > 0) {
+					cell.children.push({ tag: "BR" });
+				}
+				if( routing.replicas[i] ) {
+					cell.children.push(this._replica_template(routing.replicas[i]));
+				} else {
+					cell.children.push( { tag: "DIV", cls: "uiNodesView-nullReplica" } );
+				}
+			}
+			return cell;
+		},
+		_nodeControls_template: function( node ) { return (
+			{ tag: "DIV", cls: "uiNodesView-controls", children: [
+				new ui.MenuButton({
+					label: i18n.text("NodeInfoMenu.Title"),
+					menu: new ui.MenuPanel({
+						items: [
+							{ text: i18n.text("NodeInfoMenu.ClusterNodeInfo"), onclick: function() { new ui.JsonPanel({ json: node.cluster, title: node.name });} },
+							{ text: i18n.text("NodeInfoMenu.NodeStats"), onclick: function() { new ui.JsonPanel({ json: node.stats, title: node.name });} }
+						]
+					})
+				}),
+				new ui.MenuButton({
+					label: i18n.text("NodeActionsMenu.Title"),
+					menu: new ui.MenuPanel({
+						items: [
+							{ text: i18n.text("NodeActionsMenu.Shutdown"), onclick: function() { this._shutdownNode_handler(node); }.bind(this) }
+						]
+					})
+				})
+			] }
+		); },
+		_nodeIcon_template: function( node ) {
+			var icon, alt;
+			if( node.name === "Unassigned" ) {
+				icon = "fa-exclamation-triangle";
+				alt = i18n.text( "NodeType.Unassigned" );
+			} else if( node.cluster.settings && "tribe" in node.cluster.settings) {
+				icon = "fa-sitemap";
+				alt = i18n.text("NodeType.Tribe" );
+			} else {
+				icon = "fa-" + (node.master_node ? "star" : "circle") + (node.data_node ? "" : "-o" );
+				alt = i18n.text( node.master_node ? ( node.data_node ? "NodeType.Master" : "NodeType.Coord" ) : ( node.data_node ? "NodeType.Worker" : "NodeType.Client" ) );
+			}
+			return { tag: "TD", title: alt, cls: "uiNodesView-icon", children: [
+				{ tag: "SPAN", cls: "fa fa-2x " + icon }
+			] };
+		},
+		_node_template: function(node) {
+			return { tag: "TR", cls: "uiNodesView-node" + (node.master_node ? " master": ""), children: [
+				this._nodeIcon_template( node ),
+				{ tag: "TH", children: node.name === "Unassigned" ? [
+					{ tag: "H3", text: node.name }
+				] : [
+					{ tag: "H3", text: node.cluster.name },
+					{ tag: "DIV", text: node.cluster.hostname },
+					this.interactive ? this._nodeControls_template( node ) : null
+				] }
+			].concat(node.routings.map(this._routing_template, this))};
+		},
+		_indexHeaderControls_template: function( index ) { return (
+			{ tag: "DIV", cls: "uiNodesView-controls", children: [
+				new ui.MenuButton({
+					label: i18n.text("IndexInfoMenu.Title"),
+					menu: new ui.MenuPanel({
+						items: [
+							{ text: i18n.text("IndexInfoMenu.Status"), onclick: function() { new ui.JsonPanel({ json: index.status, title: index.name }); } },
+							{ text: i18n.text("IndexInfoMenu.Metadata"), onclick: function() { new ui.JsonPanel({ json: index.metadata, title: index.name }); } }
+						]
+					})
+				}),
+				new ui.MenuButton({
+					label: i18n.text("IndexActionsMenu.Title"),
+					menu: new ui.MenuPanel({
+						items: [
+							{ text: i18n.text("IndexActionsMenu.NewAlias"), onclick: function() { this._newAliasAction_handler(index); }.bind(this) },
+							{ text: i18n.text("IndexActionsMenu.Refresh"), onclick: function() { this._postIndexAction_handler("_refresh", index, false); }.bind(this) },
+							{ text: i18n.text("IndexActionsMenu.Flush"), onclick: function() { this._postIndexAction_handler("_flush", index, false); }.bind(this) },
+							{ text: i18n.text("IndexActionsMenu.Optimize"), onclick: function () { this._optimizeIndex_handler(index); }.bind(this) },
+							{ text: i18n.text("IndexActionsMenu.Snapshot"), disabled: closed, onclick: function() { this._postIndexAction_handler("_gateway/snapshot", index, false); }.bind(this) },
+							{ text: i18n.text("IndexActionsMenu.Analyser"), onclick: function() { this._testAnalyser_handler(index); }.bind(this) },
+							{ text: (index.state === "close") ? i18n.text("IndexActionsMenu.Open") : i18n.text("IndexActionsMenu.Close"), onclick: function() { this._postIndexAction_handler((index.state === "close") ? "_open" : "_close", index, true); }.bind(this) },
+							{ text: i18n.text("IndexActionsMenu.Delete"), onclick: function() { this._deleteIndexAction_handler(index); }.bind(this) }
+						]
+					})
+				})
+			] }
+		); },
+		_indexHeader_template: function( index ) {
+			var closed = index.state === "close";
+			var line1 = closed ? "index: close" : ( "size: " + (index.status && index.status.primaries && index.status.total ? ut.byteSize_template( index.status.primaries.store.size_in_bytes ) + " (" + ut.byteSize_template( index.status.total.store.size_in_bytes ) + ")" : "unknown" ) );
+			var line2 = closed ? "\u00A0" : ( "docs: " + (index.status && index.status.primaries && index.status.primaries.docs && index.status.total && index.status.total.docs ? index.status.primaries.docs.count.toLocaleString() + " (" + (index.status.total.docs.count + index.status.total.docs.deleted).toLocaleString() + ")" : "unknown" ) );
+			return index.name ? { tag: "TH", cls: (closed ? "close" : ""), children: [
+				{ tag: "H3", text: index.name },
+				{ tag: "DIV", text: line1 },
+				{ tag: "DIV", text: line2 },
+				this.interactive ? this._indexHeaderControls_template( index ) : null
+			] } : [ { tag: "TD" }, { tag: "TH" } ];
+		},
+		_aliasRender_template_none: function( cluster, indices ) {
+			return null;
+		},
+		_aliasRender_template_list: function( cluster, indices ) {
+			return cluster.aliases.length && { tag: "TBODY", children: [
+				{ tag: "TR", children: [
+					{ tag: "TD" }
+				].concat( indices.map( function( index ) {
+					return { tag: "TD", children: index.metadata && index.metadata.aliases.map( function( alias ) {
+						return { tag: "LI", text: alias };
+					} ) };
+				})) }
+			] };
+		},
+		_aliasRender_template_full: function( cluster, indices ) {
+			return cluster.aliases.length && { tag: "TBODY", children: cluster.aliases.map( function(alias, row) {
+				return { tag: "TR", children: [ { tag: "TD" },{ tag: "TD" } ].concat(alias.indices.map(function(index, i) {
+					if (index) {
+						return {
+							tag: "TD",
+							css: { background: "#" + "9ce9c7fc9".substr((row+6)%7,3) },
+							cls: "uiNodesView-hasAlias" + ( alias.min === i ? " min" : "" ) + ( alias.max === i ? " max" : "" ),
+							text: alias.name,
+							children: this.interactive ? [
+								{	tag: 'SPAN',
+									text: i18n.text("General.CloseGlyph"),
+									cls: 'uiNodesView-hasAlias-remove',
+									onclick: this._deleteAliasAction_handler.bind( this, index, alias )
+								}
+							]: null
+						};
+					}	else {
+						return { tag: "TD" };
+					}
+				}, this ) ) };
+			}, this )	};
+		},
+		_main_template: function(cluster, indices) {
+			return { tag: "TABLE", cls: "table uiNodesView", children: [
+				this._styleSheetEl,
+				{ tag: "THEAD", children: [ { tag: "TR", children: indices.map(this._indexHeader_template, this) } ] },
+				this._aliasRenderFunction( cluster, indices ),
+				{ tag: "TBODY", children: cluster.nodes.map(this._node_template, this) }
+			] };
+		}
+
+	});
+
+})( this.app, this.i18n, this.joey );
+
+(function( $, app, i18n ) {
+
+	var ui = app.ns("ui");
+	var services = app.ns("services");
+
+	// ( master ) master = true, data = true 
+	// ( coordinator ) master = true, data = false
+	// ( worker ) master = false, data = true;
+	// ( client ) master = false, data = false;
+	// http enabled ?
+
+	function nodeSort_name(a, b) {
+		if (!(a.cluster && b.cluster)) {
+			return 0;
+		}
+		return a.cluster.name.toString().localeCompare( b.cluster.name.toString() );
+	}
+
+	function nodeSort_addr( a, b ) {
+		if (!(a.cluster && b.cluster)) {
+			return 0;
+		}
+		return a.cluster.transport_address.toString().localeCompare( b.cluster.transport_address.toString() );
+	}
+
+	function nodeSort_type( a, b ) {
+		if (!(a.cluster && b.cluster)) {
+			return 0;
+		}
+		if( a.master_node ) {
+			return -1;
+		} else if( b.master_node ) {
+			return 1;
+		} else if( a.data_node && !b.data_node ) {
+			return -1;
+		} else if( b.data_node && !a.data_node ) {
+			return 1;
+		} else {
+			return a.cluster.name.toString().localeCompare( b.cluster.name.toString() );
+		}
+	}
+
+	var NODE_SORT_TYPES = {
+		"Sort.ByName": nodeSort_name,
+		"Sort.ByAddress": nodeSort_addr,
+		"Sort.ByType": nodeSort_type
+	};
+
+	function nodeFilter_none( a ) {
+		return true;
+	}
+
+	function nodeFilter_clients( a ) {
+		return (a.master_node || a.data_node );
+	}
+
+
+	ui.ClusterOverview = ui.Page.extend({
+		defaults: {
+			cluster: null // (reqired) an instanceof app.services.Cluster
+		},
+		init: function() {
+			this._super();
+			this.cluster = this.config.cluster;
+			this.prefs = services.Preferences.instance();
+			this._clusterState = this.config.clusterState;
+			this._clusterState.on("data", this.draw_handler );
+			this._refreshButton = new ui.RefreshButton({
+				onRefresh: this.refresh.bind(this),
+				onChange: function( btn ) {
+					if( btn.value === -1 ) {
+						this.draw_handler();
+					}
+				}.bind( this )
+			});
+			var nodeSortPref = this.prefs.get("clusterOverview-nodeSort") || Object.keys(NODE_SORT_TYPES)[0];
+			this._nodeSort = NODE_SORT_TYPES[ nodeSortPref ];
+			this._nodeSortMenu = new ui.MenuButton({
+				label: i18n.text( "Preference.SortCluster" ),
+				menu: new ui.SelectMenuPanel({
+					value: nodeSortPref,
+					items: Object.keys( NODE_SORT_TYPES ).map( function( k ) {
+						return { text: i18n.text( k ), value: k };
+					}),
+					onSelect: function( panel, event ) {
+						this._nodeSort = NODE_SORT_TYPES[ event.value ];
+						this.prefs.set("clusterOverview-nodeSort", event.value );
+						this.draw_handler();
+					}.bind(this)
+				})
+			});
+			this._indicesSort = this.prefs.get( "clusterOverview-indicesSort") || "desc";
+			this._indicesSortMenu = new ui.MenuButton({
+				label: i18n.text( "Preference.SortIndices" ),
+				menu: new ui.SelectMenuPanel({
+					value: this._indicesSort,
+					items: [
+						{ value: "desc", text: i18n.text( "SortIndices.Descending" ) },
+						{ value: "asc", text: i18n.text( "SortIndices.Ascending" ) } ],
+					onSelect: function( panel, event ) {
+						this._indicesSort = event.value;
+						this.prefs.set( "clusterOverview-indicesSort", this._indicesSort );
+						this.draw_handler();
+					}.bind(this)
+				})
+			});
+			this._aliasRenderer = this.prefs.get( "clusterOverview-aliasRender" ) || "full";
+			this._aliasMenu = new ui.MenuButton({
+				label: i18n.text( "Preference.ViewAliases" ),
+				menu: new ui.SelectMenuPanel({
+					value: this._aliasRenderer,
+					items: [
+						{ value: "full", text: i18n.text( "ViewAliases.Grouped" ) },
+						{ value: "list", text: i18n.text( "ViewAliases.List" ) },
+						{ value: "none", text: i18n.text( "ViewAliases.None" ) } ],
+					onSelect: function( panel, event ) {
+						this._aliasRenderer = event.value;
+						this.prefs.set( "clusterOverview-aliasRender", this._aliasRenderer );
+						this.draw_handler();
+					}.bind(this)
+				})
+			});
+			this._indexFilter = new ui.TextField({
+				value: this.prefs.get("clusterOverview-indexFilter"),
+				placeholder: i18n.text( "Overview.IndexFilter" ),
+				onchange: function( indexFilter ) {
+					this.prefs.set("clusterOverview-indexFilter", indexFilter.val() );
+					this.draw_handler();
+				}.bind(this)
+			});
+			this.el = $(this._main_template());
+			this.tablEl = this.el.find(".uiClusterOverview-table");
+			this.refresh();
+		},
+		remove: function() {
+			this._clusterState.removeObserver( "data", this.draw_handler );
+		},
+		refresh: function() {
+			this._refreshButton.disable();
+			this._clusterState.refresh();
+		},
+		draw_handler: function() {
+			var data = this._clusterState;
+			var indexFilter;
+			try {
+				var indexFilterRe = new RegExp( this._indexFilter.val() );
+				indexFilter = function(s) { return indexFilterRe.test(s); };
+			} catch(e) {
+				indexFilter = function() { return true; };
+			}
+			var clusterState = data.clusterState;
+			var status = data.status;
+			var nodeStats = data.nodeStats;
+			var clusterNodes = data.clusterNodes;
+			var nodes = [];
+			var indices = [];
+			var cluster = {};
+			var nodeIndices = {};
+			var indexIndices = {}, indexIndicesIndex = 0;
+			function newNode(n) {
+				return {
+					name: n,
+					routings: [],
+					master_node: clusterState.master_node === n
+				};
+			}
+			function newIndex(i) {
+				return {
+					name: i,
+					replicas: []
+				};
+			}
+			function getIndexForNode(n) {
+				return nodeIndices[n] = (n in nodeIndices) ? nodeIndices[n] : nodes.push(newNode(n)) - 1;
+			}
+			function getIndexForIndex(routings, i) {
+				var index = indexIndices[i] = (i in indexIndices) ?
+						(routings[indexIndices[i]] = routings[indexIndices[i]] || newIndex(i)) && indexIndices[i]
+						: ( ( routings[indexIndicesIndex] = newIndex(i) )  && indexIndicesIndex++ );
+				indices[index] = i;
+				return index;
+			}
+			$.each(clusterNodes.nodes, function(name, node) {
+				getIndexForNode(name);
+			});
+
+			var indexNames = [];
+			$.each(clusterState.routing_table.indices, function(name, index){
+				indexNames.push(name);
+			});
+			indexNames.sort();
+			if (this._indicesSort === "desc") indexNames.reverse();
+			indexNames.filter( indexFilter ).forEach(function(name) {
+				var indexObject = clusterState.routing_table.indices[name];
+				$.each(indexObject.shards, function(name, shard) {
+					shard.forEach(function(replica){
+						var node = replica.node;
+						if(node === null) { node = "Unassigned"; }
+						var index = replica.index;
+						var shard = replica.shard;
+						var routings = nodes[getIndexForNode(node)].routings;
+						var indexIndex = getIndexForIndex(routings, index);
+						var replicas = routings[indexIndex].replicas;
+						if(node === "Unassigned" || !indexObject.shards[shard]) {
+							replicas.push({ replica: replica });
+						} else {
+							replicas[shard] = {
+								replica: replica,
+								status: indexObject.shards[shard].filter(function(replica) {
+									return replica.node === node;
+								})[0]
+							};
+						}
+					});
+				});
+			});
+			indices = indices.map(function(index){
+				return {
+					name: index,
+					state: "open",
+					metadata: clusterState.metadata.indices[index],
+					status: status.indices[index]
+				};
+			}, this);
+			$.each(clusterState.metadata.indices, function(name, index) {
+				if(index.state === "close" && indexFilter( name )) {
+					indices.push({
+						name: name,
+						state: "close",
+						metadata: index,
+						status: null
+					});
+				}
+			});
+			nodes.forEach(function(node) {
+				node.stats = nodeStats.nodes[node.name];
+				var cluster = clusterNodes.nodes[node.name];
+				node.cluster = cluster || { name: "<unknown>" };
+				node.data_node = !( cluster && cluster.attributes && cluster.attributes.data === "false" );
+				for(var i = 0; i < indices.length; i++) {
+					node.routings[i] = node.routings[i] || { name: indices[i].name, replicas: [] };
+					node.routings[i].max_number_of_shards = indices[i].metadata.settings["index.number_of_shards"];
+					node.routings[i].open = indices[i].state === "open";
+				}
+			});
+			var aliasesIndex = {};
+			var aliases = [];
+			var indexClone = indices.map(function() { return false; });
+			$.each(clusterState.metadata.indices, function(name, index) {
+				index.aliases.forEach(function(alias) {
+					var aliasIndex = aliasesIndex[alias] = (alias in aliasesIndex) ? aliasesIndex[alias] : aliases.push( { name: alias, max: -1, min: 999, indices: [].concat(indexClone) }) - 1;
+					var indexIndex = indexIndices[name];
+					var aliasRow = aliases[aliasIndex];
+					aliasRow.min = Math.min(aliasRow.min, indexIndex);
+					aliasRow.max = Math.max(aliasRow.max, indexIndex);
+					aliasRow.indices[indexIndex] = indices[indexIndex];
+				});
+			});
+			cluster.aliases = aliases;
+			cluster.nodes = nodes
+				.filter( nodeFilter_none )
+				.sort( this._nodeSort );
+			indices.unshift({ name: null });
+			this._drawNodesView( cluster, indices );
+			this._refreshButton.enable();
+		},
+		_drawNodesView: function( cluster, indices ) {
+			this._nodesView && this._nodesView.remove();
+			this._nodesView = new ui.NodesView({
+				onRedraw: function() {
+					this.refresh();
+				}.bind(this),
+				interactive: ( this._refreshButton.value === -1 ),
+				aliasRenderer: this._aliasRenderer,
+				cluster: this.cluster,
+				data: {
+					cluster: cluster,
+					indices: indices
+				}
+			});
+			this._nodesView.attach( this.tablEl );
+		},
+		_main_template: function() {
+			return { tag: "DIV", id: this.id(), cls: "uiClusterOverview", children: [
+				new ui.Toolbar({
+					label: i18n.text("Overview.PageTitle"),
+					left: [
+						this._nodeSortMenu,
+						this._indicesSortMenu,
+						this._aliasMenu,
+						this._indexFilter
+					],
+					right: [
+						this._refreshButton
+					]
+				}),
+				{ tag: "DIV", cls: "uiClusterOverview-table" }
+			] };
+		}
+	});
+
+})( this.jQuery, this.app, this.i18n );
+
+(function( app, i18n, raphael ) {
+
+	var ui = app.ns("ui");
+
+	ui.DateHistogram = ui.AbstractWidget.extend({
+		defaults: {
+			printEl: null, // (optional) if supplied, clicking on elements in the histogram changes the query
+			cluster: null, // (required)
+			query: null,   // (required) the current query
+			spec: null     // (required) // date field spec
+		},
+		init: function() {
+			this._super();
+			this.el = $(this._main_template());
+			this.query = this.config.query.clone();
+			// check if the index/types have changed and rebuild the histogram
+			this.config.query.on("results", function(query) {
+				if(this.queryChanged) {
+					this.buildHistogram(query);
+					this.queryChanged = false;
+				}
+			}.bind(this));
+			this.config.query.on("setIndex", function(query, params) {
+				this.query.setIndex(params.index, params.add);
+				this.queryChanged = true;
+			}.bind(this));
+			this.config.query.on("setType", function(query, params) {
+				this.query.setType(params.type, params.add);
+				this.queryChanged = true;
+			}.bind(this));
+			this.query.search.size = 0;
+			this.query.on("results", this._stat_handler);
+			this.query.on("results", this._aggs_handler);
+			this.buildHistogram();
+		},
+		buildHistogram: function(query) {
+			this.statAggs = this.query.addAggs({
+				stats: { field: this.config.spec.field_name }
+			});
+			this.query.query();
+			this.query.removeAggs(this.statAggs);
+		},
+		_stat_handler: function(query, results) {
+			if(! results.aggregations[this.statAggs]) { return; }
+			this.stats = results.aggregations[this.statAggs];
+			// here we are calculating the approximate range  that will give us less than 121 columns
+			var rangeNames = [ "year", "year", "month", "day", "hour", "minute" ];
+			var rangeFactors = [100000, 12, 30, 24, 60, 60000 ];
+			this.intervalRange = 1;
+			var range = this.stats.max - this.stats.min;
+			do {
+				this.intervalName = rangeNames.pop();
+				var factor = rangeFactors.pop();
+				this.intervalRange *= factor;
+				range = range / factor;
+			} while(range > 70);
+			this.dateAggs = this.query.addAggs({
+				date_histogram : {
+					field: this.config.spec.field_name,
+					interval: this.intervalName
+				}
+			});
+			this.query.query();
+			this.query.removeAggs(this.dateAggs);
+		},
+		_aggs_handler: function(query, results) {
+			if(! results.aggregations[this.dateAggs]) { return; }
+			var buckets = [], range = this.intervalRange;
+			var min = Math.floor(this.stats.min / range) * range;
+			var prec = [ "year", "month", "day", "hour", "minute", "second" ].indexOf(this.intervalName);
+			results.aggregations[this.dateAggs].buckets.forEach(function(entry) {
+				buckets[parseInt((entry.key - min) / range , 10)] = entry.doc_count;
+			}, this);
+			for(var i = 0; i < buckets.length; i++) {
+				buckets[i] = buckets[i] || 0;
+			}
+			this.el.removeClass("loading");
+			var el = this.el.empty();
+			var w = el.width(), h = el.height();
+			var r = raphael(el[0], w, h );
+			var printEl = this.config.printEl;
+			query = this.config.query;
+			r.g.barchart(0, 0, w, h, [buckets], { gutter: "0", vgutter: 0 }).hover(
+				function() {
+					this.flag = r.g.popup(this.bar.x, h - 5, this.value || "0").insertBefore(this);
+				}, function() {
+					this.flag.animate({opacity: 0}, 200, ">", function () {this.remove();});
+				}
+			).click(function() {
+				if(printEl) {
+					printEl.val(window.dateRangeParser.print(min + this.bar.index * range, prec));
+					printEl.trigger("keyup");
+					query.query();
+				}
+			});
+		},
+		_main_template: function() { return (
+			{ tag: "DIV", cls: "uiDateHistogram loading", css: { height: "50px" }, children: [
+				i18n.text("General.LoadingAggs")
+			] }
+		); }
+	});
+
+})( this.app, this.i18n, this.Raphael );
+(function( $, app, i18n ) {
+
+	var ui = app.ns("ui");
+	var services = app.ns("services");
+
+	ui.ClusterConnect = ui.AbstractWidget.extend({
+		defaults: {
+			cluster: null
+		},
+		init: function() {
+			this._super();
+			this.prefs = services.Preferences.instance();
+			this.cluster = this.config.cluster;
+			this.el = $.joey(this._main_template());
+			this.cluster.get( "", this._node_handler );
+		},
+		
+		_node_handler: function(data) {
+			if(data) {
+				this.prefs.set("app-base_uri", this.cluster.base_uri);
+			}
+		},
+		
+		_reconnect_handler: function() {
+			var base_uri = this.el.find(".uiClusterConnect-uri").val();
+			$("body").empty().append(new app.App("body", { id: "es", base_uri: base_uri }));
+		},
+		
+		_main_template: function() {
+			return { tag: "SPAN", cls: "uiClusterConnect", children: [
+				{ tag: "INPUT", type: "text", cls: "uiClusterConnect-uri", onkeyup: function( ev ) {
+					if(ev.which === 13) {
+						ev.preventDefault();
+						this._reconnect_handler();
+					}
+				}.bind(this), id: this.id("baseUri"), value: this.cluster.base_uri },
+				{ tag: "BUTTON", type: "button", text: i18n.text("Header.Connect"), onclick: this._reconnect_handler }
+			]};
+		}
+	});
+
+})( this.jQuery, this.app, this.i18n );
+
+
+(function( $, app, i18n ) {
+
+	var ui = app.ns("ui");
+	var data = app.ns("data");
+
+	var StructuredQuery = ui.AbstractWidget.extend({
+		defaults: {
+			cluster: null  // (required) instanceof app.services.Cluster
+		},
+		_baseCls: "uiStructuredQuery",
+		init: function(parent) {
+			this._super();
+			this.selector = new ui.IndexSelector({
+				onIndexChanged: this._indexChanged_handler,
+				cluster: this.config.cluster
+			});
+			this.el = $(this._main_template());
+			this.out = this.el.find("DIV.uiStructuredQuery-out");
+			this.attach( parent );
+		},
+		
+		_indexChanged_handler: function( index ) {
+			this.filter && this.filter.remove();
+			this.filter = new ui.FilterBrowser({
+				cluster: this.config.cluster,
+				index: index,
+				onStartingSearch: function() { this.el.find("DIV.uiStructuredQuery-out").text( i18n.text("General.Searching") ); this.el.find("DIV.uiStructuredQuery-src").hide(); }.bind(this),
+				onSearchSource: this._searchSource_handler,
+				onResults: this._results_handler
+			});
+			this.el.find(".uiStructuredQuery-body").append(this.filter);
+		},
+		
+		_results_handler: function( filter, event ) {
+			var typeMap = {
+				"json": this._jsonResults_handler,
+				"table": this._tableResults_handler,
+				"csv": this._csvResults_handler
+			};
+			typeMap[ event.type ].call( this, event.data, event.metadata );
+		},
+		_jsonResults_handler: function( results ) {
+			this.el.find("DIV.uiStructuredQuery-out").empty().append( new ui.JsonPretty({ obj: results }));
+		},
+		_csvResults_handler: function( results ) {
+			this.el.find("DIV.uiStructuredQuery-out").empty().append( new ui.CSVTable({ results: results }));
+		},
+		_tableResults_handler: function( results, metadata ) {
+			// hack up a QueryDataSourceInterface so that StructuredQuery keeps working without using a Query object
+			var qdi = new data.QueryDataSourceInterface({ metadata: metadata, query: new data.Query() });
+			var tab = new ui.Table( {
+				store: qdi,
+				height: 400,
+				width: this.out.innerWidth()
+			} ).attach(this.out.empty());
+			qdi._results_handler(qdi.config.query, results);
+		},
+		
+		_showRawJSON : function() {
+			if($("#rawJsonText").length === 0) {
+				var hiddenButton = $("#showRawJSON");
+				var jsonText = $({tag: "P", type: "p", id: "rawJsonText"});
+				jsonText.text(hiddenButton[0].value);
+				hiddenButton.parent().append(jsonText);
+			}
+		},
+		
+		_searchSource_handler: function(src) {
+			var searchSourceDiv = this.el.find("DIV.uiStructuredQuery-src");
+			searchSourceDiv.empty().append(new app.ui.JsonPretty({ obj: src }));
+			if(typeof JSON !== "undefined") {
+				var showRawJSON = $({ tag: "BUTTON", type: "button", text: i18n.text("StructuredQuery.ShowRawJson"), id: "showRawJSON", value: JSON.stringify(src), onclick: this._showRawJSON });
+				searchSourceDiv.append(showRawJSON);
+			}
+			searchSourceDiv.show();
+		},
+		
+		_main_template: function() {
+			return { tag: "DIV", cls: this._baseCls, children: [
+				this.selector,
+				{ tag: "DIV", cls: "uiStructuredQuery-body" },
+				{ tag: "DIV", cls: "uiStructuredQuery-src", css: { display: "none" } },
+				{ tag: "DIV", cls: "uiStructuredQuery-out" }
+			]};
+		}
+	});
+
+	ui.StructuredQuery = ui.Page.extend({
+		init: function() {
+			this.q = new StructuredQuery( this.config );
+			this.el = this.q.el;
+		}
+	});
+
+})( this.jQuery, this.app, this.i18n );
+
+(function( $, app, i18n ) {
+
+	var ui = app.ns("ui");
+	var data = app.ns("data");
+	var ut = app.ns("ut");
+
+	ui.FilterBrowser = ui.AbstractWidget.extend({
+		defaults: {
+			cluster: null,  // (required) instanceof app.services.Cluster
+			index: "" // (required) name of the index to query
+		},
+
+		init: function(parent) {
+			this._super();
+			this._cluster = this.config.cluster;
+			this.el = $(this._main_template());
+			this.filtersEl = this.el.find(".uiFilterBrowser-filters");
+			this.attach( parent );
+			new data.MetaDataFactory({ cluster: this._cluster, onReady: function(metadata, eventData) {
+				this.metadata = metadata;
+				this._createFilters_handler(eventData.originalData.metadata.indices);
+			}.bind(this) });
+		},
+
+		_createFilters_handler: function(data) {
+			var filters = [];
+			function scan_properties(path, obj) {
+				if (obj.properties) {
+					for (var prop in obj.properties) {
+						scan_properties(path.concat(prop), obj.properties[prop]);
+					}
+				} else {
+					// handle multi_field 
+					if (obj.fields) {
+						for (var subField in obj.fields) {
+							filters.push({ path: (path[path.length - 1] !== subField) ? path.concat(subField) : path, type: obj.fields[subField].type, meta: obj.fields[subField] });
+						}
+					} else {
+						filters.push({ path: path, type: obj.type, meta: obj });
+					}
+				}
+			}
+			for(var type in data[this.config.index].mappings) {
+				scan_properties([type], data[this.config.index].mappings[type]);
+			}
+
+			filters.sort( function(a, b) {
+				var x = a.path.join(".");
+				var y = b.path.join(".");
+				return (x < y) ? -1 : (x > y) ? 1 : 0;
+			});
+
+			this.filters = [
+				{ path: ["match_all"], type: "match_all", meta: {} },
+				{ path: ["_all"], type: "_all", meta: {}}
+			].concat(filters);
+
+			this._addFilterRow_handler();
+		},
+		
+		_addFilterRow_handler: function() {
+			this.filtersEl.append(this._filter_template());
+		},
+		
+		_removeFilterRow_handler: function(jEv) {
+			$(jEv.target).closest("DIV.uiFilterBrowser-row").remove();
+			if(this.filtersEl.children().length === 0) {
+				this._addFilterRow_handler();
+			}
+		},
+		
+		_search_handler: function() {
+			var search = new data.BoolQuery();
+			search.setSize( this.el.find(".uiFilterBrowser-outputSize").val() )
+			this.fire("startingSearch");
+			this.filtersEl.find(".uiFilterBrowser-row").each(function(i, row) {
+				row = $(row);
+				var bool = row.find(".bool").val();
+				var field = row.find(".field").val();
+				var op = row.find(".op").val();
+				var value = {};
+				if(field === "match_all") {
+					op = "match_all";
+				} else if(op === "range") {
+					var lowqual = row.find(".lowqual").val(),
+						highqual = row.find(".highqual").val();
+					if(lowqual.length) {
+						value[row.find(".lowop").val()] = lowqual;
+					}
+					if(highqual.length) {
+						value[row.find(".highop").val()] = highqual;
+					}
+				} else if(op === "fuzzy") {
+					var qual = row.find(".qual").val(),
+						fuzzyqual = row.find(".fuzzyqual").val();
+					if(qual.length) {
+						value["value"] = qual;
+					}
+					if(fuzzyqual.length) {
+						value[row.find(".fuzzyop").val()] = fuzzyqual;
+					}
+				} else {
+					value = row.find(".qual").val();
+				}
+				search.addClause(value, field, op, bool);
+			});
+			if(this.el.find(".uiFilterBrowser-showSrc").attr("checked")) {
+				this.fire("searchSource", search.search);
+			}
+			this._cluster.post( this.config.index + "/_search", search.getData(), this._results_handler );
+		},
+		
+		_results_handler: function( data ) {
+			var type = this.el.find(".uiFilterBrowser-outputFormat").val();
+			this.fire("results", this, { type: type, data: data, metadata: this.metadata });
+		},
+		
+		_changeQueryField_handler: function(jEv) {
+			var select = $(jEv.target);
+			var spec = select.children(":selected").data("spec");
+			select.siblings().remove(".op,.qual,.range,.fuzzy");
+			var ops = [];
+			if(spec.type === 'match_all') {
+			} else if(spec.type === '_all') {
+				ops = ["query_string"];
+			} else if(spec.type === 'string' || spec.type === 'text' || spec.type === 'keyword') {
+				ops = ["term", "wildcard", "prefix", "fuzzy", "range", "query_string", "text", "missing"];
+			} else if(spec.type === 'long' || spec.type === 'integer' || spec.type === 'float' ||
+					spec.type === 'byte' || spec.type === 'short' || spec.type === 'double') {
+				ops = ["term", "range", "fuzzy", "query_string", "missing"];
+			} else if(spec.type === 'date') {
+				ops = ["term", "range", "fuzzy", "query_string", "missing"];
+			} else if(spec.type === 'geo_point') {
+				ops = ["missing"];
+			} else if(spec.type === 'ip') {
+				ops = ["term", "range", "fuzzy", "query_string", "missing"];
+			} else if(spec.type === 'boolean') {
+				ops = ["term"]
+			}
+			select.after({ tag: "SELECT", cls: "op", onchange: this._changeQueryOp_handler, children: ops.map(ut.option_template) });
+			select.next().change();
+		},
+		
+		_changeQueryOp_handler: function(jEv) {
+			var op = $(jEv.target), opv = op.val();
+			op.siblings().remove(".qual,.range,.fuzzy");
+			if(opv === 'term' || opv === 'wildcard' || opv === 'prefix' || opv === "query_string" || opv === 'text') {
+				op.after({ tag: "INPUT", cls: "qual", type: "text" });
+			} else if(opv === 'range') {
+				op.after(this._range_template());
+			} else if(opv === 'fuzzy') {
+				op.after(this._fuzzy_template());
+			}
+		},
+		
+		_main_template: function() {
+			return { tag: "DIV", children: [
+				{ tag: "DIV", cls: "uiFilterBrowser-filters" },
+				{ tag: "BUTTON", type: "button", text: i18n.text("General.Search"), onclick: this._search_handler },
+				{ tag: "LABEL", children:
+					i18n.complex("FilterBrowser.OutputType", { tag: "SELECT", cls: "uiFilterBrowser-outputFormat", children: [
+						{ text: i18n.text("Output.Table"), value: "table" },
+						{ text: i18n.text("Output.JSON"), value: "json" },
+						{ text: i18n.text("Output.CSV"), value: "csv" }
+					].map(function( o ) { return $.extend({ tag: "OPTION" }, o ); } ) } )
+				},
+				{ tag: "LABEL", children:
+					i18n.complex("FilterBrowser.OutputSize", { tag: "SELECT", cls: "uiFilterBrowser-outputSize",
+						children: [ "10", "50", "250", "1000", "5000", "25000" ].map( ut.option_template )
+					} )
+				},
+				{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", cls: "uiFilterBrowser-showSrc" }, i18n.text("Output.ShowSource") ] }
+			]};
+		},
+		
+		_filter_template: function() {
+			return { tag: "DIV", cls: "uiFilterBrowser-row", children: [
+				{ tag: "SELECT", cls: "bool", children: ["must", "must_not", "should"].map(ut.option_template) },
+				{ tag: "SELECT", cls: "field", onchange: this._changeQueryField_handler, children: this.filters.map(function(f) {
+					return { tag: "OPTION", data: { spec: f }, value: f.path.join("."), text: f.path.join(".") };
+				})},
+				{ tag: "BUTTON", type: "button", text: "+", onclick: this._addFilterRow_handler },
+				{ tag: "BUTTON", type: "button", text: "-", onclick: this._removeFilterRow_handler }
+			]};
+		},
+		
+		_range_template: function() {
+			return { tag: "SPAN", cls: "range", children: [
+				{ tag: "SELECT", cls: "lowop", children: ["gt", "gte"].map(ut.option_template) },
+				{ tag: "INPUT", type: "text", cls: "lowqual" },
+				{ tag: "SELECT", cls: "highop", children: ["lt", "lte"].map(ut.option_template) },
+				{ tag: "INPUT", type: "text", cls: "highqual" }
+			]};
+		},
+
+		_fuzzy_template: function() {
+			return { tag: "SPAN", cls: "fuzzy", children: [
+				{ tag: "INPUT", cls: "qual", type: "text" },
+				{ tag: "SELECT", cls: "fuzzyop", children: ["max_expansions", "min_similarity"].map(ut.option_template) },
+				{ tag: "INPUT", cls: "fuzzyqual", type: "text" }
+			]};
+		}
+	});
+	
+})( this.jQuery, this.app, this.i18n );
+
+(function( $, app, i18n ) {
+
+	var ui = app.ns("ui");
+
+	ui.IndexSelector = ui.AbstractWidget.extend({
+		init: function(parent) {
+			this._super();
+			this.el = $(this._main_template());
+			this.attach( parent );
+			this.cluster = this.config.cluster;
+			this.update();
+		},
+		update: function() {
+			this.cluster.get( "_stats", this._update_handler );
+		},
+		
+		_update_handler: function(data) {
+			var options = [];
+			var index_names = Object.keys(data.indices).sort();
+			for(var i=0; i < index_names.length; i++) { 
+				name = index_names[i];
+				options.push(this._option_template(name, data.indices[name])); 
+			}
+			this.el.find(".uiIndexSelector-select").empty().append(this._select_template(options));
+			this._indexChanged_handler();
+		},
+		
+		_main_template: function() {
+			return { tag: "DIV", cls: "uiIndexSelector", children: i18n.complex( "IndexSelector.SearchIndexForDocs", { tag: "SPAN", cls: "uiIndexSelector-select" } ) };
+		},
+
+		_indexChanged_handler: function() {
+			this.fire("indexChanged", this.el.find("SELECT").val());
+		},
+
+		_select_template: function(options) {
+			return { tag: "SELECT", children: options, onChange: this._indexChanged_handler };
+		},
+		
+		_option_template: function(name, index) {
+			return  { tag: "OPTION", value: name, text: i18n.text("IndexSelector.NameWithDocs", name, index.primaries.docs.count ) };
+		}
+	});
+
+})( this.jQuery, this.app, this.i18n );
+
+(function( $, app, i18n ) {
+
+	var ui = app.ns("ui");
+
+	ui.Header = ui.AbstractWidget.extend({
+		defaults: {
+			cluster: null,
+			clusterState: null
+		},
+		_baseCls: "uiHeader",
+		init: function() {
+			this._clusterConnect = new ui.ClusterConnect({
+				cluster: this.config.cluster
+			});
+			var quicks = [
+				{ text: i18n.text("Nav.Info"), path: "" },
+				{ text: i18n.text("Nav.Status"), path: "_stats" },
+				{ text: i18n.text("Nav.NodeStats"), path: "_nodes/stats" },
+				{ text: i18n.text("Nav.ClusterNodes"), path: "_nodes" },
+				{ text: i18n.text("Nav.Plugins"), path: "_nodes/plugins" },
+				{ text: i18n.text("Nav.ClusterState"), path: "_cluster/state" },
+				{ text: i18n.text("Nav.ClusterHealth"), path: "_cluster/health" },
+				{ text: i18n.text("Nav.Templates"), path: "_template" }
+			];
+			var cluster = this.config.cluster;
+			var quickPanels = {};
+			var menuItems = quicks.map( function( item ) {
+				return { text: item.text, onclick: function() {
+					cluster.get( item.path, function( data ) {
+						quickPanels[ item.path ] && quickPanels[ item.path ].el && quickPanels[ item.path ].remove();
+						quickPanels[ item.path ] = new ui.JsonPanel({
+							title: item.text,
+							json: data
+						});
+					} );
+				} };
+			}, this );
+			this._quickMenu = new ui.MenuButton({
+				label: i18n.text("NodeInfoMenu.Title"),
+				menu: new ui.MenuPanel({
+					items: menuItems
+				})
+			});
+			this.el = $.joey( this._main_template() );
+			this.nameEl = this.el.find(".uiHeader-name");
+			this.statEl = this.el.find(".uiHeader-status");
+			this._clusterState = this.config.clusterState;
+			this._clusterState.on("data", function( state ) {
+				var shards = state.status._shards;
+				var colour = state.clusterHealth.status;
+				var name = state.clusterState.cluster_name;
+				this.nameEl.text( name );
+				this.statEl
+					.text( i18n.text("Header.ClusterHealth", colour, shards.successful, shards.total ) )
+					.css( "background", colour );
+			}.bind(this));
+			this.statEl.text( i18n.text("Header.ClusterNotConnected") ).css("background", "grey");
+			this._clusterState.refresh();
+		},
+		_main_template: function() { return (
+			{ tag: "DIV", cls: this._baseCls, children: [
+				this._clusterConnect,
+				{ tag: "SPAN", cls: "uiHeader-name" },
+				{ tag: "SPAN", cls: "uiHeader-status" },
+				{ tag: "H1", text: i18n.text("General.Elasticsearch") },
+				{ tag: "SPAN", cls: "pull-right", children: [
+					this._quickMenu
+				] }
+			] }
+		); }
+	} );
+
+})( this.jQuery, this.app, this.i18n );
+
+(function( $, app, i18n ) {
+	
+	var ui = app.ns("ui");
+	var ut = app.ns("ut");
+
+	ui.IndexOverview = ui.Page.extend({
+		defaults: {
+			cluster: null
+		},
+		init: function() {
+			this._super();
+			this.cluster = this.config.cluster;
+			this._clusterState = this.config.clusterState;
+			this._clusterState.on("data", this._refresh_handler );
+			this.el = $(this._main_template());
+			this._refresh_handler();
+		},
+		remove: function() {
+			this._clusterState.removeObserver( "data", this._refresh_handler );
+		},
+		_refresh_handler: function() {
+			var state = this._clusterState;
+			var view = {
+				indices: acx.eachMap( state.status.indices, function( name, index ) {
+					return {
+						name: name,
+						state: index
+					};
+				}).sort( function( a, b ) {
+					return a.name < b.name ? -1 : 1;
+				})
+			};
+			this._indexViewEl && this._indexViewEl.remove();
+			this._indexViewEl = $( this._indexTable_template( view ) );
+			this.el.find(".uiIndexOverview-table").append( this._indexViewEl );
+		},
+		_newIndex_handler: function() {
+			var fields = new app.ux.FieldCollection({
+				fields: [
+					new ui.TextField({ label: i18n.text("ClusterOverView.IndexName"), name: "_name", require: true }),
+					new ui.TextField({
+						label: i18n.text("ClusterOverview.NumShards"),
+						name: "number_of_shards",
+						value: "5",
+						require: function( val ) { return parseInt( val, 10 ) >= 1; }
+					}),
+					new ui.TextField({
+						label: i18n.text("ClusterOverview.NumReplicas"),
+						name: "number_of_replicas",
+						value: "1",
+						require: function( val ) { return parseInt( val, 10 ) >= 0; }
+					})
+				]
+			});
+			var dialog = new ui.DialogPanel({
+				title: i18n.text("ClusterOverview.NewIndex"),
+				body: new ui.PanelForm({ fields: fields }),
+				onCommit: function(panel, args) {
+					if(fields.validate()) {
+						var data = fields.getData();
+						var name = data["_name"];
+						delete data["_name"];
+						this.config.cluster.put( encodeURIComponent( name ), JSON.stringify({ settings: { index: data } }), function(d) {
+							dialog.close();
+							alert(JSON.stringify(d));
+							this._clusterState.refresh();
+						}.bind(this) );
+					}
+				}.bind(this)
+			}).open();
+		},
+		_indexTable_template: function( view ) { return (
+			{ tag: "TABLE", cls: "table", children: [
+				{ tag: "THEAD", children: [
+					{ tag: "TR", children: [
+						{ tag: "TH" },
+						{ tag: "TH", children: [
+							{ tag: "H3", text: "Size" }
+						] },
+						{ tag: "TH", children: [
+							{ tag: "H3", text: "Docs" }
+						] }
+					] }
+				] },
+				{ tag: "TBODY", cls: "striped", children: view.indices.map( this._index_template, this ) }
+			] }
+		); },
+
+		_index_template: function( index ) { return (
+			{ tag: "TR", children: [
+				{ tag: "TD", children: [
+					{ tag: "H3", text: index.name }
+				] },
+				{ tag: "TD", text: ut.byteSize_template( index.state.primaries.store.size_in_bytes ) + "/" + ut.byteSize_template( index.state.total.store.size_in_bytes ) },
+				{ tag: "TD", text: ut.count_template( index.state.primaries.docs.count ) }
+			] }
+		); },
+		_main_template: function() {
+			return { tag: "DIV", id: this.id(), cls: "uiIndexOverview", children: [
+				new ui.Toolbar({
+					label: i18n.text("IndexOverview.PageTitle"),
+					left: [
+						new ui.Button({
+							label: i18n.text("ClusterOverview.NewIndex"),
+							onclick: this._newIndex_handler
+						}),
+					]
+				}),
+				{ tag: "DIV", cls: "uiIndexOverview-table", children: this._indexViewEl }
+			] };
+		}
+
+	});
+
+})( this.jQuery, this.app, this.i18n );
+
+(function( app, i18n ) {
+
+	var ui = app.ns("ui");
+	var services = app.ns("services");
+
+	app.App = ui.AbstractWidget.extend({
+		defaults: {
+			base_uri: null
+		},
+		init: function(parent) {
+			this._super();
+			this.prefs = services.Preferences.instance();
+			this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";
+			if( this.base_uri.charAt( this.base_uri.length - 1 ) !== "/" ) {
+				// XHR request fails if the URL is not ending with a "/"
+				this.base_uri += "/";
+			}
+			if( this.config.auth_user ) {
+				var credentials = window.btoa( this.config.auth_user + ":" + this.config.auth_password );
+				$.ajaxSetup({
+					headers: {
+						"Authorization": "Basic " + credentials
+					}
+				});
+			}
+			this.cluster = new services.Cluster({ base_uri: this.base_uri });
+			this._clusterState = new services.ClusterState({
+				cluster: this.cluster
+			});
+
+			this._header = new ui.Header({ cluster: this.cluster, clusterState: this._clusterState });
+			this.$body = $.joey( this._body_template() );
+			this.el = $.joey(this._main_template());
+			this.attach( parent );
+			this.instances = {};
+			this.el.find(".uiApp-headerMenuItem:first").click();
+			if( this.config.dashboard ) {
+				if( this.config.dashboard === "cluster" ) {
+					var page = this.instances["ClusterOverview"];
+					page._refreshButton.set( 5000 );
+				}
+			}
+		},
+
+		navigateTo: function( type, config, ev ) {
+			if( ev.target.classList.contains( "uiApp-headerNewMenuItem" ) ) {
+				this.showNew( type, config, ev );
+			} else {
+				var ref = type + "0";
+				if(! this.instances[ ref ]) {
+					this.createPage( type, 0, config );
+				}
+				this.show( ref, ev );
+			}
+		},
+
+		createPage: function( type, id, config ) {
+			var page = this.instances[ type + id ] = new ui[ type ]( config );
+			this.$body.append( page );
+			return page;
+		},
+
+		show: function( ref, ev ) {
+			$( ev.target ).closest("DIV.uiApp-headerMenuItem").addClass("active").siblings().removeClass("active");
+			for(var p in this.instances) {
+				this.instances[p][ p === ref ? "show" : "hide" ]();
+			}
+		},
+
+		showNew: function( type, config, jEv ) {
+			var ref, page, $tab,
+				type_index = 0;
+
+			while ( ! page ) {
+				ref = type + ( ++type_index );
+				if (! ( ref in this.instances ) ) {
+					page = this.createPage( type, type_index, config );
+				}
+			}
+
+			// Add the tab and its click handlers
+			$tab = $.joey({
+				tag: "DIV",
+				cls: "uiApp-headerMenuItem pull-left",
+				text: i18n.text("Nav." + type ) + " " + type_index,
+				onclick: function( ev ) { this.show( ref, ev ); }.bind(this),
+				children: [
+					{ tag: "A", text: " [-]", onclick: function (ev) {
+						$tab.remove();
+						page.remove();
+						delete this.instances[ ref ];
+					}.bind(this) }
+				]
+			});
+
+			$('.uiApp-headerMenu').append( $tab );
+			$tab.trigger("click");
+		},
+
+		_openAnyRequest_handler: function(ev) { this.navigateTo("AnyRequest", { cluster: this.cluster }, ev ); },
+		_openStructuredQuery_handler: function(ev) { this.navigateTo("StructuredQuery", { cluster: this.cluster }, ev ); },
+		_openBrowser_handler: function(ev) { this.navigateTo("Browser", { cluster: this.cluster }, ev );  },
+		_openClusterOverview_handler: function(ev) { this.navigateTo("ClusterOverview", { cluster: this.cluster, clusterState: this._clusterState }, ev ); },
+		_openIndexOverview_handler: function(ev) { this.navigateTo("IndexOverview", { cluster: this.cluster, clusterState: this._clusterState }, ev ); },
+
+		_body_template: function() { return (
+			{ tag: "DIV", id: this.id("body"), cls: "uiApp-body" }
+		); },
+
+		_main_template: function() {
+			return { tag: "DIV", cls: "uiApp", children: [
+				{ tag: "DIV", id: this.id("header"), cls: "uiApp-header", children: [
+					this._header,
+					{ tag: "DIV", cls: "uiApp-headerMenu", children: [
+						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Overview"), onclick: this._openClusterOverview_handler },
+						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Indices"), onclick: this._openIndexOverview_handler },
+						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Browser"), onclick: this._openBrowser_handler },
+						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.StructuredQuery"), onclick: this._openStructuredQuery_handler, children: [
+							{ tag: "A", cls: "uiApp-headerNewMenuItem ", text: ' [+]' }
+						] },
+						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.AnyRequest"), onclick: this._openAnyRequest_handler, children: [
+							{ tag: "A", cls: "uiApp-headerNewMenuItem ", text: ' [+]' }
+						] },
+					]}
+				]},
+				this.$body
+			]};
+		}
+		
+	});
+
+})( this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/base/favicon.png b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/base/favicon.png
new file mode 100644
index 0000000..f433ec6
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/base/favicon.png
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/base/loading.gif b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/base/loading.gif
new file mode 100644
index 0000000..f001e23
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/base/loading.gif
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/base/reset.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/base/reset.css
new file mode 100644
index 0000000..29a5f1b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/base/reset.css
@@ -0,0 +1,44 @@
+BODY {
+	font-family: Verdana, sans-serif;
+	font-size: 73%;
+	padding: 0;
+	margin: 0;
+}
+
+INPUT, SELECT, TEXTAREA {
+	border: 1px solid #cecece;
+	padding: 1px 3px;
+	background: white;
+}
+
+SELECT {
+	padding: 0;
+}
+
+.saf SELECT {
+	margin-top: 0;
+	margin-bottom: 0;
+}
+
+TEXTAREA, CODE {
+	font-family: monospace;
+	font-size: 13px;
+}
+
+BUTTON::-moz-focus-inner {
+	border: none;
+}
+
+.pull-left {
+	float: left;
+}
+
+.pull-right {
+	float: right;
+}
+
+.loading  {
+	background-image: url(loading.gif);
+	background-repeat: no-repeat;
+	text-indent: 20px;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/fonts/FontAwesome.otf b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/fonts/FontAwesome.otf
new file mode 100644
index 0000000..8b0f54e
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/fonts/FontAwesome.otf
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.eot b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000..7c79c6a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.eot
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.svg b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000..45fdf33
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.svg
@@ -0,0 +1,414 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="fontawesomeregular" horiz-adv-x="1536" >
+<font-face units-per-em="1792" ascent="1536" descent="-256" />
+<missing-glyph horiz-adv-x="448" />
+<glyph unicode=" "  horiz-adv-x="448" />
+<glyph unicode="&#x09;" horiz-adv-x="448" />
+<glyph unicode="&#xa0;" horiz-adv-x="448" />
+<glyph unicode="&#xa8;" horiz-adv-x="1792" />
+<glyph unicode="&#xa9;" horiz-adv-x="1792" />
+<glyph unicode="&#xae;" horiz-adv-x="1792" />
+<glyph unicode="&#xb4;" horiz-adv-x="1792" />
+<glyph unicode="&#xc6;" horiz-adv-x="1792" />
+<glyph unicode="&#x2000;" horiz-adv-x="768" />
+<glyph unicode="&#x2001;" />
+<glyph unicode="&#x2002;" horiz-adv-x="768" />
+<glyph unicode="&#x2003;" />
+<glyph unicode="&#x2004;" horiz-adv-x="512" />
+<glyph unicode="&#x2005;" horiz-adv-x="384" />
+<glyph unicode="&#x2006;" horiz-adv-x="256" />
+<glyph unicode="&#x2007;" horiz-adv-x="256" />
+<glyph unicode="&#x2008;" horiz-adv-x="192" />
+<glyph unicode="&#x2009;" horiz-adv-x="307" />
+<glyph unicode="&#x200a;" horiz-adv-x="85" />
+<glyph unicode="&#x202f;" horiz-adv-x="307" />
+<glyph unicode="&#x205f;" horiz-adv-x="384" />
+<glyph unicode="&#x2122;" horiz-adv-x="1792" />
+<glyph unicode="&#x221e;" horiz-adv-x="1792" />
+<glyph unicode="&#x2260;" horiz-adv-x="1792" />
+<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="&#xf000;" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
+<glyph unicode="&#xf001;" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf002;" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+<glyph unicode="&#xf003;" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf004;" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
+<glyph unicode="&#xf005;" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
+<glyph unicode="&#xf006;" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
+<glyph unicode="&#xf007;" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf008;" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf009;" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
+<glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
+<glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+<glyph unicode="&#xf010;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
+<glyph unicode="&#xf011;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
+<glyph unicode="&#xf012;" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf013;" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
+<glyph unicode="&#xf014;" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf015;" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
+<glyph unicode="&#xf016;" horiz-adv-x="1280" d="M128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280zM768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z " />
+<glyph unicode="&#xf017;" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf018;" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
+<glyph unicode="&#xf019;" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
+<glyph unicode="&#xf01a;" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01b;" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01c;" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
+<glyph unicode="&#xf01d;" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01e;" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
+<glyph unicode="&#xf021;" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf022;" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
+<glyph unicode="&#xf023;" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf024;" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf025;" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
+<glyph unicode="&#xf026;" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf027;" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
+<glyph unicode="&#xf028;" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
+<glyph unicode="&#xf029;" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
+<glyph unicode="&#xf02a;" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
+<glyph unicode="&#xf02b;" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
+<glyph unicode="&#xf02c;" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
+<glyph unicode="&#xf02d;" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
+<glyph unicode="&#xf02e;" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="&#xf02f;" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
+<glyph unicode="&#xf030;" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf031;" horiz-adv-x="1664" d="M725 977l-170 -450q73 -1 153.5 -2t119 -1.5t52.5 -0.5l29 2q-32 95 -92 241q-53 132 -92 211zM21 -128h-21l2 79q22 7 80 18q89 16 110 31q20 16 48 68l237 616l280 724h75h53l11 -21l205 -480q103 -242 124 -297q39 -102 96 -235q26 -58 65 -164q24 -67 65 -149 q22 -49 35 -57q22 -19 69 -23q47 -6 103 -27q6 -39 6 -57q0 -14 -1 -26q-80 0 -192 8q-93 8 -189 8q-79 0 -135 -2l-200 -11l-58 -2q0 45 4 78l131 28q56 13 68 23q12 12 12 27t-6 32l-47 114l-92 228l-450 2q-29 -65 -104 -274q-23 -64 -23 -84q0 -31 17 -43 q26 -21 103 -32q3 0 13.5 -2t30 -5t40.5 -6q1 -28 1 -58q0 -17 -2 -27q-66 0 -349 20l-48 -8q-81 -14 -167 -14z" />
+<glyph unicode="&#xf032;" horiz-adv-x="1408" d="M555 15q76 -32 140 -32q131 0 216 41t122 113q38 70 38 181q0 114 -41 180q-58 94 -141 126q-80 32 -247 32q-74 0 -101 -10v-144l-1 -173l3 -270q0 -15 12 -44zM541 761q43 -7 109 -7q175 0 264 65t89 224q0 112 -85 187q-84 75 -255 75q-52 0 -130 -13q0 -44 2 -77 q7 -122 6 -279l-1 -98q0 -43 1 -77zM0 -128l2 94q45 9 68 12q77 12 123 31q17 27 21 51q9 66 9 194l-2 497q-5 256 -9 404q-1 87 -11 109q-1 4 -12 12q-18 12 -69 15q-30 2 -114 13l-4 83l260 6l380 13l45 1q5 0 14 0.5t14 0.5q1 0 21.5 -0.5t40.5 -0.5h74q88 0 191 -27 q43 -13 96 -39q57 -29 102 -76q44 -47 65 -104t21 -122q0 -70 -32 -128t-95 -105q-26 -20 -150 -77q177 -41 267 -146q92 -106 92 -236q0 -76 -29 -161q-21 -62 -71 -117q-66 -72 -140 -108q-73 -36 -203 -60q-82 -15 -198 -11l-197 4q-84 2 -298 -11q-33 -3 -272 -11z" />
+<glyph unicode="&#xf033;" horiz-adv-x="1024" d="M0 -126l17 85q4 1 77 20q76 19 116 39q29 37 41 101l27 139l56 268l12 64q8 44 17 84.5t16 67t12.5 46.5t9 30.5t3.5 11.5l29 157l16 63l22 135l8 50v38q-41 22 -144 28q-28 2 -38 4l19 103l317 -14q39 -2 73 -2q66 0 214 9q33 2 68 4.5t36 2.5q-2 -19 -6 -38 q-7 -29 -13 -51q-55 -19 -109 -31q-64 -16 -101 -31q-12 -31 -24 -88q-9 -44 -13 -82q-44 -199 -66 -306l-61 -311l-38 -158l-43 -235l-12 -45q-2 -7 1 -27q64 -15 119 -21q36 -5 66 -10q-1 -29 -7 -58q-7 -31 -9 -41q-18 0 -23 -1q-24 -2 -42 -2q-9 0 -28 3q-19 4 -145 17 l-198 2q-41 1 -174 -11q-74 -7 -98 -9z" />
+<glyph unicode="&#xf034;" horiz-adv-x="1792" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l215 -1h293l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -42.5 2t-103.5 -1t-111 -1 q-34 0 -67 -5q-10 -97 -8 -136l1 -152v-332l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-88 0 -233 -14q-48 -4 -70 -4q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q8 192 6 433l-5 428q-1 62 -0.5 118.5t0.5 102.5t-2 57t-6 15q-6 5 -14 6q-38 6 -148 6q-43 0 -100 -13.5t-73 -24.5q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1744 128q33 0 42 -18.5t-11 -44.5 l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80z" />
+<glyph unicode="&#xf035;" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l446 -1h318l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -58.5 2t-138.5 -1t-128 -1 q-94 0 -127 -5q-10 -97 -8 -136l1 -152v52l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-82 0 -233 -13q-45 -5 -70 -5q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q6 137 6 433l-5 44q0 265 -2 278q-2 11 -6 15q-6 5 -14 6q-38 6 -148 6q-50 0 -168.5 -14t-132.5 -24q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1505 113q26 -20 26 -49t-26 -49l-162 -126 q-26 -20 -44.5 -11t-18.5 42v80h-1024v-80q0 -33 -18.5 -42t-44.5 11l-162 126q-26 20 -26 49t26 49l162 126q26 20 44.5 11t18.5 -42v-80h1024v80q0 33 18.5 42t44.5 -11z" />
+<glyph unicode="&#xf036;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf037;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf038;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf039;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf03a;" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03b;" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03c;" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03d;" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
+<glyph unicode="&#xf03e;" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf040;" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
+<glyph unicode="&#xf041;" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
+<glyph unicode="&#xf042;" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf043;" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
+<glyph unicode="&#xf044;" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
+<glyph unicode="&#xf045;" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
+<glyph unicode="&#xf046;" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
+<glyph unicode="&#xf047;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf048;" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
+<glyph unicode="&#xf049;" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
+<glyph unicode="&#xf04a;" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
+<glyph unicode="&#xf04b;" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
+<glyph unicode="&#xf04c;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf04d;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf04e;" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="&#xf050;" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="&#xf051;" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
+<glyph unicode="&#xf052;" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
+<glyph unicode="&#xf053;" horiz-adv-x="1152" d="M742 -37l-652 651q-37 37 -37 90.5t37 90.5l652 651q37 37 90.5 37t90.5 -37l75 -75q37 -37 37 -90.5t-37 -90.5l-486 -486l486 -485q37 -38 37 -91t-37 -90l-75 -75q-37 -37 -90.5 -37t-90.5 37z" />
+<glyph unicode="&#xf054;" horiz-adv-x="1152" d="M1099 704q0 -52 -37 -91l-652 -651q-37 -37 -90 -37t-90 37l-76 75q-37 39 -37 91q0 53 37 90l486 486l-486 485q-37 39 -37 91q0 53 37 90l76 75q36 38 90 38t90 -38l652 -651q37 -37 37 -90z" />
+<glyph unicode="&#xf055;" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf056;" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
+<glyph unicode="&#xf057;" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf058;" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf059;" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05a;" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05b;" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf05c;" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05d;" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05e;" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
+<glyph unicode="&#xf060;" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
+<glyph unicode="&#xf061;" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
+<glyph unicode="&#xf062;" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
+<glyph unicode="&#xf063;" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+<glyph unicode="&#xf064;" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
+<glyph unicode="&#xf065;" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf066;" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
+<glyph unicode="&#xf067;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf068;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf069;" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
+<glyph unicode="&#xf06a;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
+<glyph unicode="&#xf06b;" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf06c;" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
+<glyph unicode="&#xf06d;" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
+<glyph unicode="&#xf06e;" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
+<glyph unicode="&#xf070;" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
+<glyph unicode="&#xf071;" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
+<glyph unicode="&#xf072;" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
+<glyph unicode="&#xf073;" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf074;" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="&#xf075;" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="&#xf076;" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf077;" horiz-adv-x="1664" d="M1611 320q0 -53 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-486 485l-486 -485q-36 -38 -90 -38t-90 38l-75 75q-38 36 -38 90q0 53 38 91l651 651q37 37 90 37q52 0 91 -37l650 -651q38 -38 38 -91z" />
+<glyph unicode="&#xf078;" horiz-adv-x="1664" d="M1611 832q0 -53 -37 -90l-651 -651q-38 -38 -91 -38q-54 0 -90 38l-651 651q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l486 -486l486 486q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+<glyph unicode="&#xf079;" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
+<glyph unicode="&#xf07a;" horiz-adv-x="1664" d="M640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5 t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf07b;" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf07c;" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf07d;" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf07e;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf080;" horiz-adv-x="1920" d="M512 512v-384h-256v384h256zM896 1024v-896h-256v896h256zM1280 768v-640h-256v640h256zM1664 1152v-1024h-256v1024h256zM1792 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5z M1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf081;" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf082;" d="M1307 618l23 219h-198v109q0 49 15.5 68.5t71.5 19.5h110v219h-175q-152 0 -218 -72t-66 -213v-131h-131v-219h131v-635h262v635h175zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf083;" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf084;" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
+<glyph unicode="&#xf085;" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
+<glyph unicode="&#xf086;" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
+<glyph unicode="&#xf087;" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
+<glyph unicode="&#xf088;" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
+<glyph unicode="&#xf089;" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
+<glyph unicode="&#xf08a;" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" />
+<glyph unicode="&#xf08b;" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
+<glyph unicode="&#xf08c;" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf08d;" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
+<glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf090;" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf091;" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf092;" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf093;" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
+<glyph unicode="&#xf094;" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
+<glyph unicode="&#xf095;" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
+<glyph unicode="&#xf096;" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf097;" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="&#xf098;" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf099;" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
+<glyph unicode="&#xf09a;" horiz-adv-x="768" d="M511 980h257l-30 -284h-227v-824h-341v824h-170v284h170v171q0 182 86 275.5t283 93.5h227v-284h-142q-39 0 -62.5 -6.5t-34 -23.5t-13.5 -34.5t-3 -49.5v-142z" />
+<glyph unicode="&#xf09b;" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
+<glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+<glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
+<glyph unicode="&#xf0a0;" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
+<glyph unicode="&#xf0a1;" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
+<glyph unicode="&#xf0a2;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM183 128h1298q-164 181 -246.5 411.5t-82.5 484.5q0 256 -320 256t-320 -256q0 -254 -82.5 -484.5t-246.5 -411.5zM1664 128q0 -52 -38 -90t-90 -38 h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
+<glyph unicode="&#xf0a3;" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
+<glyph unicode="&#xf0a4;" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
+<glyph unicode="&#xf0a5;" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf0a6;" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
+<glyph unicode="&#xf0a7;" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
+<glyph unicode="&#xf0a8;" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0a9;" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0aa;" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0ab;" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0ac;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
+<glyph unicode="&#xf0ad;" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
+<glyph unicode="&#xf0ae;" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0b0;" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
+<glyph unicode="&#xf0b1;" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf0b2;" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " />
+<glyph unicode="&#xf0c0;" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
+<glyph unicode="&#xf0c1;" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
+<glyph unicode="&#xf0c2;" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " />
+<glyph unicode="&#xf0c3;" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
+<glyph unicode="&#xf0c4;" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
+<glyph unicode="&#xf0c5;" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
+<glyph unicode="&#xf0c6;" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" />
+<glyph unicode="&#xf0c7;" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf0c8;" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0c9;" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0ca;" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf0cb;" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf0cc;" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
+<glyph unicode="&#xf0cd;" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
+<glyph unicode="&#xf0ce;" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" />
+<glyph unicode="&#xf0d0;" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
+<glyph unicode="&#xf0d1;" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d2;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0d3;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
+<glyph unicode="&#xf0d4;" d="M678 -57q0 -38 -10 -71h-380q-95 0 -171.5 56.5t-103.5 147.5q24 45 69 77.5t100 49.5t107 24t107 7q32 0 49 -2q6 -4 30.5 -21t33 -23t31 -23t32 -25.5t27.5 -25.5t26.5 -29.5t21 -30.5t17.5 -34.5t9.5 -36t4.5 -40.5zM385 294q-234 -7 -385 -85v433q103 -118 273 -118 q32 0 70 5q-21 -61 -21 -86q0 -67 63 -149zM558 805q0 -100 -43.5 -160.5t-140.5 -60.5q-51 0 -97 26t-78 67.5t-56 93.5t-35.5 104t-11.5 99q0 96 51.5 165t144.5 69q66 0 119 -41t84 -104t47 -130t16 -128zM1536 896v-736q0 -119 -84.5 -203.5t-203.5 -84.5h-468 q39 73 39 157q0 66 -22 122.5t-55.5 93t-72 71t-72 59.5t-55.5 54.5t-22 59.5q0 36 23 68t56 61.5t65.5 64.5t55.5 93t23 131t-26.5 145.5t-75.5 118.5q-6 6 -14 11t-12.5 7.5t-10 9.5t-10.5 17h135l135 64h-437q-138 0 -244.5 -38.5t-182.5 -133.5q0 126 81 213t207 87h960 q119 0 203.5 -84.5t84.5 -203.5v-96h-256v256h-128v-256h-256v-128h256v-256h128v256h256z" />
+<glyph unicode="&#xf0d5;" horiz-adv-x="1664" d="M876 71q0 21 -4.5 40.5t-9.5 36t-17.5 34.5t-21 30.5t-26.5 29.5t-27.5 25.5t-32 25.5t-31 23t-33 23t-30.5 21q-17 2 -50 2q-54 0 -106 -7t-108 -25t-98 -46t-69 -75t-27 -107q0 -68 35.5 -121.5t93 -84t120.5 -45.5t127 -15q59 0 112.5 12.5t100.5 39t74.5 73.5 t27.5 110zM756 933q0 60 -16.5 127.5t-47 130.5t-84 104t-119.5 41q-93 0 -144 -69t-51 -165q0 -47 11.5 -99t35.5 -104t56 -93.5t78 -67.5t97 -26q97 0 140.5 60.5t43.5 160.5zM625 1408h437l-135 -79h-135q71 -45 110 -126t39 -169q0 -74 -23 -131.5t-56 -92.5t-66 -64.5 t-56 -61t-23 -67.5q0 -26 16.5 -51t43 -48t58.5 -48t64 -55.5t58.5 -66t43 -85t16.5 -106.5q0 -160 -140 -282q-152 -131 -420 -131q-59 0 -119.5 10t-122 33.5t-108.5 58t-77 89t-30 121.5q0 61 37 135q32 64 96 110.5t145 71t155 36t150 13.5q-64 83 -64 149q0 12 2 23.5 t5 19.5t8 21.5t7 21.5q-40 -5 -70 -5q-149 0 -255.5 98t-106.5 246q0 140 95 250.5t234 141.5q94 20 187 20zM1664 1152v-128h-256v-256h-128v256h-256v128h256v256h128v-256h256z" />
+<glyph unicode="&#xf0d6;" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d7;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d8;" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0d9;" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf0da;" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0db;" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf0dc;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0dd;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0de;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0e0;" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
+<glyph unicode="&#xf0e1;" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
+<glyph unicode="&#xf0e2;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
+<glyph unicode="&#xf0e3;" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
+<glyph unicode="&#xf0e4;" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="&#xf0e5;" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="&#xf0e6;" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
+<glyph unicode="&#xf0e7;" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
+<glyph unicode="&#xf0e8;" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" />
+<glyph unicode="&#xf0e9;" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf0ea;" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf0eb;" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
+<glyph unicode="&#xf0ec;" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="&#xf0ed;" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="&#xf0ee;" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="&#xf0f0;" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf0f1;" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
+<glyph unicode="&#xf0f2;" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" />
+<glyph unicode="&#xf0f3;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1664 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5 q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
+<glyph unicode="&#xf0f4;" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf0f5;" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f6;" horiz-adv-x="1280" d="M1024 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1024 608v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280z M768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf0f7;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f8;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f9;" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0fa;" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf0fb;" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" />
+<glyph unicode="&#xf0fc;" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
+<glyph unicode="&#xf0fd;" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0fe;" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf100;" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
+<glyph unicode="&#xf101;" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf102;" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf103;" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf104;" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf105;" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf106;" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf107;" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf108;" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf109;" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
+<glyph unicode="&#xf10a;" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf10b;" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf10c;" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf10d;" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
+<glyph unicode="&#xf10e;" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
+<glyph unicode="&#xf110;" horiz-adv-x="1568" d="M496 192q0 -60 -42.5 -102t-101.5 -42q-60 0 -102 42t-42 102t42 102t102 42q59 0 101.5 -42t42.5 -102zM928 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -66 -47 -113t-113 -47t-113 47t-47 113 t47 113t113 47t113 -47t47 -113zM1360 192q0 -46 -33 -79t-79 -33t-79 33t-33 79t33 79t79 33t79 -33t33 -79zM528 1088q0 -73 -51.5 -124.5t-124.5 -51.5t-124.5 51.5t-51.5 124.5t51.5 124.5t124.5 51.5t124.5 -51.5t51.5 -124.5zM992 1280q0 -80 -56 -136t-136 -56 t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1536 640q0 -40 -28 -68t-68 -28t-68 28t-28 68t28 68t68 28t68 -28t28 -68zM1328 1088q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5z" />
+<glyph unicode="&#xf111;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf112;" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
+<glyph unicode="&#xf113;" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" />
+<glyph unicode="&#xf114;" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf115;" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " />
+<glyph unicode="&#xf116;" horiz-adv-x="1792" />
+<glyph unicode="&#xf117;" horiz-adv-x="1792" />
+<glyph unicode="&#xf118;" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf119;" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf11a;" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf11b;" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
+<glyph unicode="&#xf11c;" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf11d;" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+<glyph unicode="&#xf11e;" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+<glyph unicode="&#xf120;" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" />
+<glyph unicode="&#xf121;" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
+<glyph unicode="&#xf122;" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
+<glyph unicode="&#xf123;" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
+<glyph unicode="&#xf124;" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
+<glyph unicode="&#xf125;" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf126;" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
+<glyph unicode="&#xf127;" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+<glyph unicode="&#xf128;" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
+<glyph unicode="&#xf129;" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf12a;" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
+<glyph unicode="&#xf12b;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" />
+<glyph unicode="&#xf12c;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" />
+<glyph unicode="&#xf12d;" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
+<glyph unicode="&#xf12e;" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
+<glyph unicode="&#xf130;" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
+<glyph unicode="&#xf131;" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
+<glyph unicode="&#xf132;" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf133;" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf134;" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
+<glyph unicode="&#xf135;" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
+<glyph unicode="&#xf136;" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
+<glyph unicode="&#xf137;" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf138;" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf139;" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf13a;" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf13b;" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
+<glyph unicode="&#xf13c;" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
+<glyph unicode="&#xf13d;" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf13e;" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" />
+<glyph unicode="&#xf140;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf141;" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf142;" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf143;" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf144;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" />
+<glyph unicode="&#xf145;" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
+<glyph unicode="&#xf146;" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
+<glyph unicode="&#xf147;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf148;" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
+<glyph unicode="&#xf149;" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
+<glyph unicode="&#xf14a;" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14b;" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14c;" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14d;" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14e;" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf150;" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf151;" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf152;" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf153;" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
+<glyph unicode="&#xf154;" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
+<glyph unicode="&#xf155;" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" />
+<glyph unicode="&#xf156;" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf157;" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
+<glyph unicode="&#xf158;" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
+<glyph unicode="&#xf159;" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf15a;" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
+<glyph unicode="&#xf15b;" horiz-adv-x="1280" d="M1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
+<glyph unicode="&#xf15c;" horiz-adv-x="1280" d="M1024 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1024 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28 t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
+<glyph unicode="&#xf15d;" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" />
+<glyph unicode="&#xf15e;" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" />
+<glyph unicode="&#xf160;" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf161;" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf162;" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
+<glyph unicode="&#xf163;" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
+<glyph unicode="&#xf164;" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
+<glyph unicode="&#xf165;" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
+<glyph unicode="&#xf166;" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf167;" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
+<glyph unicode="&#xf168;" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" />
+<glyph unicode="&#xf169;" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf16a;" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
+<glyph unicode="&#xf16b;" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
+<glyph unicode="&#xf16c;" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" />
+<glyph unicode="&#xf16d;" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" />
+<glyph unicode="&#xf16e;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
+<glyph unicode="&#xf170;" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf171;" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
+<glyph unicode="&#xf172;" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf173;" horiz-adv-x="1024" d="M390 1408h219v-388h364v-241h-364v-394q0 -136 14 -172q13 -37 52 -60q50 -31 117 -31q117 0 232 76v-242q-102 -48 -178 -65q-77 -19 -173 -19q-105 0 -186 27q-78 25 -138 75q-58 51 -79 105q-22 54 -22 161v539h-170v217q91 30 155 84q64 55 103 132q39 78 54 196z " />
+<glyph unicode="&#xf174;" d="M1123 127v181q-88 -56 -174 -56q-51 0 -88 23q-29 17 -39 45q-11 30 -11 129v295h274v181h-274v291h-164q-11 -90 -40 -147t-78 -99q-48 -40 -116 -63v-163h127v-404q0 -78 17 -121q17 -42 59 -78q43 -37 104 -57q62 -20 140 -20q67 0 129 14q57 13 134 49zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf175;" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
+<glyph unicode="&#xf176;" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
+<glyph unicode="&#xf177;" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf178;" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
+<glyph unicode="&#xf179;" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
+<glyph unicode="&#xf17a;" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
+<glyph unicode="&#xf17b;" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
+<glyph unicode="&#xf17c;" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
+<glyph unicode="&#xf17d;" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf17e;" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
+<glyph unicode="&#xf180;" horiz-adv-x="1664" d="M1483 512l-587 -587q-52 -53 -127.5 -53t-128.5 53l-587 587q-53 53 -53 128t53 128l587 587q53 53 128 53t128 -53l265 -265l-398 -399l-188 188q-42 42 -99 42q-59 0 -100 -41l-120 -121q-42 -40 -42 -99q0 -58 42 -100l406 -408q30 -28 67 -37l6 -4h28q60 0 99 41 l619 619l2 -3q53 -53 53 -128t-53 -128zM1406 1138l120 -120q14 -15 14 -36t-14 -36l-730 -730q-17 -15 -37 -15v0q-4 0 -6 1q-18 2 -30 14l-407 408q-14 15 -14 36t14 35l121 120q13 15 35 15t36 -15l252 -252l574 575q15 15 36 15t36 -15z" />
+<glyph unicode="&#xf181;" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf182;" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf183;" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf184;" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf185;" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
+<glyph unicode="&#xf186;" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
+<glyph unicode="&#xf187;" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf188;" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
+<glyph unicode="&#xf189;" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" />
+<glyph unicode="&#xf18a;" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
+<glyph unicode="&#xf18b;" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
+<glyph unicode="&#xf18c;" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
+<glyph unicode="&#xf18d;" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " />
+<glyph unicode="&#xf18e;" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf190;" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf191;" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf192;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf193;" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
+<glyph unicode="&#xf194;" d="M1254 899q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 113.5 -16t26.5 -99q-5 -52 -52 -143q-43 -78 -71 -99q-44 -32 -87 14q-23 24 -37.5 64.5t-19 73t-10 84t-8.5 71.5q-23 129 -34 164q-12 37 -35.5 69 t-50.5 40q-57 16 -127 -25q-54 -32 -136.5 -106t-122.5 -102v-7q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t76 31.5q131 77 250 237 q104 139 172.5 292.5t82.5 226.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf195;" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf196;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf197;" horiz-adv-x="1792" />
+<glyph unicode="&#xf198;" horiz-adv-x="1792" />
+<glyph unicode="&#xf199;" horiz-adv-x="1792" />
+<glyph unicode="&#xf19a;" horiz-adv-x="1792" />
+<glyph unicode="&#xf19b;" horiz-adv-x="1792" />
+<glyph unicode="&#xf19c;" horiz-adv-x="1792" />
+<glyph unicode="&#xf19d;" horiz-adv-x="1792" />
+<glyph unicode="&#xf19e;" horiz-adv-x="1792" />
+<glyph unicode="&#xf500;" horiz-adv-x="1792" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.ttf b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000..e89738d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.ttf
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.woff b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000..8c1748a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.woff
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/i18n.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/i18n.js
new file mode 100644
index 0000000..de0fc51
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/i18n.js
@@ -0,0 +1,93 @@
+(function() {
+	/**
+	 * provides text formatting and i18n key storage features<br>
+	 * implements most of the Sun Java MessageFormat functionality.
+	 * @see <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/text/MessageFormat.html" target="sun">Sun's Documentation</a>
+	 */
+
+	var keys = {};
+
+	var format = function(message, args) {
+		var substitute = function() {
+			var format = arguments[1].split(',');
+			var substr = escape(args[format.shift()]);
+			if(format.length === 0) {
+				return substr; // simple substitution eg {0}
+			}
+			switch(format.shift()) {
+				case "number" : return (new Number(substr)).toLocaleString();
+				case "date" : return (new Date(+substr)).toLocaleDateString(); // date and time require milliseconds since epoch
+				case "time" : return (new Date(+substr)).toLocaleTimeString(); //  eg i18n.text("Key", +(new Date())); for current time
+			}
+			var styles = format.join("").split("|").map(function(style) {
+				return style.match(/(-?[\.\d]+)(#|<)([^{}]*)/);
+			});
+			var match = styles[0][3];
+			for(var i=0; i<styles.length; i++) {
+				if((styles[i][2] === "#" && (+styles[i][1]) === (+substr)) ||
+						(styles[i][2] === "<" && ((+styles[i][1]) < (+substr)))) {
+					match = styles[i][3];
+				}
+			}
+			return match;
+		};
+
+		return message && message.replace(/'(')|'([^']+)'|([^{']+)|([^']+)/g, function(x, sq, qs, ss, sub) {
+			do {} while(sub && (sub !== (sub = (sub.replace(/\{([^{}]+)\}/, substitute)))));
+			return sq || qs || ss || unescape(sub);
+		});
+	};
+
+	this.i18n = {
+
+		setKeys: function(strings) {
+			for(var key in strings) {
+				keys[key] = strings[key];
+			}
+		},
+
+		text: function() {
+			var args = Array.prototype.slice.call(arguments),
+				key = keys[args.shift()];
+			if(args.length === 0) {
+				return key;
+			}
+			return format(key, args);
+		},
+
+		complex: function() {
+			var args = Array.prototype.slice.call(arguments),
+				key = keys[args.shift()],
+				ret = [],
+				replacer = function(x, pt, sub) { ret.push(pt || args[+sub]); return ""; };
+			do {} while(key && key !== (key = key.replace(/([^{]+)|\{(\d+)\}/, replacer )));
+			return ret;
+		}
+
+	};
+
+})();
+
+(function() {
+	var nav = window.navigator;
+	var userLang = ( nav.languages && nav.languages[0] ) || nav.language || nav.userLanguage;
+	var scripts = document.getElementsByTagName('script');
+	var data = scripts[ scripts.length - 1].dataset;
+	if( ! data["langs"] ) {
+		return;
+	}
+	var langs = data["langs"].split(/\s*,\s*/);
+	var script0 = scripts[0];
+	function install( lang ) {
+		var s = document.createElement("script");
+		s.src = data["basedir"] + "/" + lang + '_strings.js';
+		s.async = false;
+		script0.parentNode.appendChild(s);
+		script0 = s;
+	}
+
+	install( langs.shift() ); // always install primary language
+	userLang && langs
+		.filter( function( lang ) { return userLang.indexOf( lang ) === 0; } )
+		.forEach( install );
+}());
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/index.html b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/index.html
new file mode 100644
index 0000000..4e07bab
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/index.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+
+<html>
+	<head>
+		<meta charset="UTF-8">
+		<title>elasticsearch-head</title>
+		<link rel="stylesheet" href="base/reset.css">
+		<link rel="stylesheet" href="vendor.css">
+		<link rel="stylesheet" href="app.css">
+		<script src="i18n.js" data-baseDir="lang" data-langs="en,fr,pt,zh,tr"></script>
+		<script src="vendor.js"></script>
+		<script src="app.js"></script>
+		<script>
+			window.onload = function() {
+				if(location.href.contains("/_plugin/")) {
+					var base_uri = location.href.replace(/_plugin\/.*/, '');
+				}
+				var args = location.search.substring(1).split("&").reduce(function(r, p) {
+					r[decodeURIComponent(p.split("=")[0])] = decodeURIComponent(p.split("=")[1]); return r;
+				}, {});
+				new app.App("body", {
+					id: "es",
+					base_uri: args["base_uri"] || base_uri,
+					auth_user : args["auth_user"] || "",
+					auth_password : args["auth_password"],
+					dashboard: args["dashboard"]
+				});
+			};
+		</script>
+		<link rel="icon" href="base/favicon.png" type="image/png">
+	</head>
+	<body></body>
+</html>
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/lang/en_strings.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/lang/en_strings.js
new file mode 100644
index 0000000..3679dfb
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/lang/en_strings.js
@@ -0,0 +1,177 @@
+i18n.setKeys({
+	"General.Elasticsearch": "Elasticsearch",
+	"General.LoadingAggs": "Loading Aggregations...",
+	"General.Searching": "Searching...",
+	"General.Search": "Search",
+	"General.Help": "Help",
+	"General.HelpGlyph": "?",
+	"General.CloseGlyph": "X",
+	"General.RefreshResults": "Refresh",
+	"General.ManualRefresh": "Manual Refresh",
+	"General.RefreshQuickly": "Refresh quickly",
+	"General.Refresh5seconds": "Refresh every 5 seconds",
+	"General.Refresh1minute": "Refresh every minute",
+	"AliasForm.AliasName": "Alias Name",
+	"AliasForm.NewAliasForIndex": "New Alias for {0}",
+	"AliasForm.DeleteAliasMessage": "type ''{0}'' to delete {1}. There is no undo",
+	"AnyRequest.DisplayOptions" : "Display Options",
+	"AnyRequest.AsGraph" : "Graph Results",
+	"AnyRequest.AsJson" : "Show Raw JSON",
+	"AnyRequest.AsTable" : "Show Search Results Table",
+	"AnyRequest.History" : "History",
+	"AnyRequest.RepeatRequest" : "Repeat Request",
+	"AnyRequest.RepeatRequestSelect" : "Repeat request every ",
+	"AnyRequest.Transformer" : "Result Transformer",
+	"AnyRequest.Pretty": "Pretty",
+	"AnyRequest.Query" : "Query",
+	"AnyRequest.Request": "Request",
+	"AnyRequest.Requesting": "Requesting...",
+	"AnyRequest.ValidateJSON": "Validate JSON",
+	"Browser.Title": "Browser",
+	"Browser.ResultSourcePanelTitle": "Result Source",
+	"Command.DELETE": "DELETE",
+	"Command.SHUTDOWN": "SHUTDOWN",
+	"Command.DeleteAliasMessage": "Delete Alias?",
+	"ClusterOverView.IndexName": "Index Name",
+	"ClusterOverview.NumShards": "Number of Shards",
+	"ClusterOverview.NumReplicas": "Number of Replicas",
+	"ClusterOverview.NewIndex": "New Index",
+	"IndexActionsMenu.Title": "Actions",
+	"IndexActionsMenu.NewAlias": "New Alias...",
+	"IndexActionsMenu.Refresh": "Refresh",
+	"IndexActionsMenu.Flush": "Flush",
+	"IndexActionsMenu.Optimize": "Optimize...",
+	"IndexActionsMenu.Snapshot": "Gateway Snapshot",
+	"IndexActionsMenu.Analyser": "Test Analyser",
+	"IndexActionsMenu.Open": "Open",
+	"IndexActionsMenu.Close": "Close",
+	"IndexActionsMenu.Delete": "Delete...",
+	"IndexInfoMenu.Title": "Info",
+	"IndexInfoMenu.Status": "Index Status",
+	"IndexInfoMenu.Metadata": "Index Metadata",
+	"IndexCommand.TextToAnalyze": "Text to Analyse",
+	"IndexCommand.ShutdownMessage": "type ''{0}'' to shutdown {1}. Node can NOT be restarted from this interface",
+	"IndexOverview.PageTitle": "Indices Overview",
+	"IndexSelector.NameWithDocs": "{0} ({1} docs)",
+	"IndexSelector.SearchIndexForDocs": "Search {0} for documents where:",
+	"FilterBrowser.OutputType": "Output Results: {0}",
+	"FilterBrowser.OutputSize": "Number of Results: {0}",
+	"Header.ClusterHealth": "cluster health: {0} ({1} of {2})",
+	"Header.ClusterNotConnected": "cluster health: not connected",
+	"Header.Connect": "Connect",
+	"Nav.AnyRequest": "Any Request",
+	"Nav.Browser": "Browser",
+	"Nav.ClusterHealth": "Cluster Health",
+	"Nav.ClusterState": "Cluster State",
+	"Nav.ClusterNodes": "Nodes Info",
+	"Nav.Info": "Info",
+	"Nav.NodeStats": "Nodes Stats",
+	"Nav.Overview": "Overview",
+	"Nav.Indices": "Indices",
+	"Nav.Plugins": "Plugins",
+	"Nav.Status": "Indices Stats",
+	"Nav.Templates": "Templates",
+	"Nav.StructuredQuery": "Structured Query",
+	"NodeActionsMenu.Title": "Actions",
+	"NodeActionsMenu.Shutdown": "Shutdown...",
+	"NodeInfoMenu.Title": "Info",
+	"NodeInfoMenu.ClusterNodeInfo": "Cluster Node Info",
+	"NodeInfoMenu.NodeStats": "Node Stats",
+	"NodeType.Client": "Client Node",
+	"NodeType.Coord": "Coordinator",
+	"NodeType.Master": "Master Node",
+	"NodeType.Tribe": "Tribe Node",
+	"NodeType.Worker": "Worker Node",
+	"NodeType.Unassigned": "Unassigned",
+	"OptimizeForm.OptimizeIndex": "Optimize {0}",
+	"OptimizeForm.MaxSegments": "Maximum # Of Segments",
+	"OptimizeForm.ExpungeDeletes": "Only Expunge Deletes",
+	"OptimizeForm.FlushAfter": "Flush After Optimize",
+	"OptimizeForm.WaitForMerge": "Wait For Merge",
+	"Overview.PageTitle" : "Cluster Overview",
+	"Output.JSON": "JSON",
+	"Output.Table": "Table",
+	"Output.CSV": "CSV",
+	"Output.ShowSource": "Show query source",
+	"Preference.SortCluster": "Sort Cluster",
+	"Sort.ByName": "By Name",
+	"Sort.ByAddress": "By Address",
+	"Sort.ByType": "By Type",
+	"Preference.SortIndices": "Sort Indices",
+	"SortIndices.Descending": "Descending",
+	"SortIndices.Ascending": "Ascending",
+	"Preference.ViewAliases": "View Aliases",
+	"ViewAliases.Grouped": "Grouped",
+	"ViewAliases.List": "List",
+	"ViewAliases.None": "None",
+	"Overview.IndexFilter": "Index Filter",
+	"TableResults.Summary": "Searched {0} of {1} shards. {2} hits. {3} seconds",
+	"QueryFilter.AllIndices": "All Indices",
+	"QueryFilter.AnyValue": "any",
+	"QueryFilter-Header-Indices": "Indices",
+	"QueryFilter-Header-Types": "Types",
+	"QueryFilter-Header-Fields": "Fields",
+	"QueryFilter.DateRangeHint.from": "From : {0}",
+	"QueryFilter.DateRangeHint.to": "  To : {0}",
+	"Query.FailAndUndo": "Query Failed. Undoing last changes",
+	"StructuredQuery.ShowRawJson": "Show Raw JSON"
+});
+
+i18n.setKeys({
+	"AnyRequest.TransformerHelp" : "\
+		<p>The Result Transformer can be used to post process the raw json results from a request into a more useful format.</p>\
+		<p>The transformer should contain the body of a javascript function. The return value from the function becomes the new value passed to the json printer</p>\
+		<p>Example:<br>\
+		  <code>return root.hits.hits[0];</code> would traverse a result set to show just the first match<br>\
+		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code> would return the total memory used across an entire cluster<br></p>\
+		<p>The following functions are available and can be useful processing arrays and objects<br>\
+		<ul>\
+			<li><i>Object.keys</i>(object) := array</li>\
+			<li>array.<i>forEach</i>(function(prop, index))</li>\
+			<li>array.<i>map</i>(function(prop, index)) := array</li>\
+			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
+		</ul>\
+		<p>When Repeat Request is running, an extra parameter called prev is passed to the transformation function. This allows comparisons, and cumulative graphing</p>\
+		<p>Example:<br>\
+		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code> would return the load average on the first cluster node over the last minute\
+		This could be fed into the Graph to produce a load graph for the node\
+		"
+});
+
+i18n.setKeys({
+	"AnyRequest.DisplayOptionsHelp" : "\
+		<p>Raw Json: shows complete results of the query and transformation in raw JSON format </p>\
+		<p>Graph Results: To produce a graph of your results, use the result transformer to produce an array of values</p>\
+		<p>Search Results Table: If your query is a search, you can display the results of the search in a table.</p>\
+		"
+});
+
+i18n.setKeys({
+	"QueryFilter.DateRangeHelp" : "\
+		<p>Date fields accept a natural language query to produce a From and To date that form a range that the results are queried over.</p>\
+		<p>The following formats are supported:</p>\
+		<ul>\
+			<li><b>Keywords / Key Phrases</b><br>\
+				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
+				searches for dates matching the keyword. <code>last year</code> would search all of last year.</li>\
+			<li><b>Ranges</b><br>\
+				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (spaces optional, many synonyms for range qualifiers)<br>\
+				Create a search range centered on <code>now</code> extending into the past and future by the amount specified.</li>\
+			<li><b>DateTime and Partial DateTime</b><br>\
+				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
+				these formats specify a specific date range. <code>2011</code> would search the whole of 2011, while <code>2011-01-18 12:32:45</code> would only search for results in that 1 second range</li>\
+			<li><b>Time and Time Partials</b><br>\
+				<code>12<br> 12:32<br> 12:32:45</code><br>\
+				these formats search for a particular time during the current day. <code>12:32</code> would search that minute during today</li>\
+			<li><b>Date Ranges</b><br>\
+				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
+				A Date Range is created by specifying two dates in any format (Keyword / DateTime / Time) separated by &lt; or -&gt; (both do the same thing). If either end of the date range is missing, it is the same as having no constraint in that direction.</li>\
+			<li><b>Date Range using Offset</b><br>\
+				<code>2010 -> 1yr<br> 3mins < now</code>\
+				Searches the specified date including the range in the direction specified.</li>\
+			<li><b>Anchored Ranges</b><br>\
+				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
+				Similar to above except the range is extend in both directions from the anchor date</li>\
+		</ul>\
+	"
+});
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/lang/fr_strings.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/lang/fr_strings.js
new file mode 100644
index 0000000..2cc9bbb
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/lang/fr_strings.js
@@ -0,0 +1,164 @@
+i18n.setKeys({
+//	"General.Elasticsearch": "Elasticsearch",
+	"General.LoadingAggs" : "Chargement des facettes...",
+	"General.Searching": "Recherche en cours...",
+	"General.Search": "Recherche",
+	"General.Help": "Aide",
+//	"General.HelpGlyph": "?",
+//	"General.CloseGlyph": "X",
+	"General.RefreshResults": "Rafraîchir",
+	"General.ManualRefresh": "Rafraîchissement manuel",
+	"General.RefreshQuickly": "Rafraîchissement rapide",
+	"General.Refresh5seconds": "Rafraîchissement toutes les 5 secondes",
+	"General.Refresh1minute": "Rafraîchissement toutes les minutes",
+	"AliasForm.AliasName": "Alias",
+	"AliasForm.NewAliasForIndex": "Nouvel Alias pour {0}",
+	"AliasForm.DeleteAliasMessage": "Entrez ''{0}'' pour effacer {1}. Attention, action irréversible.",
+	"AnyRequest.DisplayOptions" : "Options d'affichage",
+	"AnyRequest.AsGraph" : "En graphe",
+	"AnyRequest.AsJson" : "En JSON brut",
+	"AnyRequest.AsTable" : "En tableau",
+	"AnyRequest.History" : "Historique",
+	"AnyRequest.RepeatRequest" : "Répétition automatique de la requête",
+	"AnyRequest.RepeatRequestSelect" : "Répéter la requête toutes les ",
+	"AnyRequest.Transformer" : "Transformation des résultats",
+//	"AnyRequest.Pretty": "Pretty",
+	"AnyRequest.Query" : "Recherche",
+	"AnyRequest.Request": "Requête",
+	"AnyRequest.Requesting": "Requête en cours...",
+	"AnyRequest.ValidateJSON": "Valider le JSON",
+	"Browser.Title": "Navigateur",
+	"Browser.ResultSourcePanelTitle": "Résultat au format JSON",
+	"Command.DELETE": "SUPPRIMER",
+	"Command.SHUTDOWN": "ETEINDRE",
+	"Command.DeleteAliasMessage": "Supprimer l'Alias?",
+	"ClusterOverView.IndexName": "Index",
+	"ClusterOverview.NumShards": "Nombre de shards",
+	"ClusterOverview.NumReplicas": "Nombre de replica",
+	"ClusterOverview.NewIndex": "Nouvel Index",
+//	"IndexActionsMenu.Title": "Actions",
+	"IndexActionsMenu.NewAlias": "Nouvel Alias...",
+	"IndexActionsMenu.Refresh": "Rafraîchir",
+	"IndexActionsMenu.Flush": "Flusher",
+	"IndexActionsMenu.Optimize": "Optimiser...",
+	"IndexActionsMenu.Snapshot": "Dupliquer l'index (Snapshot)",
+	"IndexActionsMenu.Analyser": "Tester un analyseur",
+	"IndexActionsMenu.Open": "Ouvrir",
+	"IndexActionsMenu.Close": "Fermer",
+	"IndexActionsMenu.Delete": "Effacer...",
+//	"IndexInfoMenu.Title": "Info",
+	"IndexInfoMenu.Status": "Etat de l'Index",
+	"IndexInfoMenu.Metadata": "Métadonnées de l'Index",
+	"IndexCommand.TextToAnalyze": "Texte à analyser",
+	"IndexCommand.ShutdownMessage": "Entrez ''{0}'' pour éteindre {1}. Le noeud NE PEUT PAS être redémarré depuis cette interface.",
+//	"IndexSelector.NameWithDocs": "{0} ({1} docs)",
+	"IndexSelector.SearchIndexForDocs": "Chercher dans {0} les documents correspondant à",
+	"FilterBrowser.OutputType": "Format d'affichage des résultats {0}",
+	"FilterBrowser.OutputSize": "Nombre de Résultats: {0}",
+	"Header.ClusterHealth": "Santé du cluster: {0} ({1} {2})",
+	"Header.ClusterNotConnected": "Santé du cluster: non connecté",
+	"Header.Connect": "Se connecter",
+	"Nav.AnyRequest": "Autres requêtes",
+	"Nav.StructuredQuery": "Requêtes structurées",
+	"Nav.Browser": "Navigateur",
+	"Nav.ClusterHealth": "Santé du cluster",
+	"Nav.ClusterState": "Etat du cluster",
+	"Nav.ClusterNodes": "Noeuds du cluster",
+//	"Nav.Info": "Info",
+	"Nav.NodeStats": "Statistiques sur les noeuds",
+	"Nav.Overview": "Aperçu",
+	"Nav.Indices": "Index",
+	"Nav.Plugins": "Plugins",
+	"Nav.Status": "Etat",
+	"Nav.Templates": "Templates",
+	"Nav.StructuredQuery": "Recherche Structurée",
+//	"NodeActionsMenu.Title": "Actions",
+	"NodeActionsMenu.Shutdown": "Eteindre...",
+//	"NodeInfoMenu.Title": "Info",
+	"NodeInfoMenu.ClusterNodeInfo": "Infos sur le noeud du cluster",
+	"NodeInfoMenu.NodeStats": "Statistiques du noeud",
+	"NodeType.Client": "Noeud Client",
+	"NodeType.Coord": "Coordinateur",
+	"NodeType.Master": "Noeud Master",
+	"NodeType.Tribe": "Noeud Tribe",
+	"NodeType.Worker": "Noeud Worker",
+	"NodeType.Unassigned": "Non assigné",
+	"OptimizeForm.OptimizeIndex": "Optimiser {0}",
+	"OptimizeForm.MaxSegments": "Nombre maximum de segments",
+	"OptimizeForm.ExpungeDeletes": "Seulement purger les suppressions",
+	"OptimizeForm.FlushAfter": "Flusher après l'optimisation",
+	"OptimizeForm.WaitForMerge": "Attendre la fin de la fusion",
+	"Overview.PageTitle" : "Aperçu du cluster",
+//	"Output.JSON": "JSON",
+	"Output.Table": "Tableau",
+	"Output.ShowSource": "Voir la requête source",
+    "TableResults.Summary": "Recherche sur {0} des {1} shards. {2} résultats. {3} secondes",
+	"QueryFilter.AllIndices": "Tous les index",
+	"QueryFilter.AnyValue": "Tout",
+	"QueryFilter-Header-Indices": "Index",
+//	"QueryFilter-Header-Types": "Types",
+	"QueryFilter-Header-Fields": "Champs",
+	"QueryFilter.DateRangeHint.from": "De : {0}",
+	"QueryFilter.DateRangeHint.to": "  A : {0}",
+	"Query.FailAndUndo": "Requête en échec. Annulation des dernières modifications.",
+	"StructuredQuery.ShowRawJson": "Voir le JSON brut"
+});
+
+i18n.setKeys({
+	"AnyRequest.TransformerHelp" : "\
+		<p>Le transformateur de résultats peut être utilisé pour modifier a posteriori les résultats JSON bruts dans un format plus utile.</p>\
+		<p>Le transformateur devrait contenir le corps d'une fonction javascript. La valeur de retour de la fonction devient la nouvelle valeur qui sera passée à l'afficheur des documents JSON.</p>\
+		<p>Exemple:<br>\
+		  <code>return root.hits.hits[0];</code> ne renverra que le premier élément de l'ensemble des résultats.<br>\
+		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code> retournera la mémoire totale utilisée dans l'ensemble du cluster.<br></p>\
+		<p>Les fonctions suivantes sont disponibles et peuvent vous être utiles pour travailler sur les tableaux et les objets:<br>\
+		<ul>\
+			<li><i>Object.keys</i>(object) := array</li>\
+			<li>array.<i>forEach</i>(function(prop, index))</li>\
+			<li>array.<i>map</i>(function(prop, index)) := array</li>\
+			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
+		</ul>\
+		<p>Lorsque vous activez la répétition automatique de la requête, un paramètre supplémentaire nommé prev est passé à la fonction de transformation. Cela permet les comparaisons et les graphes cumulatifs.</p>\
+		<p>Exemple:<br>\
+		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code> retournera la charge moyenne du premier noeud du cluster pour la dernière minute écoulée.\
+		Cela peut alimenter ensuite le graphe pour produire un graphe de charge du noeud.\
+		"
+});
+
+i18n.setKeys({
+	"AnyRequest.DisplayOptionsHelp" : "\
+		<p>En JSON brut: affiche les résultats complets de la recherche éventuellement transformée au format JSON brut.</p>\
+		<p>En graphe: pour fabriquer un graphe de vos résultats, utilsez la transformation de résultats pour générer un tableau de valeurs.</p>\
+		<p>En tableau: si votre requête est une recherche, vous pouvez alors afficher les résultats dans un tableau.</p>\
+		"
+});
+
+i18n.setKeys({
+	"QueryFilter.DateRangeHelp" : "\
+		<p>Les champs Date acceptent une requête en langage naturel pour produire un écart de date (from/to) correspondant.</p>\
+		<p>Les formats suivants sont acceptés :</p>\
+		<ul>\
+			<li><b>Mots clés</b><br>\
+				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
+				Cherchera pour des dates correspondant au mot clé. <code>last year</code> cherchera sur toute l'année précédente.</li>\
+			<li><b>Ecarts</b><br>\
+				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (les espaces sont optionnels et il existe beaucoup de synonymes pour qualifier les écarts)<br>\
+				Créé un écart de date basé sur l'heure courante (maintenant) avec plus ou moins l'écart indiqué.</li>\
+			<li><b>Dates et Dates partielles</b><br>\
+				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
+				Ces formats indiquent un écart de date spécifique. <code>2011</code> cherchera sur toute l'année 2011, alors que <code>2011-01-18 12:32:45</code> ne cherchera que pour la date précise à la seconde près.</li>\
+			<li><b>Heures et heures partielles</b><br>\
+				<code>12<br> 12:32<br> 12:32:45</code><br>\
+				Ces formats indiquent un espace de temps pour la date du jour. <code>12:32</code> cherchera les éléments d'aujourd'hui à cette minute précise.</li>\
+			<li><b>Ecart de Date</b><br>\
+				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
+				Un écart de date est créé en spécifiant deux dates dans n'importe lequel des formats précédents (Mot clé / Dates / Heures) séparées par &lt; ou -&gt; (les deux produisent le même effet). Si la date de fin n'est pas indiquée, alors il n'y aura aucune contrainte de fin.</li>\
+			<li><b>Ecart de date avec décalage</b><br>\
+				<code>2010 -> 1yr<br> 3mins < now</code>\
+				Cherche en incluant un décalage de la date dans la direction indiquée.</li>\
+			<li><b>Ecart de date avec bornes</b><br>\
+				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
+				Similaire à ci-dessus excepté que le décalage est appliqué dans les deux sens à partir de la date indiquée.</li>\
+		</ul>\
+	"
+});
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/lang/pt_strings.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/lang/pt_strings.js
new file mode 100644
index 0000000..d4b6abf
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/lang/pt_strings.js
@@ -0,0 +1,174 @@
+i18n.setKeys({
+	"General.Elasticsearch": "Elasticsearch",
+	"General.LoadingAggs": "Carregando Facetas...",
+	"General.Searching": "Buscando...",
+	"General.Search": "Busca",
+	"General.Help": "Ajuda",
+	"General.HelpGlyph": "?",
+	"General.CloseGlyph": "X",
+	"General.RefreshResults": "Atualizar",
+	"General.ManualRefresh": "Atualização Manual",
+	"General.RefreshQuickly": "Atualização rápida",
+	"General.Refresh5seconds": "Atualização a cada 5 segundos",
+	"General.Refresh1minute": "Atualização a cada minuto",
+	"AliasForm.AliasName": "Apelido",
+	"AliasForm.NewAliasForIndex": "Novo apelido para {0}",
+	"AliasForm.DeleteAliasMessage": "digite ''{0}'' para deletar {1}. Não há como voltar atrás",
+	"AnyRequest.DisplayOptions" : "Mostrar Opções",
+	"AnyRequest.AsGraph" : "Mostrar como gráfico",
+	"AnyRequest.AsJson" : "Mostrar JSON bruto",
+	"AnyRequest.AsTable" : "Mostrar tabela de resultados da consulta",
+	"AnyRequest.History" : "Histórico",
+	"AnyRequest.RepeatRequest" : "Refazer requisição",
+	"AnyRequest.RepeatRequestSelect" : "Repetir requisição a cada ",
+	"AnyRequest.Transformer" : "Transformador de resultado",
+	"AnyRequest.Pretty": "Amigável",
+	"AnyRequest.Query" : "Consulta",
+	"AnyRequest.Request": "Requisição",
+	"AnyRequest.Requesting": "Realizando requisição...",
+	"AnyRequest.ValidateJSON": "Validar JSON",
+	"Browser.Title": "Navegador",
+	"Browser.ResultSourcePanelTitle": "Resultado",
+	"Command.DELETE": "DELETAR",
+	"Command.SHUTDOWN": "DESLIGAR",
+	"Command.DeleteAliasMessage": "Remover apelido?",
+	"ClusterOverView.IndexName": "Nome do índice",
+	"ClusterOverview.NumShards": "Número de Shards",
+	"ClusterOverview.NumReplicas": "Número de Réplicas",
+	"ClusterOverview.NewIndex": "Novo índice",
+	"IndexActionsMenu.Title": "Ações",
+	"IndexActionsMenu.NewAlias": "Novo apelido...",
+	"IndexActionsMenu.Refresh": "Atualizar",
+	"IndexActionsMenu.Flush": "Flush",
+	"IndexActionsMenu.Optimize": "Otimizar...",
+	"IndexActionsMenu.Snapshot": "Snapshot do Gateway",
+	"IndexActionsMenu.Analyser": "Analizador de teste",
+	"IndexActionsMenu.Open": "Abrir",
+	"IndexActionsMenu.Close": "Fechar",
+	"IndexActionsMenu.Delete": "Deletar...",
+	"IndexInfoMenu.Title": "Info",
+	"IndexInfoMenu.Status": "Status do índice",
+	"IndexInfoMenu.Metadata": "Metadados do índice",
+	"IndexCommand.TextToAnalyze": "Texto para analizar",
+	"IndexCommand.ShutdownMessage": "digite ''{0}'' para desligar {1}. Nó NÃO PODE ser reiniciado à partir dessa interface",
+	"IndexOverview.PageTitle": "Visão geral dos índices",
+	"IndexSelector.NameWithDocs": "{0} ({1} documentoss)",
+	"IndexSelector.SearchIndexForDocs": "Busca {0} por documentos onde:",
+	"FilterBrowser.OutputType": "Resultados: {0}",
+	"FilterBrowser.OutputSize": "Número de Resultados: {0}",
+	"Header.ClusterHealth": "saúde do cluster: {0} ({1} {2})",
+	"Header.ClusterNotConnected": "saúde do cluster: não conectado",
+	"Header.Connect": "Conectar",
+	"Nav.AnyRequest": "Qualquer requisição",
+	"Nav.Browser": "Navegador",
+	"Nav.ClusterHealth": "Saúde do Cluster",
+	"Nav.ClusterState": "Estado do Cluster",
+	"Nav.ClusterNodes": "Nós do Cluster",
+	"Nav.Info": "Informações",
+	"Nav.NodeStats": "Estatísticas do nó",
+	"Nav.Overview": "Visão Geral",
+	"Nav.Indices": "Índices",
+	"Nav.Plugins": "Plugins",
+	"Nav.Status": "Status",
+	"Nav.Templates": "Modelos",
+	"Nav.StructuredQuery": "Consulta Estruturada",
+	"NodeActionsMenu.Title": "Ações",
+	"NodeActionsMenu.Shutdown": "Desligar...",
+	"NodeInfoMenu.Title": "Informações",
+	"NodeInfoMenu.ClusterNodeInfo": "Informações do Nó do Cluster",
+	"NodeInfoMenu.NodeStats": "Estatísticas do Nó",
+	"NodeType.Client": "Nó cliente",
+	"NodeType.Coord": "Coordenador",
+	"NodeType.Master": "Nó mestre",
+	"NodeType.Tribe": "Nó tribo",
+	"NodeType.Worker": "Nó trabalhador",
+	"NodeType.Unassigned": "Não atribuido",
+	"OptimizeForm.OptimizeIndex": "Otimizar {0}",
+	"OptimizeForm.MaxSegments": "# Máximo De Segmentos",
+	"OptimizeForm.ExpungeDeletes": "Apenas Expurgar Exclusões",
+	"OptimizeForm.FlushAfter": "Flush após Otimizar",
+	"OptimizeForm.WaitForMerge": "Esperar Por Merge",
+	"Overview.PageTitle": "Visão geral do Cluster",
+	"Output.JSON": "JSON",
+	"Output.Table": "Tabela",
+	"Output.CSV": "CSV",
+	"Output.ShowSource": "Mostrar consulta original",
+	"Preference.SortCluster": "Ordenar Cluster",
+	"Sort.ByName": "Por nome",
+	"Sort.ByAddress": "Por endereço",
+	"Sort.ByType": "Por tipo",
+	"Preference.ViewAliases": "Ver Alias",
+	"ViewAliases.Grouped": "Agrupado",
+	"ViewAliases.List": "Lista",
+	"ViewAliases.None": "Nenhum",
+	"Overview.IndexFilter": "Filtar Índice",
+	"TableResults.Summary": "Buscado {0} de {1} shards. {2} resultados. {3} segundos",
+	"QueryFilter.AllIndices": "Todos os Índices",
+	"QueryFilter.AnyValue": "qualquer",
+	"QueryFilter-Header-Indices": "Índices",
+	"QueryFilter-Header-Types": "Tipos",
+	"QueryFilter-Header-Fields": "Campos",
+	"QueryFilter.DateRangeHint.from": "De : {0}",
+	"QueryFilter.DateRangeHint.to": "  A : {0}",
+	"Query.FailAndUndo": "Consulta falhou. Desfazendo últimas alterações",
+	"StructuredQuery.ShowRawJson": "Mostrar JSON bruto"
+});
+
+i18n.setKeys({
+	"AnyRequest.TransformerHelp" : "\
+		<p>O Transformador de Resultados pode ser usado para transformar os resultados de uma consulta de json bruto para um formato mais útil.</p>\
+		<p>O transformador deve possuir o corpo de uma função javascript. O retorno da função se torna o novo valor passado para o json printer</p>\
+		<p>Exemplo:<br>\
+		  <code>return root.hits.hits[0];</code> irá alterar a resposta para mostrar apenas o primeiro resultado<br>\
+		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code> irá retornar o total de memória utilizada pelo cluster<br></p>\
+		<p>As seguintes funções estão disponíveis e podem ser úteis no processamento de vetores e objetos<br>\
+		<ul>\
+			<li><i>Object.keys</i>(object) := array</li>\
+			<li>array.<i>forEach</i>(function(prop, index))</li>\
+			<li>array.<i>map</i>(function(prop, index)) := array</li>\
+			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
+		</ul>\
+		<p>Durante a execução da opção Refazer Requisição, um parâmetro extra chamado prev é passado para a função de transformação. Isso permite fazer comparações e marcações cumulativas</p>\
+		<p>Exemplo:<br>\
+		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code> irá retornar a carga média no primeiro nó do cluster no último minuto\
+		Essa informação pode ser inserida no Gráfico para fazer um gráfico de carga do nó\
+		"
+});
+
+i18n.setKeys({
+	"AnyRequest.DisplayOptionsHelp" : "\
+		<p>Json Bruto: Exibe o resultado completo da consulta e da transformação no formato de JSON bruto</p>\
+		<p>Gráfico de Resultados: Para gerar um gráfico com seus resultados, utilize o tranformador de resultados para produzir um vetor de valores</p>\
+		<p>Tabela de Resultados da Consulta: Se sua consulta for uma busca, você pode exibir seus resultados no formato de uma tabela.</p>\
+		"
+});
+
+i18n.setKeys({
+	"QueryFilter.DateRangeHelp" : "\
+		<p>Campos do tipo Data aceitam consultas em linguagem natural (em inglês) para produzir um <i>From</i> e um <i>To</i> de modo a formar um intervalo dentro do qual os resultados são filtrados.</p>\
+		<p>Os seguintes formatos são suportados:</p>\
+		<ul>\
+			<li><b>Palavras-chave</b><br>\
+				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
+				buscam por datas de acordo com a palavra-chave. <code>last year</code> irá buscar tudo do último ano.</li>\
+			<li><b>Intervalos</b><br>\
+				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (espaços são opcionais, diversos sinônimos para qualificadores de intervalo)<br>\
+				Cria um intervalo de busca a partir de agora (<code>now</code>), extendendo este intervalo no passado e no futuro de acordo com intervalo especificado.</li>\
+			<li><b>Data/Hora (<i>DateTime</i>) e Data/Hora parcial</b><br>\
+				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
+				esses formatos especificam um intervalo especifico. <code>2011</code> irá buscar todo o ano de 2011, enquanto <code>2011-01-18 12:32:45</code> irá buscar apenas por resultados dentro deste intervalo de 1 segundo</li>\
+			<li><b>Tempo (<i>Time</i>) e Tempo parcial</b><br>\
+				<code>12<br> 12:32<br> 12:32:45</code><br>\
+				esses formatos buscam por um horário específico no dia atual. <code>12:32</code> irá buscar este minuto específico do dia</li>\
+			<li><b>Intervalos de Data</b><br>\
+				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
+				Um intervalo de data é criado especificando-se duas datas em qualquer formato (Palavras-chave, Data/Hora ou Tempo) separados por &lt; ou -&gt; (ambos fazem a mesma coisa). Se a data de início ou fim do intervalo não for especificada é a mesma coisa que não impor limites na busca nesta direção.</li>\
+			<li><b>Intervalo de Data com Deslocamento</b><br>\
+				<code>2010 -> 1yr<br> 3mins < now</code>\
+				Busca a data especificada incluindo o intervalo na direção determinada pelo deslocamento</li>\
+			<li><b>Intervalos Bidirecionais</b><br>\
+				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
+				Idêntico ao exemplo anterior porém o intervalo é extendido em ambas as direções a partir da data especificada</li>\
+		</ul>\
+	"
+});
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/lang/tr_strings.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/lang/tr_strings.js
new file mode 100644
index 0000000..f611956
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/lang/tr_strings.js
@@ -0,0 +1,177 @@
+i18n.setKeys({
+	"General.Elasticsearch": "Elasticsearch",
+	"General.LoadingAggs": "Gruplar Yükleniyor...",
+	"General.Searching": "Aranıyor...",
+	"General.Search": "Ara",
+	"General.Help": "Yardım",
+	"General.HelpGlyph": "?",
+	"General.CloseGlyph": "X",
+	"General.RefreshResults": "Yenile",
+	"General.ManualRefresh": "Manuel Yenileme",
+	"General.RefreshQuickly": "Hızlı yenile",
+	"General.Refresh5seconds": "5 saniyede bir yenile",
+	"General.Refresh1minute": "Her dakika yenile",
+	"AliasForm.AliasName": "Alternatif İsim",
+	"AliasForm.NewAliasForIndex": "{0} için yeni alternatif isim",
+	"AliasForm.DeleteAliasMessage": "{1} silmek için ''{0}'' . Geriye dönüş yoktur.",
+	"AnyRequest.DisplayOptions" : "Seçenekleri Göster",
+	"AnyRequest.AsGraph" : "Sonuçları Çizdir",
+	"AnyRequest.AsJson" : "JSON formatında göster",
+	"AnyRequest.AsTable" : "Arama sonuçlarını tablo halinde göster",
+	"AnyRequest.History" : "Geçmiş",
+	"AnyRequest.RepeatRequest" : "İsteği Tekrarla",
+	"AnyRequest.RepeatRequestSelect" : "İsteği sürekli tekrarla ",
+	"AnyRequest.Transformer" : "Sonuç Dönüştürücü",
+	"AnyRequest.Pretty": "Düzenli",
+	"AnyRequest.Query" : "Sorgu",
+	"AnyRequest.Request": "Gönder",
+	"AnyRequest.Requesting": "İsteniyor...",
+	"AnyRequest.ValidateJSON": "JSON Doğrula",
+	"Browser.Title": "Browser",
+	"Browser.ResultSourcePanelTitle": "Sonuç Kaynağı",
+	"Command.DELETE": "SİL",
+	"Command.SHUTDOWN": "KAPA",
+	"Command.DeleteAliasMessage": "Alternatif ismi sil?",
+	"ClusterOverView.IndexName": "Indeks İsmi",
+	"ClusterOverview.NumShards": "Sektör Sayısı",
+	"ClusterOverview.NumReplicas": "Yedek Sayısı",
+	"ClusterOverview.NewIndex": "Yeni Indeks",
+	"IndexActionsMenu.Title": "İşlemler",
+	"IndexActionsMenu.NewAlias": "Yeni Alternatif İsim...",
+	"IndexActionsMenu.Refresh": "Yenile",
+	"IndexActionsMenu.Flush": "Boşalt",
+	"IndexActionsMenu.Optimize": "Optimize et...",
+	"IndexActionsMenu.Snapshot": "Gateway Snapshot (Kopya Al)",
+	"IndexActionsMenu.Analyser": "Analizi test et",
+	"IndexActionsMenu.Open": "Aç",
+	"IndexActionsMenu.Close": "Kapa",
+	"IndexActionsMenu.Delete": "Sil...",
+	"IndexInfoMenu.Title": "Bilgi",
+	"IndexInfoMenu.Status": "Indeks Durumu",
+	"IndexInfoMenu.Metadata": "Indeks Metaveri",
+	"IndexCommand.TextToAnalyze": "Analiz edilecek metin",
+	"IndexCommand.ShutdownMessage": "{1} kapatmak için ''{0}'' yazın . Nod bu arayüzden tekrar BAŞLATILAMAZ",
+	"IndexOverview.PageTitle": "Indeksler Genel Bakış",
+	"IndexSelector.NameWithDocs": "{0} ({1} döküman)",
+	"IndexSelector.SearchIndexForDocs": "{0} indeksinde ara:",
+	"FilterBrowser.OutputType": "Sonuç Formatı: {0}",
+	"FilterBrowser.OutputSize": "Sonuç Sayısı: {0}",
+	"Header.ClusterHealth": "Küme Durumu: {0} ({1} de {2})",
+	"Header.ClusterNotConnected": "Küme Durumu: Bağlı Değil",
+	"Header.Connect": "Bağlan",
+	"Nav.AnyRequest": "Özel Sorgu",
+	"Nav.Browser": "Görüntüle",
+	"Nav.ClusterHealth": "Küme Durumu",
+	"Nav.ClusterState": "Küme Statüsü",
+	"Nav.ClusterNodes": "Nod Bilgileri",
+	"Nav.Info": "Bilgi",
+	"Nav.NodeStats": "Nod İstatistikleri",
+	"Nav.Overview": "Genel Bakış",
+	"Nav.Indices": "Indeksler",
+	"Nav.Plugins": "Eklentiler",
+	"Nav.Status": "Indeks İstatistikleri",
+	"Nav.Templates": "Şablonlar",
+	"Nav.StructuredQuery": "Yapılandırılmış Sorgu",
+	"NodeActionsMenu.Title": "İşlemler",
+	"NodeActionsMenu.Shutdown": "Kapat...",
+	"NodeInfoMenu.Title": "Bilgi",
+	"NodeInfoMenu.ClusterNodeInfo": "Küme Nod Bilgileri",
+	"NodeInfoMenu.NodeStats": "Nod İstatistikleri",
+	"NodeType.Client": "Client Nod",
+	"NodeType.Coord": "Coordinator",
+	"NodeType.Master": "Master Nod",
+	"NodeType.Tribe": "Tribe Nod",
+	"NodeType.Worker": "Worker Nod",
+	"NodeType.Unassigned": "Sahipsiz",
+	"OptimizeForm.OptimizeIndex": "{0} Optimize Et",
+	"OptimizeForm.MaxSegments": "Maksimum Segment Sayısı",
+	"OptimizeForm.ExpungeDeletes": "Silme İşlemi Artıklarını Temizle",
+	"OptimizeForm.FlushAfter": "Optimize Ettikten Sonra Boşalt",
+	"OptimizeForm.WaitForMerge": "Birleştirme İçin Bekle",
+	"Overview.PageTitle" : "Kümeler Genelbakış",
+	"Output.JSON": "JSON",
+	"Output.Table": "Tablo",
+	"Output.CSV": "CSV",
+	"Output.ShowSource": "Sorgu kaynağını göster",
+	"Preference.SortCluster": "Kümeyi Sırala",
+	"Sort.ByName": "İsme göre",
+	"Sort.ByAddress": "Adrese göre",
+	"Sort.ByType": "Tipe göre",
+	"Preference.SortIndices": "Indeksleri sırala",
+	"SortIndices.Descending": "Azalan",
+	"SortIndices.Ascending": "Artan",
+	"Preference.ViewAliases": "Alternatif isimleri görüntüle",
+	"ViewAliases.Grouped": "Gruplanmış",
+	"ViewAliases.List": "Liste",
+	"ViewAliases.None": "Karışık",
+	"Overview.IndexFilter": "Indeks Filtresi",
+	"TableResults.Summary": "{0} parçanın {1} tanesi arandı. {2} sonuç. {3} saniye",
+	"QueryFilter.AllIndices": "Tüm Indeksler",
+	"QueryFilter.AnyValue": "herhangi",
+	"QueryFilter-Header-Indices": "Indeksler",
+	"QueryFilter-Header-Types": "Tipler",
+	"QueryFilter-Header-Fields": "Alanlar",
+	"QueryFilter.DateRangeHint.from": "{0}'dan",
+	"QueryFilter.DateRangeHint.to": "  {0}'a",
+	"Query.FailAndUndo": "Sorgu Başarısız. Son değişiklikler geri alınıyor.",
+	"StructuredQuery.ShowRawJson": "Formatsız JSON göster"
+});
+
+i18n.setKeys({
+	"AnyRequest.TransformerHelp" : "\
+		<p>Sonuç Dönüştürücü sorgudan dönen JSON sonuçlarını işleyip daha kullanışlı bir formata dönüştürmek için kullanılabilir.</p>\
+		<p>Dönüştürücü içierisinde javascript fonksiyonu tanımlanmalıdır. Bu fonksiyondan dönen yeni sonuç çıktı kısmına yazdırılır.</p>\
+		<p>Örnek:<br>\
+		  <code>return root.hits.hits[0];</code> sonucu dolaşarak ilk eşleşmeyi göster<br>\
+		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code> tüm kümede kullanılan toplam belleği gösterir<br></p>\
+		<p>Aşağıdaki fonksiyonlar dizi ve objelerin işlenmesinde yardımcı olması için kullanılabilir<br>\
+		<ul>\
+			<li><i>Object.keys</i>(object) := array</li>\
+			<li>array.<i>forEach</i>(function(prop, index))</li>\
+			<li>array.<i>map</i>(function(prop, index)) := array</li>\
+			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
+		</ul>\
+		<p>Sorgu tekrarlama çalışırken, prev isimli ekstra bir parametre dönüştürücü fonksiyonuna verilir. Bu sayede karşılaştırmalar ve toplu grafik gösterimleri yapılabilir.</p>\
+		<p>Örnek:<br>\
+		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code> önceki dakika boyunca kümede bulunan ilk nod üzerindeki averaj yükü verir.\
+		Bu sonuç nod için yük grafiği yaratılmasında kullanılabilir.\
+		"
+});
+
+i18n.setKeys({
+	"AnyRequest.DisplayOptionsHelp" : "\
+		<p>Sade Json: Sorgunun tüm sonuçlarını ve (yapıldıysa) dönüştürüldükten sonraki halini sade JSON formatında gösterir </p>\
+		<p>Sonuçları Çizdir: Sonuçları grafiksel olarak görüntülemek için sonuç dörücüyü kullanarak değerleri dizi haline getirin.</p>\
+		<p>Arama Sonuçları Tablosu: Eğer sorgunuz bir arama ise, sonuçları bir tabloda görüntüleyebilirsiniz.</p>\
+		"
+});
+
+i18n.setKeys({
+	"QueryFilter.DateRangeHelp" : "\
+		<p>Tarih alanları ana dile yakın kelimeler kullanarak iki tarih aralığında sorgu yapılabilmesini sağlar.</p>\
+		<p>Aşağıdaki tanımlar kullanılabilir:</p>\
+		<ul>\
+			<li><b>Anahtar Kelimeler</b><br>\
+				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
+				kelimeleri eşleşen tarihleri verir. Örneğin <code>last year</code> geçen yıl tarihli bütün verileri döndürür.</li>\
+			<li><b>Aralıklar</b><br>\
+				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (boşluklar isteğe bağlıdır, ayni kelime için farklı yazım şekilleri kullanılabilir)<br>\
+				Şu anki tarihi (<code>now</code>) baz alarak geçmiş veya ileriki bir tarih aralığındaki kayıtları verir.</li>\
+			<li><b>Tarih ve Kısmi Tarihler</b><br>\
+				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
+				bu formatlar spesifik bir tarihi tanımlarlar. <code>2011</code> tüm 2011 yılını ararken, <code>2011-01-18 12:32:45</code> şeklinde bir sorgu sadece o saniyedeki sonuçları verir.</li>\
+			<li><b>Zaman ve Kısmi Zamanlar</b><br>\
+				<code>12<br> 12:32<br> 12:32:45</code><br>\
+				bu formatlar gün içerisinde spesifik bir zamanı tanımlarlar. Örneğin <code>12:32</code> sadece bu saat ve dakikadaki kayıtları verir.</li>\
+			<li><b>Tarih Aralıkları</b><br>\
+				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
+				Tarih aralıkları yukarda belirtilen herhangi bir formatı &lt; or -&gt;  ile ayırarak yapılabilir. Eğer aralığın bir tarafı eksikse, sorgu ucu açıkmış gibi davranır.</li>\
+			<li><b>Ofsetli Tarih Aralığı</b><br>\
+				<code>2010 -> 1yr<br> 3mins < now</code>\
+				Verilen yöndeki tarih aralığına bakar.</li>\
+			<li><b>Çakılı Aralıklar</b><br>\
+				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
+				Yukarıdakiyle ayni fakat belirtilen tarihten her iki yöne de bakılır.</li>\
+		</ul>\
+	"
+});
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/lang/zh_strings.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/lang/zh_strings.js
new file mode 100644
index 0000000..0038de1
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/lang/zh_strings.js
@@ -0,0 +1,172 @@
+i18n.setKeys({
+	"General.Elasticsearch": "Elasticsearch",
+	"General.LoadingAggs": "加载聚合查询...",
+	"General.Searching": "搜索中...",
+	"General.Search": "搜索",
+	"General.Help": "帮助",
+	"General.HelpGlyph": "?",
+	"General.CloseGlyph": "X",
+	"General.RefreshResults": "刷新",
+	"General.ManualRefresh": "手动刷新",
+	"General.RefreshQuickly": "快速刷新",
+	"General.Refresh5seconds": "每5秒刷新",
+	"General.Refresh1minute": "每1分钟刷新",
+	"AliasForm.AliasName": "别名",
+	"AliasForm.NewAliasForIndex": "为 {0} 创建新别名",
+	"AliasForm.DeleteAliasMessage": "输入 ''{0}''  删除 {1}. 此操作无法恢复",
+	"AnyRequest.DisplayOptions" : "显示选项",
+	"AnyRequest.AsGraph" : "图形视图",
+	"AnyRequest.AsJson" : "原始 JSON",
+	"AnyRequest.AsTable" : "表格视图",
+	"AnyRequest.History" : "历史记录",
+	"AnyRequest.RepeatRequest" : "重复请求",
+	"AnyRequest.RepeatRequestSelect" : "重复周期 ",
+	"AnyRequest.Transformer" : "结果转换器",
+	"AnyRequest.Pretty": "易读",
+	"AnyRequest.Query" : "查询",
+	"AnyRequest.Request": "提交请求",
+	"AnyRequest.Requesting": "请求中...",
+	"AnyRequest.ValidateJSON": "验证 JSON",
+	"Browser.Title": "数据浏览",
+	"Browser.ResultSourcePanelTitle": "原始数据",
+	"Command.DELETE": "删除",
+	"Command.SHUTDOWN": "关闭",
+	"Command.DeleteAliasMessage": "删除别名?",
+	"ClusterOverView.IndexName": "索引名称",
+	"ClusterOverview.NumShards": "分片数",
+	"ClusterOverview.NumReplicas": "副本数",
+	"ClusterOverview.NewIndex": "新建索引",
+	"IndexActionsMenu.Title": "动作",
+	"IndexActionsMenu.NewAlias": "新建别名...",
+	"IndexActionsMenu.Refresh": "刷新",
+	"IndexActionsMenu.Flush": "Flush刷新",
+	"IndexActionsMenu.Optimize": "优化...",
+	"IndexActionsMenu.Snapshot": "网关快照",
+	"IndexActionsMenu.Analyser": "测试分析器",
+	"IndexActionsMenu.Open": "开启",
+	"IndexActionsMenu.Close": "关闭",
+	"IndexActionsMenu.Delete": "删除...",
+	"IndexInfoMenu.Title": "信息",
+	"IndexInfoMenu.Status": "索引状态",
+	"IndexInfoMenu.Metadata": "索引信息",
+	"IndexCommand.TextToAnalyze": "文本分析",
+	"IndexCommand.ShutdownMessage": "输入 ''{0}'' 以关闭 {1} 节点. 关闭的节点无法从此界面重新启动",
+	"IndexOverview.PageTitle": "索引概览",
+	"IndexSelector.NameWithDocs": "{0} ({1} 个文档)",
+	"IndexSelector.SearchIndexForDocs": "搜索 {0} 的文档， 查询条件:",
+	"FilterBrowser.OutputType": "返回格式: {0}",
+	"FilterBrowser.OutputSize": "显示数量: {0}",
+	"Header.ClusterHealth": "集群健康值: {0} ({1} of {2})",
+	"Header.ClusterNotConnected": "集群健康值: 未连接",
+	"Header.Connect": "连接",
+	"Nav.AnyRequest": "复合查询",
+	"Nav.Browser": "数据浏览",
+	"Nav.ClusterHealth": "集群健康值",
+	"Nav.ClusterState": "群集状态",
+	"Nav.ClusterNodes": "集群节点",
+	"Nav.Info": "信息",
+	"Nav.NodeStats": "节点状态",
+	"Nav.Overview": "概览",
+	"Nav.Indices": "索引",
+	"Nav.Plugins": "插件",
+	"Nav.Status": "状态",
+	"Nav.Templates": "模板",
+	"Nav.StructuredQuery": "基本查询",
+	"NodeActionsMenu.Title": "动作",
+	"NodeActionsMenu.Shutdown": "关停...",
+	"NodeInfoMenu.Title": "信息",
+	"NodeInfoMenu.ClusterNodeInfo": "集群节点信息",
+	"NodeInfoMenu.NodeStats": "节点状态",
+	"NodeType.Client": "节点客户端",
+	"NodeType.Coord": "协调器",
+	"NodeType.Master": "主节点",
+	"NodeType.Tribe": "分支结点",
+	"NodeType.Worker": "工作节点",
+	"NodeType.Unassigned": "未分配",
+	"OptimizeForm.OptimizeIndex": "优化 {0}",
+	"OptimizeForm.MaxSegments": "最大索引段数",
+	"OptimizeForm.ExpungeDeletes": "只删除被标记为删除的",
+	"OptimizeForm.FlushAfter": "优化后刷新",
+	"OptimizeForm.WaitForMerge": "等待合并",
+	"Overview.PageTitle" : "集群概览",
+	"Output.JSON": "JSON",
+	"Output.Table": "Table",
+	"Output.CSV": "CSV",
+	"Output.ShowSource": "显示查询语句",
+	"Preference.SortCluster": "集群排序",
+	"Sort.ByName": "按名称",
+	"Sort.ByAddress": "按地址",
+	"Sort.ByType": "按类型",
+	"TableResults.Summary": "查询 {1} 个分片中用的 {0} 个. {2} 命中. 耗时 {3} 秒",
+	"QueryFilter.AllIndices": "所有索引",
+	"QueryFilter.AnyValue": "任意",
+	"QueryFilter-Header-Indices": "索引",
+	"QueryFilter-Header-Types": "类型",
+	"QueryFilter-Header-Fields": "字段",
+	"QueryFilter.DateRangeHint.from": "从 : {0}",
+	"QueryFilter.DateRangeHint.to": "  到 : {0}",
+	"Query.FailAndUndo": "查询失败. 撤消最近的更改",
+	"StructuredQuery.ShowRawJson": "显示原始 JSON"
+});
+
+i18n.setKeys({
+	"AnyRequest.TransformerHelp" : "\
+		<p>结果转换器用于返回结果原始JSON的后续处理, 将结果转换为更有用的格式.</p>\
+		<p>转换器应当包含javascript函数体. 函数的返回值将传递给json分析器</p>\
+		<p>Example:<br>\
+		  <code>return root.hits.hits[0];</code><br>\
+		  遍历结果并只显示第一个元素<br>\
+		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code><br>\
+		  将返回整个集群使用的总内存<br></p>\
+		<p>以下函数可以方便的处理数组与对象<br>\
+		<ul>\
+			<li><i>Object.keys</i>(object) := array</li>\
+			<li>array.<i>forEach</i>(function(prop, index))</li>\
+			<li>array.<i>map</i>(function(prop, index)) := array</li>\
+			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
+		</ul>\
+		<p>当启用重复请求时, prev 参数将会传递给转换器函数. 这将用于比较并累加图形</p>\
+		<p>Example:<br>\
+		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code><br>\
+		将返回第一个集群节点最近一分钟内的平均负载\
+		将会把结果送人图表以产生一个负载曲线图\
+		"
+});
+
+i18n.setKeys({
+	"AnyRequest.DisplayOptionsHelp" : "\
+		<p>原始 Json: 将完整的查询结果转换为原始JSON格式 </p>\
+		<p>图形视图: 将查询结果图形化, 将查询结果转换为数组值的形式</p>\
+		<p>表格视图: 如果查询是一个搜索, 可以将搜索结果以表格形式显示.</p>\
+		"
+});
+
+i18n.setKeys({
+	"QueryFilter.DateRangeHelp" : "\
+		<p>Date 字段接受日期范围的形式查询.</p>\
+		<p>一下格式被支持:</p>\
+		<ul>\
+			<li><b>关键词 / 关键短语</b><br>\
+				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
+				搜索关键字匹配的日期. <code>last year</code> 将搜索过去全年.</li>\
+			<li><b>范围</b><br>\
+				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (空格可选, 同等于多个范围修饰词)<br>\
+				创建一个指定时间范围的搜索, 将围绕<code>现在</code> 并延伸至过去与未来时间段.</li>\
+			<li><b>DateTime 与 DateTime局部</b><br>\
+				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
+				指定一个特定的日期范围. <code>2011</code>会搜索整个 2011年, 而 <code>2011-01-18 12:32:45</code> 将只搜索1秒范围内</li>\
+			<li><b>Time 与 Time局部</b><br>\
+				<code>12<br> 12:32<br> 12:32:45</code><br>\
+				这些格式只搜索当天的特定时间. <code>12:32</code> 将搜索当天的那一分钟</li>\
+			<li><b>日期范围</b><br>\
+				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
+				日期范围是将两个日期格式串 (日期关键字 / DateTime / Time) 用  &lt; 或 -&gt; (效果相同) 分隔. 如果缺少任意一端，那么在这个方向上时间将没有限制.</li>\
+			<li><b>偏移日期范围</b><br>\
+				<code>2010 -> 1yr<br> 3mins < now</code>\
+				搜索包括指定方向上偏移的日期.</li>\
+			<li><b>锚定范围</b><br>\
+				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
+				类似于上面的便宜日期，在两个方向上将锚定的日期延长</li>\
+		</ul>\
+	"
+});
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/vendor.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/vendor.css
new file mode 100644
index 0000000..be7e15c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/vendor.css
@@ -0,0 +1,1338 @@
+/*!
+ *  Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+/* FONT PATH
+ * -------------------------- */
+@font-face {
+  font-family: 'FontAwesome';
+  src: url('fonts/fontawesome-webfont.eot?v=4.0.3');
+  src: url('fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'), url('fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'), url('fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'), url('fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg');
+  font-weight: normal;
+  font-style: normal;
+}
+.fa {
+  display: inline-block;
+  font-family: FontAwesome;
+  font-style: normal;
+  font-weight: normal;
+  line-height: 1;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+/* makes the font 33% larger relative to the icon container */
+.fa-lg {
+  font-size: 1.3333333333333333em;
+  line-height: 0.75em;
+  vertical-align: -15%;
+}
+.fa-2x {
+  font-size: 2em;
+}
+.fa-3x {
+  font-size: 3em;
+}
+.fa-4x {
+  font-size: 4em;
+}
+.fa-5x {
+  font-size: 5em;
+}
+.fa-fw {
+  width: 1.2857142857142858em;
+  text-align: center;
+}
+.fa-ul {
+  padding-left: 0;
+  margin-left: 2.142857142857143em;
+  list-style-type: none;
+}
+.fa-ul > li {
+  position: relative;
+}
+.fa-li {
+  position: absolute;
+  left: -2.142857142857143em;
+  width: 2.142857142857143em;
+  top: 0.14285714285714285em;
+  text-align: center;
+}
+.fa-li.fa-lg {
+  left: -1.8571428571428572em;
+}
+.fa-border {
+  padding: .2em .25em .15em;
+  border: solid 0.08em #eeeeee;
+  border-radius: .1em;
+}
+.pull-right {
+  float: right;
+}
+.pull-left {
+  float: left;
+}
+.fa.pull-left {
+  margin-right: .3em;
+}
+.fa.pull-right {
+  margin-left: .3em;
+}
+.fa-spin {
+  -webkit-animation: spin 2s infinite linear;
+  -moz-animation: spin 2s infinite linear;
+  -o-animation: spin 2s infinite linear;
+  animation: spin 2s infinite linear;
+}
+@-moz-keyframes spin {
+  0% {
+    -moz-transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(359deg);
+  }
+}
+@-webkit-keyframes spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(359deg);
+  }
+}
+@-o-keyframes spin {
+  0% {
+    -o-transform: rotate(0deg);
+  }
+  100% {
+    -o-transform: rotate(359deg);
+  }
+}
+@-ms-keyframes spin {
+  0% {
+    -ms-transform: rotate(0deg);
+  }
+  100% {
+    -ms-transform: rotate(359deg);
+  }
+}
+@keyframes spin {
+  0% {
+    transform: rotate(0deg);
+  }
+  100% {
+    transform: rotate(359deg);
+  }
+}
+.fa-rotate-90 {
+  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
+  -webkit-transform: rotate(90deg);
+  -moz-transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  -o-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+.fa-rotate-180 {
+  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
+  -webkit-transform: rotate(180deg);
+  -moz-transform: rotate(180deg);
+  -ms-transform: rotate(180deg);
+  -o-transform: rotate(180deg);
+  transform: rotate(180deg);
+}
+.fa-rotate-270 {
+  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
+  -webkit-transform: rotate(270deg);
+  -moz-transform: rotate(270deg);
+  -ms-transform: rotate(270deg);
+  -o-transform: rotate(270deg);
+  transform: rotate(270deg);
+}
+.fa-flip-horizontal {
+  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
+  -webkit-transform: scale(-1, 1);
+  -moz-transform: scale(-1, 1);
+  -ms-transform: scale(-1, 1);
+  -o-transform: scale(-1, 1);
+  transform: scale(-1, 1);
+}
+.fa-flip-vertical {
+  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
+  -webkit-transform: scale(1, -1);
+  -moz-transform: scale(1, -1);
+  -ms-transform: scale(1, -1);
+  -o-transform: scale(1, -1);
+  transform: scale(1, -1);
+}
+.fa-stack {
+  position: relative;
+  display: inline-block;
+  width: 2em;
+  height: 2em;
+  line-height: 2em;
+  vertical-align: middle;
+}
+.fa-stack-1x,
+.fa-stack-2x {
+  position: absolute;
+  left: 0;
+  width: 100%;
+  text-align: center;
+}
+.fa-stack-1x {
+  line-height: inherit;
+}
+.fa-stack-2x {
+  font-size: 2em;
+}
+.fa-inverse {
+  color: #ffffff;
+}
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+   readers do not read off random characters that represent icons */
+.fa-glass:before {
+  content: "\f000";
+}
+.fa-music:before {
+  content: "\f001";
+}
+.fa-search:before {
+  content: "\f002";
+}
+.fa-envelope-o:before {
+  content: "\f003";
+}
+.fa-heart:before {
+  content: "\f004";
+}
+.fa-star:before {
+  content: "\f005";
+}
+.fa-star-o:before {
+  content: "\f006";
+}
+.fa-user:before {
+  content: "\f007";
+}
+.fa-film:before {
+  content: "\f008";
+}
+.fa-th-large:before {
+  content: "\f009";
+}
+.fa-th:before {
+  content: "\f00a";
+}
+.fa-th-list:before {
+  content: "\f00b";
+}
+.fa-check:before {
+  content: "\f00c";
+}
+.fa-times:before {
+  content: "\f00d";
+}
+.fa-search-plus:before {
+  content: "\f00e";
+}
+.fa-search-minus:before {
+  content: "\f010";
+}
+.fa-power-off:before {
+  content: "\f011";
+}
+.fa-signal:before {
+  content: "\f012";
+}
+.fa-gear:before,
+.fa-cog:before {
+  content: "\f013";
+}
+.fa-trash-o:before {
+  content: "\f014";
+}
+.fa-home:before {
+  content: "\f015";
+}
+.fa-file-o:before {
+  content: "\f016";
+}
+.fa-clock-o:before {
+  content: "\f017";
+}
+.fa-road:before {
+  content: "\f018";
+}
+.fa-download:before {
+  content: "\f019";
+}
+.fa-arrow-circle-o-down:before {
+  content: "\f01a";
+}
+.fa-arrow-circle-o-up:before {
+  content: "\f01b";
+}
+.fa-inbox:before {
+  content: "\f01c";
+}
+.fa-play-circle-o:before {
+  content: "\f01d";
+}
+.fa-rotate-right:before,
+.fa-repeat:before {
+  content: "\f01e";
+}
+.fa-refresh:before {
+  content: "\f021";
+}
+.fa-list-alt:before {
+  content: "\f022";
+}
+.fa-lock:before {
+  content: "\f023";
+}
+.fa-flag:before {
+  content: "\f024";
+}
+.fa-headphones:before {
+  content: "\f025";
+}
+.fa-volume-off:before {
+  content: "\f026";
+}
+.fa-volume-down:before {
+  content: "\f027";
+}
+.fa-volume-up:before {
+  content: "\f028";
+}
+.fa-qrcode:before {
+  content: "\f029";
+}
+.fa-barcode:before {
+  content: "\f02a";
+}
+.fa-tag:before {
+  content: "\f02b";
+}
+.fa-tags:before {
+  content: "\f02c";
+}
+.fa-book:before {
+  content: "\f02d";
+}
+.fa-bookmark:before {
+  content: "\f02e";
+}
+.fa-print:before {
+  content: "\f02f";
+}
+.fa-camera:before {
+  content: "\f030";
+}
+.fa-font:before {
+  content: "\f031";
+}
+.fa-bold:before {
+  content: "\f032";
+}
+.fa-italic:before {
+  content: "\f033";
+}
+.fa-text-height:before {
+  content: "\f034";
+}
+.fa-text-width:before {
+  content: "\f035";
+}
+.fa-align-left:before {
+  content: "\f036";
+}
+.fa-align-center:before {
+  content: "\f037";
+}
+.fa-align-right:before {
+  content: "\f038";
+}
+.fa-align-justify:before {
+  content: "\f039";
+}
+.fa-list:before {
+  content: "\f03a";
+}
+.fa-dedent:before,
+.fa-outdent:before {
+  content: "\f03b";
+}
+.fa-indent:before {
+  content: "\f03c";
+}
+.fa-video-camera:before {
+  content: "\f03d";
+}
+.fa-picture-o:before {
+  content: "\f03e";
+}
+.fa-pencil:before {
+  content: "\f040";
+}
+.fa-map-marker:before {
+  content: "\f041";
+}
+.fa-adjust:before {
+  content: "\f042";
+}
+.fa-tint:before {
+  content: "\f043";
+}
+.fa-edit:before,
+.fa-pencil-square-o:before {
+  content: "\f044";
+}
+.fa-share-square-o:before {
+  content: "\f045";
+}
+.fa-check-square-o:before {
+  content: "\f046";
+}
+.fa-arrows:before {
+  content: "\f047";
+}
+.fa-step-backward:before {
+  content: "\f048";
+}
+.fa-fast-backward:before {
+  content: "\f049";
+}
+.fa-backward:before {
+  content: "\f04a";
+}
+.fa-play:before {
+  content: "\f04b";
+}
+.fa-pause:before {
+  content: "\f04c";
+}
+.fa-stop:before {
+  content: "\f04d";
+}
+.fa-forward:before {
+  content: "\f04e";
+}
+.fa-fast-forward:before {
+  content: "\f050";
+}
+.fa-step-forward:before {
+  content: "\f051";
+}
+.fa-eject:before {
+  content: "\f052";
+}
+.fa-chevron-left:before {
+  content: "\f053";
+}
+.fa-chevron-right:before {
+  content: "\f054";
+}
+.fa-plus-circle:before {
+  content: "\f055";
+}
+.fa-minus-circle:before {
+  content: "\f056";
+}
+.fa-times-circle:before {
+  content: "\f057";
+}
+.fa-check-circle:before {
+  content: "\f058";
+}
+.fa-question-circle:before {
+  content: "\f059";
+}
+.fa-info-circle:before {
+  content: "\f05a";
+}
+.fa-crosshairs:before {
+  content: "\f05b";
+}
+.fa-times-circle-o:before {
+  content: "\f05c";
+}
+.fa-check-circle-o:before {
+  content: "\f05d";
+}
+.fa-ban:before {
+  content: "\f05e";
+}
+.fa-arrow-left:before {
+  content: "\f060";
+}
+.fa-arrow-right:before {
+  content: "\f061";
+}
+.fa-arrow-up:before {
+  content: "\f062";
+}
+.fa-arrow-down:before {
+  content: "\f063";
+}
+.fa-mail-forward:before,
+.fa-share:before {
+  content: "\f064";
+}
+.fa-expand:before {
+  content: "\f065";
+}
+.fa-compress:before {
+  content: "\f066";
+}
+.fa-plus:before {
+  content: "\f067";
+}
+.fa-minus:before {
+  content: "\f068";
+}
+.fa-asterisk:before {
+  content: "\f069";
+}
+.fa-exclamation-circle:before {
+  content: "\f06a";
+}
+.fa-gift:before {
+  content: "\f06b";
+}
+.fa-leaf:before {
+  content: "\f06c";
+}
+.fa-fire:before {
+  content: "\f06d";
+}
+.fa-eye:before {
+  content: "\f06e";
+}
+.fa-eye-slash:before {
+  content: "\f070";
+}
+.fa-warning:before,
+.fa-exclamation-triangle:before {
+  content: "\f071";
+}
+.fa-plane:before {
+  content: "\f072";
+}
+.fa-calendar:before {
+  content: "\f073";
+}
+.fa-random:before {
+  content: "\f074";
+}
+.fa-comment:before {
+  content: "\f075";
+}
+.fa-magnet:before {
+  content: "\f076";
+}
+.fa-chevron-up:before {
+  content: "\f077";
+}
+.fa-chevron-down:before {
+  content: "\f078";
+}
+.fa-retweet:before {
+  content: "\f079";
+}
+.fa-shopping-cart:before {
+  content: "\f07a";
+}
+.fa-folder:before {
+  content: "\f07b";
+}
+.fa-folder-open:before {
+  content: "\f07c";
+}
+.fa-arrows-v:before {
+  content: "\f07d";
+}
+.fa-arrows-h:before {
+  content: "\f07e";
+}
+.fa-bar-chart-o:before {
+  content: "\f080";
+}
+.fa-twitter-square:before {
+  content: "\f081";
+}
+.fa-facebook-square:before {
+  content: "\f082";
+}
+.fa-camera-retro:before {
+  content: "\f083";
+}
+.fa-key:before {
+  content: "\f084";
+}
+.fa-gears:before,
+.fa-cogs:before {
+  content: "\f085";
+}
+.fa-comments:before {
+  content: "\f086";
+}
+.fa-thumbs-o-up:before {
+  content: "\f087";
+}
+.fa-thumbs-o-down:before {
+  content: "\f088";
+}
+.fa-star-half:before {
+  content: "\f089";
+}
+.fa-heart-o:before {
+  content: "\f08a";
+}
+.fa-sign-out:before {
+  content: "\f08b";
+}
+.fa-linkedin-square:before {
+  content: "\f08c";
+}
+.fa-thumb-tack:before {
+  content: "\f08d";
+}
+.fa-external-link:before {
+  content: "\f08e";
+}
+.fa-sign-in:before {
+  content: "\f090";
+}
+.fa-trophy:before {
+  content: "\f091";
+}
+.fa-github-square:before {
+  content: "\f092";
+}
+.fa-upload:before {
+  content: "\f093";
+}
+.fa-lemon-o:before {
+  content: "\f094";
+}
+.fa-phone:before {
+  content: "\f095";
+}
+.fa-square-o:before {
+  content: "\f096";
+}
+.fa-bookmark-o:before {
+  content: "\f097";
+}
+.fa-phone-square:before {
+  content: "\f098";
+}
+.fa-twitter:before {
+  content: "\f099";
+}
+.fa-facebook:before {
+  content: "\f09a";
+}
+.fa-github:before {
+  content: "\f09b";
+}
+.fa-unlock:before {
+  content: "\f09c";
+}
+.fa-credit-card:before {
+  content: "\f09d";
+}
+.fa-rss:before {
+  content: "\f09e";
+}
+.fa-hdd-o:before {
+  content: "\f0a0";
+}
+.fa-bullhorn:before {
+  content: "\f0a1";
+}
+.fa-bell:before {
+  content: "\f0f3";
+}
+.fa-certificate:before {
+  content: "\f0a3";
+}
+.fa-hand-o-right:before {
+  content: "\f0a4";
+}
+.fa-hand-o-left:before {
+  content: "\f0a5";
+}
+.fa-hand-o-up:before {
+  content: "\f0a6";
+}
+.fa-hand-o-down:before {
+  content: "\f0a7";
+}
+.fa-arrow-circle-left:before {
+  content: "\f0a8";
+}
+.fa-arrow-circle-right:before {
+  content: "\f0a9";
+}
+.fa-arrow-circle-up:before {
+  content: "\f0aa";
+}
+.fa-arrow-circle-down:before {
+  content: "\f0ab";
+}
+.fa-globe:before {
+  content: "\f0ac";
+}
+.fa-wrench:before {
+  content: "\f0ad";
+}
+.fa-tasks:before {
+  content: "\f0ae";
+}
+.fa-filter:before {
+  content: "\f0b0";
+}
+.fa-briefcase:before {
+  content: "\f0b1";
+}
+.fa-arrows-alt:before {
+  content: "\f0b2";
+}
+.fa-group:before,
+.fa-users:before {
+  content: "\f0c0";
+}
+.fa-chain:before,
+.fa-link:before {
+  content: "\f0c1";
+}
+.fa-cloud:before {
+  content: "\f0c2";
+}
+.fa-flask:before {
+  content: "\f0c3";
+}
+.fa-cut:before,
+.fa-scissors:before {
+  content: "\f0c4";
+}
+.fa-copy:before,
+.fa-files-o:before {
+  content: "\f0c5";
+}
+.fa-paperclip:before {
+  content: "\f0c6";
+}
+.fa-save:before,
+.fa-floppy-o:before {
+  content: "\f0c7";
+}
+.fa-square:before {
+  content: "\f0c8";
+}
+.fa-bars:before {
+  content: "\f0c9";
+}
+.fa-list-ul:before {
+  content: "\f0ca";
+}
+.fa-list-ol:before {
+  content: "\f0cb";
+}
+.fa-strikethrough:before {
+  content: "\f0cc";
+}
+.fa-underline:before {
+  content: "\f0cd";
+}
+.fa-table:before {
+  content: "\f0ce";
+}
+.fa-magic:before {
+  content: "\f0d0";
+}
+.fa-truck:before {
+  content: "\f0d1";
+}
+.fa-pinterest:before {
+  content: "\f0d2";
+}
+.fa-pinterest-square:before {
+  content: "\f0d3";
+}
+.fa-google-plus-square:before {
+  content: "\f0d4";
+}
+.fa-google-plus:before {
+  content: "\f0d5";
+}
+.fa-money:before {
+  content: "\f0d6";
+}
+.fa-caret-down:before {
+  content: "\f0d7";
+}
+.fa-caret-up:before {
+  content: "\f0d8";
+}
+.fa-caret-left:before {
+  content: "\f0d9";
+}
+.fa-caret-right:before {
+  content: "\f0da";
+}
+.fa-columns:before {
+  content: "\f0db";
+}
+.fa-unsorted:before,
+.fa-sort:before {
+  content: "\f0dc";
+}
+.fa-sort-down:before,
+.fa-sort-asc:before {
+  content: "\f0dd";
+}
+.fa-sort-up:before,
+.fa-sort-desc:before {
+  content: "\f0de";
+}
+.fa-envelope:before {
+  content: "\f0e0";
+}
+.fa-linkedin:before {
+  content: "\f0e1";
+}
+.fa-rotate-left:before,
+.fa-undo:before {
+  content: "\f0e2";
+}
+.fa-legal:before,
+.fa-gavel:before {
+  content: "\f0e3";
+}
+.fa-dashboard:before,
+.fa-tachometer:before {
+  content: "\f0e4";
+}
+.fa-comment-o:before {
+  content: "\f0e5";
+}
+.fa-comments-o:before {
+  content: "\f0e6";
+}
+.fa-flash:before,
+.fa-bolt:before {
+  content: "\f0e7";
+}
+.fa-sitemap:before {
+  content: "\f0e8";
+}
+.fa-umbrella:before {
+  content: "\f0e9";
+}
+.fa-paste:before,
+.fa-clipboard:before {
+  content: "\f0ea";
+}
+.fa-lightbulb-o:before {
+  content: "\f0eb";
+}
+.fa-exchange:before {
+  content: "\f0ec";
+}
+.fa-cloud-download:before {
+  content: "\f0ed";
+}
+.fa-cloud-upload:before {
+  content: "\f0ee";
+}
+.fa-user-md:before {
+  content: "\f0f0";
+}
+.fa-stethoscope:before {
+  content: "\f0f1";
+}
+.fa-suitcase:before {
+  content: "\f0f2";
+}
+.fa-bell-o:before {
+  content: "\f0a2";
+}
+.fa-coffee:before {
+  content: "\f0f4";
+}
+.fa-cutlery:before {
+  content: "\f0f5";
+}
+.fa-file-text-o:before {
+  content: "\f0f6";
+}
+.fa-building-o:before {
+  content: "\f0f7";
+}
+.fa-hospital-o:before {
+  content: "\f0f8";
+}
+.fa-ambulance:before {
+  content: "\f0f9";
+}
+.fa-medkit:before {
+  content: "\f0fa";
+}
+.fa-fighter-jet:before {
+  content: "\f0fb";
+}
+.fa-beer:before {
+  content: "\f0fc";
+}
+.fa-h-square:before {
+  content: "\f0fd";
+}
+.fa-plus-square:before {
+  content: "\f0fe";
+}
+.fa-angle-double-left:before {
+  content: "\f100";
+}
+.fa-angle-double-right:before {
+  content: "\f101";
+}
+.fa-angle-double-up:before {
+  content: "\f102";
+}
+.fa-angle-double-down:before {
+  content: "\f103";
+}
+.fa-angle-left:before {
+  content: "\f104";
+}
+.fa-angle-right:before {
+  content: "\f105";
+}
+.fa-angle-up:before {
+  content: "\f106";
+}
+.fa-angle-down:before {
+  content: "\f107";
+}
+.fa-desktop:before {
+  content: "\f108";
+}
+.fa-laptop:before {
+  content: "\f109";
+}
+.fa-tablet:before {
+  content: "\f10a";
+}
+.fa-mobile-phone:before,
+.fa-mobile:before {
+  content: "\f10b";
+}
+.fa-circle-o:before {
+  content: "\f10c";
+}
+.fa-quote-left:before {
+  content: "\f10d";
+}
+.fa-quote-right:before {
+  content: "\f10e";
+}
+.fa-spinner:before {
+  content: "\f110";
+}
+.fa-circle:before {
+  content: "\f111";
+}
+.fa-mail-reply:before,
+.fa-reply:before {
+  content: "\f112";
+}
+.fa-github-alt:before {
+  content: "\f113";
+}
+.fa-folder-o:before {
+  content: "\f114";
+}
+.fa-folder-open-o:before {
+  content: "\f115";
+}
+.fa-smile-o:before {
+  content: "\f118";
+}
+.fa-frown-o:before {
+  content: "\f119";
+}
+.fa-meh-o:before {
+  content: "\f11a";
+}
+.fa-gamepad:before {
+  content: "\f11b";
+}
+.fa-keyboard-o:before {
+  content: "\f11c";
+}
+.fa-flag-o:before {
+  content: "\f11d";
+}
+.fa-flag-checkered:before {
+  content: "\f11e";
+}
+.fa-terminal:before {
+  content: "\f120";
+}
+.fa-code:before {
+  content: "\f121";
+}
+.fa-reply-all:before {
+  content: "\f122";
+}
+.fa-mail-reply-all:before {
+  content: "\f122";
+}
+.fa-star-half-empty:before,
+.fa-star-half-full:before,
+.fa-star-half-o:before {
+  content: "\f123";
+}
+.fa-location-arrow:before {
+  content: "\f124";
+}
+.fa-crop:before {
+  content: "\f125";
+}
+.fa-code-fork:before {
+  content: "\f126";
+}
+.fa-unlink:before,
+.fa-chain-broken:before {
+  content: "\f127";
+}
+.fa-question:before {
+  content: "\f128";
+}
+.fa-info:before {
+  content: "\f129";
+}
+.fa-exclamation:before {
+  content: "\f12a";
+}
+.fa-superscript:before {
+  content: "\f12b";
+}
+.fa-subscript:before {
+  content: "\f12c";
+}
+.fa-eraser:before {
+  content: "\f12d";
+}
+.fa-puzzle-piece:before {
+  content: "\f12e";
+}
+.fa-microphone:before {
+  content: "\f130";
+}
+.fa-microphone-slash:before {
+  content: "\f131";
+}
+.fa-shield:before {
+  content: "\f132";
+}
+.fa-calendar-o:before {
+  content: "\f133";
+}
+.fa-fire-extinguisher:before {
+  content: "\f134";
+}
+.fa-rocket:before {
+  content: "\f135";
+}
+.fa-maxcdn:before {
+  content: "\f136";
+}
+.fa-chevron-circle-left:before {
+  content: "\f137";
+}
+.fa-chevron-circle-right:before {
+  content: "\f138";
+}
+.fa-chevron-circle-up:before {
+  content: "\f139";
+}
+.fa-chevron-circle-down:before {
+  content: "\f13a";
+}
+.fa-html5:before {
+  content: "\f13b";
+}
+.fa-css3:before {
+  content: "\f13c";
+}
+.fa-anchor:before {
+  content: "\f13d";
+}
+.fa-unlock-alt:before {
+  content: "\f13e";
+}
+.fa-bullseye:before {
+  content: "\f140";
+}
+.fa-ellipsis-h:before {
+  content: "\f141";
+}
+.fa-ellipsis-v:before {
+  content: "\f142";
+}
+.fa-rss-square:before {
+  content: "\f143";
+}
+.fa-play-circle:before {
+  content: "\f144";
+}
+.fa-ticket:before {
+  content: "\f145";
+}
+.fa-minus-square:before {
+  content: "\f146";
+}
+.fa-minus-square-o:before {
+  content: "\f147";
+}
+.fa-level-up:before {
+  content: "\f148";
+}
+.fa-level-down:before {
+  content: "\f149";
+}
+.fa-check-square:before {
+  content: "\f14a";
+}
+.fa-pencil-square:before {
+  content: "\f14b";
+}
+.fa-external-link-square:before {
+  content: "\f14c";
+}
+.fa-share-square:before {
+  content: "\f14d";
+}
+.fa-compass:before {
+  content: "\f14e";
+}
+.fa-toggle-down:before,
+.fa-caret-square-o-down:before {
+  content: "\f150";
+}
+.fa-toggle-up:before,
+.fa-caret-square-o-up:before {
+  content: "\f151";
+}
+.fa-toggle-right:before,
+.fa-caret-square-o-right:before {
+  content: "\f152";
+}
+.fa-euro:before,
+.fa-eur:before {
+  content: "\f153";
+}
+.fa-gbp:before {
+  content: "\f154";
+}
+.fa-dollar:before,
+.fa-usd:before {
+  content: "\f155";
+}
+.fa-rupee:before,
+.fa-inr:before {
+  content: "\f156";
+}
+.fa-cny:before,
+.fa-rmb:before,
+.fa-yen:before,
+.fa-jpy:before {
+  content: "\f157";
+}
+.fa-ruble:before,
+.fa-rouble:before,
+.fa-rub:before {
+  content: "\f158";
+}
+.fa-won:before,
+.fa-krw:before {
+  content: "\f159";
+}
+.fa-bitcoin:before,
+.fa-btc:before {
+  content: "\f15a";
+}
+.fa-file:before {
+  content: "\f15b";
+}
+.fa-file-text:before {
+  content: "\f15c";
+}
+.fa-sort-alpha-asc:before {
+  content: "\f15d";
+}
+.fa-sort-alpha-desc:before {
+  content: "\f15e";
+}
+.fa-sort-amount-asc:before {
+  content: "\f160";
+}
+.fa-sort-amount-desc:before {
+  content: "\f161";
+}
+.fa-sort-numeric-asc:before {
+  content: "\f162";
+}
+.fa-sort-numeric-desc:before {
+  content: "\f163";
+}
+.fa-thumbs-up:before {
+  content: "\f164";
+}
+.fa-thumbs-down:before {
+  content: "\f165";
+}
+.fa-youtube-square:before {
+  content: "\f166";
+}
+.fa-youtube:before {
+  content: "\f167";
+}
+.fa-xing:before {
+  content: "\f168";
+}
+.fa-xing-square:before {
+  content: "\f169";
+}
+.fa-youtube-play:before {
+  content: "\f16a";
+}
+.fa-dropbox:before {
+  content: "\f16b";
+}
+.fa-stack-overflow:before {
+  content: "\f16c";
+}
+.fa-instagram:before {
+  content: "\f16d";
+}
+.fa-flickr:before {
+  content: "\f16e";
+}
+.fa-adn:before {
+  content: "\f170";
+}
+.fa-bitbucket:before {
+  content: "\f171";
+}
+.fa-bitbucket-square:before {
+  content: "\f172";
+}
+.fa-tumblr:before {
+  content: "\f173";
+}
+.fa-tumblr-square:before {
+  content: "\f174";
+}
+.fa-long-arrow-down:before {
+  content: "\f175";
+}
+.fa-long-arrow-up:before {
+  content: "\f176";
+}
+.fa-long-arrow-left:before {
+  content: "\f177";
+}
+.fa-long-arrow-right:before {
+  content: "\f178";
+}
+.fa-apple:before {
+  content: "\f179";
+}
+.fa-windows:before {
+  content: "\f17a";
+}
+.fa-android:before {
+  content: "\f17b";
+}
+.fa-linux:before {
+  content: "\f17c";
+}
+.fa-dribbble:before {
+  content: "\f17d";
+}
+.fa-skype:before {
+  content: "\f17e";
+}
+.fa-foursquare:before {
+  content: "\f180";
+}
+.fa-trello:before {
+  content: "\f181";
+}
+.fa-female:before {
+  content: "\f182";
+}
+.fa-male:before {
+  content: "\f183";
+}
+.fa-gittip:before {
+  content: "\f184";
+}
+.fa-sun-o:before {
+  content: "\f185";
+}
+.fa-moon-o:before {
+  content: "\f186";
+}
+.fa-archive:before {
+  content: "\f187";
+}
+.fa-bug:before {
+  content: "\f188";
+}
+.fa-vk:before {
+  content: "\f189";
+}
+.fa-weibo:before {
+  content: "\f18a";
+}
+.fa-renren:before {
+  content: "\f18b";
+}
+.fa-pagelines:before {
+  content: "\f18c";
+}
+.fa-stack-exchange:before {
+  content: "\f18d";
+}
+.fa-arrow-circle-o-right:before {
+  content: "\f18e";
+}
+.fa-arrow-circle-o-left:before {
+  content: "\f190";
+}
+.fa-toggle-left:before,
+.fa-caret-square-o-left:before {
+  content: "\f191";
+}
+.fa-dot-circle-o:before {
+  content: "\f192";
+}
+.fa-wheelchair:before {
+  content: "\f193";
+}
+.fa-vimeo-square:before {
+  content: "\f194";
+}
+.fa-turkish-lira:before,
+.fa-try:before {
+  content: "\f195";
+}
+.fa-plus-square-o:before {
+  content: "\f196";
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/vendor.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/vendor.js
new file mode 100644
index 0000000..bf75939
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/_site/vendor.js
@@ -0,0 +1,14500 @@
+/*!
+ * jQuery JavaScript Library v1.6.1
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu May 12 15:04:36 2011 -0400
+ */
+(function( window, undefined ) {
+
+// Use the correct document accordingly with window argument (sandbox)
+var document = window.document,
+	navigator = window.navigator,
+	location = window.location;
+var jQuery = (function() {
+
+// Define a local copy of jQuery
+var jQuery = function( selector, context ) {
+		// The jQuery object is actually just the init constructor 'enhanced'
+		return new jQuery.fn.init( selector, context, rootjQuery );
+	},
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$,
+
+	// A central reference to the root jQuery(document)
+	rootjQuery,
+
+	// A simple way to check for HTML strings or ID strings
+	// (both of which we optimize for)
+	quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+
+	// Check if a string has a non-whitespace character in it
+	rnotwhite = /\S/,
+
+	// Used for trimming whitespace
+	trimLeft = /^\s+/,
+	trimRight = /\s+$/,
+
+	// Check for digits
+	rdigit = /\d/,
+
+	// Match a standalone tag
+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+
+	// JSON RegExp
+	rvalidchars = /^[\],:{}\s]*$/,
+	rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+	rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+
+	// Useragent RegExp
+	rwebkit = /(webkit)[ \/]([\w.]+)/,
+	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
+	rmsie = /(msie) ([\w.]+)/,
+	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
+
+	// Keep a UserAgent string for use with jQuery.browser
+	userAgent = navigator.userAgent,
+
+	// For matching the engine and version of the browser
+	browserMatch,
+
+	// The deferred used on DOM ready
+	readyList,
+
+	// The ready event handler
+	DOMContentLoaded,
+
+	// Save a reference to some core methods
+	toString = Object.prototype.toString,
+	hasOwn = Object.prototype.hasOwnProperty,
+	push = Array.prototype.push,
+	slice = Array.prototype.slice,
+	trim = String.prototype.trim,
+	indexOf = Array.prototype.indexOf,
+
+	// [[Class]] -> type pairs
+	class2type = {};
+
+jQuery.fn = jQuery.prototype = {
+	constructor: jQuery,
+	init: function( selector, context, rootjQuery ) {
+		var match, elem, ret, doc;
+
+		// Handle $(""), $(null), or $(undefined)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Handle $(DOMElement)
+		if ( selector.nodeType ) {
+			this.context = this[0] = selector;
+			this.length = 1;
+			return this;
+		}
+
+		// The body element only exists once, optimize finding it
+		if ( selector === "body" && !context && document.body ) {
+			this.context = document;
+			this[0] = document.body;
+			this.selector = selector;
+			this.length = 1;
+			return this;
+		}
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			// Are we dealing with HTML string or an ID?
+			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = quickExpr.exec( selector );
+			}
+
+			// Verify a match, and that no context was specified for #id
+			if ( match && (match[1] || !context) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[1] ) {
+					context = context instanceof jQuery ? context[0] : context;
+					doc = (context ? context.ownerDocument || context : document);
+
+					// If a single string is passed in and it's a single tag
+					// just do a createElement and skip the rest
+					ret = rsingleTag.exec( selector );
+
+					if ( ret ) {
+						if ( jQuery.isPlainObject( context ) ) {
+							selector = [ document.createElement( ret[1] ) ];
+							jQuery.fn.attr.call( selector, context, true );
+
+						} else {
+							selector = [ doc.createElement( ret[1] ) ];
+						}
+
+					} else {
+						ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
+						selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
+					}
+
+					return jQuery.merge( this, selector );
+
+				// HANDLE: $("#id")
+				} else {
+					elem = document.getElementById( match[2] );
+
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE and Opera return items
+						// by name instead of ID
+						if ( elem.id !== match[2] ) {
+							return rootjQuery.find( selector );
+						}
+
+						// Otherwise, we inject the element directly into the jQuery object
+						this.length = 1;
+						this[0] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return (context || rootjQuery).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return rootjQuery.ready( selector );
+		}
+
+		if (selector.selector !== undefined) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	},
+
+	// Start with an empty selector
+	selector: "",
+
+	// The current version of jQuery being used
+	jquery: "1.6.1",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	// The number of elements contained in the matched element set
+	size: function() {
+		return this.length;
+	},
+
+	toArray: function() {
+		return slice.call( this, 0 );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num == null ?
+
+			// Return a 'clean' array
+			this.toArray() :
+
+			// Return just the object
+			( num < 0 ? this[ this.length + num ] : this[ num ] );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems, name, selector ) {
+		// Build a new jQuery matched element set
+		var ret = this.constructor();
+
+		if ( jQuery.isArray( elems ) ) {
+			push.apply( ret, elems );
+
+		} else {
+			jQuery.merge( ret, elems );
+		}
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+
+		ret.context = this.context;
+
+		if ( name === "find" ) {
+			ret.selector = this.selector + (this.selector ? " " : "") + selector;
+		} else if ( name ) {
+			ret.selector = this.selector + "." + name + "(" + selector + ")";
+		}
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	// (You can seed the arguments with an array of args, but this is
+	// only used internally.)
+	each: function( callback, args ) {
+		return jQuery.each( this, callback, args );
+	},
+
+	ready: function( fn ) {
+		// Attach the listeners
+		jQuery.bindReady();
+
+		// Add the callback
+		readyList.done( fn );
+
+		return this;
+	},
+
+	eq: function( i ) {
+		return i === -1 ?
+			this.slice( i ) :
+			this.slice( i, +i + 1 );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ),
+			"slice", slice.call(arguments).join(",") );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map(this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		}));
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor(null);
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: [].sort,
+	splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[0] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+		target = arguments[1] || {};
+		// skip the boolean and the target
+		i = 2;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+		target = {};
+	}
+
+	// extend jQuery itself if only one argument is passed
+	if ( length === i ) {
+		target = this;
+		--i;
+	}
+
+	for ( ; i < length; i++ ) {
+		// Only deal with non-null/undefined values
+		if ( (options = arguments[ i ]) != null ) {
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray(src) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject(src) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend({
+	noConflict: function( deep ) {
+		if ( window.$ === jQuery ) {
+			window.$ = _$;
+		}
+
+		if ( deep && window.jQuery === jQuery ) {
+			window.jQuery = _jQuery;
+		}
+
+		return jQuery;
+	},
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Hold (or release) the ready event
+	holdReady: function( hold ) {
+		if ( hold ) {
+			jQuery.readyWait++;
+		} else {
+			jQuery.ready( true );
+		}
+	},
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+		// Either a released hold or an DOMready/load event and not yet ready
+		if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
+			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+			if ( !document.body ) {
+				return setTimeout( jQuery.ready, 1 );
+			}
+
+			// Remember that the DOM is ready
+			jQuery.isReady = true;
+
+			// If a normal DOM Ready event fired, decrement, and wait if need be
+			if ( wait !== true && --jQuery.readyWait > 0 ) {
+				return;
+			}
+
+			// If there are functions bound, to execute
+			readyList.resolveWith( document, [ jQuery ] );
+
+			// Trigger any bound ready events
+			if ( jQuery.fn.trigger ) {
+				jQuery( document ).trigger( "ready" ).unbind( "ready" );
+			}
+		}
+	},
+
+	bindReady: function() {
+		if ( readyList ) {
+			return;
+		}
+
+		readyList = jQuery._Deferred();
+
+		// Catch cases where $(document).ready() is called after the
+		// browser event has already occurred.
+		if ( document.readyState === "complete" ) {
+			// Handle it asynchronously to allow scripts the opportunity to delay ready
+			return setTimeout( jQuery.ready, 1 );
+		}
+
+		// Mozilla, Opera and webkit nightlies currently support this event
+		if ( document.addEventListener ) {
+			// Use the handy event callback
+			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+
+			// A fallback to window.onload, that will always work
+			window.addEventListener( "load", jQuery.ready, false );
+
+		// If IE event model is used
+		} else if ( document.attachEvent ) {
+			// ensure firing before onload,
+			// maybe late but safe also for iframes
+			document.attachEvent( "onreadystatechange", DOMContentLoaded );
+
+			// A fallback to window.onload, that will always work
+			window.attachEvent( "onload", jQuery.ready );
+
+			// If IE and not a frame
+			// continually check to see if the document is ready
+			var toplevel = false;
+
+			try {
+				toplevel = window.frameElement == null;
+			} catch(e) {}
+
+			if ( document.documentElement.doScroll && toplevel ) {
+				doScrollCheck();
+			}
+		}
+	},
+
+	// See test/unit/core.js for details concerning isFunction.
+	// Since version 1.3, DOM methods and functions like alert
+	// aren't supported. They return false on IE (#2968).
+	isFunction: function( obj ) {
+		return jQuery.type(obj) === "function";
+	},
+
+	isArray: Array.isArray || function( obj ) {
+		return jQuery.type(obj) === "array";
+	},
+
+	// A crude way of determining if an object is a window
+	isWindow: function( obj ) {
+		return obj && typeof obj === "object" && "setInterval" in obj;
+	},
+
+	isNaN: function( obj ) {
+		return obj == null || !rdigit.test( obj ) || isNaN( obj );
+	},
+
+	type: function( obj ) {
+		return obj == null ?
+			String( obj ) :
+			class2type[ toString.call(obj) ] || "object";
+	},
+
+	isPlainObject: function( obj ) {
+		// Must be an Object.
+		// Because of IE, we also have to check the presence of the constructor property.
+		// Make sure that DOM nodes and window objects don't pass through, as well
+		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+			return false;
+		}
+
+		// Not own constructor property must be Object
+		if ( obj.constructor &&
+			!hasOwn.call(obj, "constructor") &&
+			!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+			return false;
+		}
+
+		// Own properties are enumerated firstly, so to speed up,
+		// if last one is own, then all properties are own.
+
+		var key;
+		for ( key in obj ) {}
+
+		return key === undefined || hasOwn.call( obj, key );
+	},
+
+	isEmptyObject: function( obj ) {
+		for ( var name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	error: function( msg ) {
+		throw msg;
+	},
+
+	parseJSON: function( data ) {
+		if ( typeof data !== "string" || !data ) {
+			return null;
+		}
+
+		// Make sure leading/trailing whitespace is removed (IE can't handle it)
+		data = jQuery.trim( data );
+
+		// Attempt to parse using the native JSON parser first
+		if ( window.JSON && window.JSON.parse ) {
+			return window.JSON.parse( data );
+		}
+
+		// Make sure the incoming data is actual JSON
+		// Logic borrowed from http://json.org/json2.js
+		if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+			.replace( rvalidtokens, "]" )
+			.replace( rvalidbraces, "")) ) {
+
+			return (new Function( "return " + data ))();
+
+		}
+		jQuery.error( "Invalid JSON: " + data );
+	},
+
+	// Cross-browser xml parsing
+	// (xml & tmp used internally)
+	parseXML: function( data , xml , tmp ) {
+
+		if ( window.DOMParser ) { // Standard
+			tmp = new DOMParser();
+			xml = tmp.parseFromString( data , "text/xml" );
+		} else { // IE
+			xml = new ActiveXObject( "Microsoft.XMLDOM" );
+			xml.async = "false";
+			xml.loadXML( data );
+		}
+
+		tmp = xml.documentElement;
+
+		if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
+			jQuery.error( "Invalid XML: " + data );
+		}
+
+		return xml;
+	},
+
+	noop: function() {},
+
+	// Evaluates a script in a global context
+	// Workarounds based on findings by Jim Driscoll
+	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+	globalEval: function( data ) {
+		if ( data && rnotwhite.test( data ) ) {
+			// We use execScript on Internet Explorer
+			// We use an anonymous function so that context is window
+			// rather than jQuery in Firefox
+			( window.execScript || function( data ) {
+				window[ "eval" ].call( window, data );
+			} )( data );
+		}
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+	},
+
+	// args is for internal usage only
+	each: function( object, callback, args ) {
+		var name, i = 0,
+			length = object.length,
+			isObj = length === undefined || jQuery.isFunction( object );
+
+		if ( args ) {
+			if ( isObj ) {
+				for ( name in object ) {
+					if ( callback.apply( object[ name ], args ) === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( ; i < length; ) {
+					if ( callback.apply( object[ i++ ], args ) === false ) {
+						break;
+					}
+				}
+			}
+
+		// A special, fast, case for the most common use of each
+		} else {
+			if ( isObj ) {
+				for ( name in object ) {
+					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( ; i < length; ) {
+					if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
+						break;
+					}
+				}
+			}
+		}
+
+		return object;
+	},
+
+	// Use native String.trim function wherever possible
+	trim: trim ?
+		function( text ) {
+			return text == null ?
+				"" :
+				trim.call( text );
+		} :
+
+		// Otherwise use our own trimming functionality
+		function( text ) {
+			return text == null ?
+				"" :
+				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
+		},
+
+	// results is for internal usage only
+	makeArray: function( array, results ) {
+		var ret = results || [];
+
+		if ( array != null ) {
+			// The window, strings (and functions) also have 'length'
+			// The extra typeof function check is to prevent crashes
+			// in Safari 2 (See: #3039)
+			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+			var type = jQuery.type( array );
+
+			if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
+				push.call( ret, array );
+			} else {
+				jQuery.merge( ret, array );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, array ) {
+
+		if ( indexOf ) {
+			return indexOf.call( array, elem );
+		}
+
+		for ( var i = 0, length = array.length; i < length; i++ ) {
+			if ( array[ i ] === elem ) {
+				return i;
+			}
+		}
+
+		return -1;
+	},
+
+	merge: function( first, second ) {
+		var i = first.length,
+			j = 0;
+
+		if ( typeof second.length === "number" ) {
+			for ( var l = second.length; j < l; j++ ) {
+				first[ i++ ] = second[ j ];
+			}
+
+		} else {
+			while ( second[j] !== undefined ) {
+				first[ i++ ] = second[ j++ ];
+			}
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, inv ) {
+		var ret = [], retVal;
+		inv = !!inv;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( var i = 0, length = elems.length; i < length; i++ ) {
+			retVal = !!callback( elems[ i ], i );
+			if ( inv !== retVal ) {
+				ret.push( elems[ i ] );
+			}
+		}
+
+		return ret;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var value, key, ret = [],
+			i = 0,
+			length = elems.length,
+			// jquery objects are treated as arrays
+			isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
+
+		// Go through the array, translating each of the items to their
+		if ( isArray ) {
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( key in elems ) {
+				value = callback( elems[ key ], key, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return ret.concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		if ( typeof context === "string" ) {
+			var tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		var args = slice.call( arguments, 2 ),
+			proxy = function() {
+				return fn.apply( context, args.concat( slice.call( arguments ) ) );
+			};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	// Mutifunctional method to get and set values to a collection
+	// The value/s can be optionally by executed if its a function
+	access: function( elems, key, value, exec, fn, pass ) {
+		var length = elems.length;
+
+		// Setting many attributes
+		if ( typeof key === "object" ) {
+			for ( var k in key ) {
+				jQuery.access( elems, k, key[k], exec, fn, value );
+			}
+			return elems;
+		}
+
+		// Setting one attribute
+		if ( value !== undefined ) {
+			// Optionally, function values get executed if exec is true
+			exec = !pass && exec && jQuery.isFunction(value);
+
+			for ( var i = 0; i < length; i++ ) {
+				fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+			}
+
+			return elems;
+		}
+
+		// Getting an attribute
+		return length ? fn( elems[0], key ) : undefined;
+	},
+
+	now: function() {
+		return (new Date()).getTime();
+	},
+
+	// Use of jQuery.browser is frowned upon.
+	// More details: http://docs.jquery.com/Utilities/jQuery.browser
+	uaMatch: function( ua ) {
+		ua = ua.toLowerCase();
+
+		var match = rwebkit.exec( ua ) ||
+			ropera.exec( ua ) ||
+			rmsie.exec( ua ) ||
+			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
+			[];
+
+		return { browser: match[1] || "", version: match[2] || "0" };
+	},
+
+	sub: function() {
+		function jQuerySub( selector, context ) {
+			return new jQuerySub.fn.init( selector, context );
+		}
+		jQuery.extend( true, jQuerySub, this );
+		jQuerySub.superclass = this;
+		jQuerySub.fn = jQuerySub.prototype = this();
+		jQuerySub.fn.constructor = jQuerySub;
+		jQuerySub.sub = this.sub;
+		jQuerySub.fn.init = function init( selector, context ) {
+			if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+				context = jQuerySub( context );
+			}
+
+			return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+		};
+		jQuerySub.fn.init.prototype = jQuerySub.fn;
+		var rootjQuerySub = jQuerySub(document);
+		return jQuerySub;
+	},
+
+	browser: {}
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+browserMatch = jQuery.uaMatch( userAgent );
+if ( browserMatch.browser ) {
+	jQuery.browser[ browserMatch.browser ] = true;
+	jQuery.browser.version = browserMatch.version;
+}
+
+// Deprecated, use jQuery.browser.webkit instead
+if ( jQuery.browser.webkit ) {
+	jQuery.browser.safari = true;
+}
+
+// IE doesn't match non-breaking spaces with \s
+if ( rnotwhite.test( "\xA0" ) ) {
+	trimLeft = /^[\s\xA0]+/;
+	trimRight = /[\s\xA0]+$/;
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+
+// Cleanup functions for the document ready method
+if ( document.addEventListener ) {
+	DOMContentLoaded = function() {
+		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+		jQuery.ready();
+	};
+
+} else if ( document.attachEvent ) {
+	DOMContentLoaded = function() {
+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+		if ( document.readyState === "complete" ) {
+			document.detachEvent( "onreadystatechange", DOMContentLoaded );
+			jQuery.ready();
+		}
+	};
+}
+
+// The DOM ready check for Internet Explorer
+function doScrollCheck() {
+	if ( jQuery.isReady ) {
+		return;
+	}
+
+	try {
+		// If IE is used, use the trick by Diego Perini
+		// http://javascript.nwbox.com/IEContentLoaded/
+		document.documentElement.doScroll("left");
+	} catch(e) {
+		setTimeout( doScrollCheck, 1 );
+		return;
+	}
+
+	// and execute any waiting functions
+	jQuery.ready();
+}
+
+// Expose jQuery to the global object
+return jQuery;
+
+})();
+
+
+var // Promise methods
+	promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ),
+	// Static reference to slice
+	sliceDeferred = [].slice;
+
+jQuery.extend({
+	// Create a simple deferred (one callbacks list)
+	_Deferred: function() {
+		var // callbacks list
+			callbacks = [],
+			// stored [ context , args ]
+			fired,
+			// to avoid firing when already doing so
+			firing,
+			// flag to know if the deferred has been cancelled
+			cancelled,
+			// the deferred itself
+			deferred  = {
+
+				// done( f1, f2, ...)
+				done: function() {
+					if ( !cancelled ) {
+						var args = arguments,
+							i,
+							length,
+							elem,
+							type,
+							_fired;
+						if ( fired ) {
+							_fired = fired;
+							fired = 0;
+						}
+						for ( i = 0, length = args.length; i < length; i++ ) {
+							elem = args[ i ];
+							type = jQuery.type( elem );
+							if ( type === "array" ) {
+								deferred.done.apply( deferred, elem );
+							} else if ( type === "function" ) {
+								callbacks.push( elem );
+							}
+						}
+						if ( _fired ) {
+							deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
+						}
+					}
+					return this;
+				},
+
+				// resolve with given context and args
+				resolveWith: function( context, args ) {
+					if ( !cancelled && !fired && !firing ) {
+						// make sure args are available (#8421)
+						args = args || [];
+						firing = 1;
+						try {
+							while( callbacks[ 0 ] ) {
+								callbacks.shift().apply( context, args );
+							}
+						}
+						finally {
+							fired = [ context, args ];
+							firing = 0;
+						}
+					}
+					return this;
+				},
+
+				// resolve with this as context and given arguments
+				resolve: function() {
+					deferred.resolveWith( this, arguments );
+					return this;
+				},
+
+				// Has this deferred been resolved?
+				isResolved: function() {
+					return !!( firing || fired );
+				},
+
+				// Cancel
+				cancel: function() {
+					cancelled = 1;
+					callbacks = [];
+					return this;
+				}
+			};
+
+		return deferred;
+	},
+
+	// Full fledged deferred (two callbacks list)
+	Deferred: function( func ) {
+		var deferred = jQuery._Deferred(),
+			failDeferred = jQuery._Deferred(),
+			promise;
+		// Add errorDeferred methods, then and promise
+		jQuery.extend( deferred, {
+			then: function( doneCallbacks, failCallbacks ) {
+				deferred.done( doneCallbacks ).fail( failCallbacks );
+				return this;
+			},
+			always: function() {
+				return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments );
+			},
+			fail: failDeferred.done,
+			rejectWith: failDeferred.resolveWith,
+			reject: failDeferred.resolve,
+			isRejected: failDeferred.isResolved,
+			pipe: function( fnDone, fnFail ) {
+				return jQuery.Deferred(function( newDefer ) {
+					jQuery.each( {
+						done: [ fnDone, "resolve" ],
+						fail: [ fnFail, "reject" ]
+					}, function( handler, data ) {
+						var fn = data[ 0 ],
+							action = data[ 1 ],
+							returned;
+						if ( jQuery.isFunction( fn ) ) {
+							deferred[ handler ](function() {
+								returned = fn.apply( this, arguments );
+								if ( returned && jQuery.isFunction( returned.promise ) ) {
+									returned.promise().then( newDefer.resolve, newDefer.reject );
+								} else {
+									newDefer[ action ]( returned );
+								}
+							});
+						} else {
+							deferred[ handler ]( newDefer[ action ] );
+						}
+					});
+				}).promise();
+			},
+			// Get a promise for this deferred
+			// If obj is provided, the promise aspect is added to the object
+			promise: function( obj ) {
+				if ( obj == null ) {
+					if ( promise ) {
+						return promise;
+					}
+					promise = obj = {};
+				}
+				var i = promiseMethods.length;
+				while( i-- ) {
+					obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
+				}
+				return obj;
+			}
+		});
+		// Make sure only one callback list will be used
+		deferred.done( failDeferred.cancel ).fail( deferred.cancel );
+		// Unexpose cancel
+		delete deferred.cancel;
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( firstParam ) {
+		var args = arguments,
+			i = 0,
+			length = args.length,
+			count = length,
+			deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
+				firstParam :
+				jQuery.Deferred();
+		function resolveFunc( i ) {
+			return function( value ) {
+				args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+				if ( !( --count ) ) {
+					// Strange bug in FF4:
+					// Values changed onto the arguments object sometimes end up as undefined values
+					// outside the $.when method. Cloning the object into a fresh array solves the issue
+					deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) );
+				}
+			};
+		}
+		if ( length > 1 ) {
+			for( ; i < length; i++ ) {
+				if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) {
+					args[ i ].promise().then( resolveFunc(i), deferred.reject );
+				} else {
+					--count;
+				}
+			}
+			if ( !count ) {
+				deferred.resolveWith( deferred, args );
+			}
+		} else if ( deferred !== firstParam ) {
+			deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
+		}
+		return deferred.promise();
+	}
+});
+
+
+
+jQuery.support = (function() {
+
+	var div = document.createElement( "div" ),
+		documentElement = document.documentElement,
+		all,
+		a,
+		select,
+		opt,
+		input,
+		marginDiv,
+		support,
+		fragment,
+		body,
+		bodyStyle,
+		tds,
+		events,
+		eventName,
+		i,
+		isSupported;
+
+	// Preliminary tests
+	div.setAttribute("className", "t");
+	div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+
+	all = div.getElementsByTagName( "*" );
+	a = div.getElementsByTagName( "a" )[ 0 ];
+
+	// Can't get basic test support
+	if ( !all || !all.length || !a ) {
+		return {};
+	}
+
+	// First batch of supports tests
+	select = document.createElement( "select" );
+	opt = select.appendChild( document.createElement("option") );
+	input = div.getElementsByTagName( "input" )[ 0 ];
+
+	support = {
+		// IE strips leading whitespace when .innerHTML is used
+		leadingWhitespace: ( div.firstChild.nodeType === 3 ),
+
+		// Make sure that tbody elements aren't automatically inserted
+		// IE will insert them into empty tables
+		tbody: !div.getElementsByTagName( "tbody" ).length,
+
+		// Make sure that link elements get serialized correctly by innerHTML
+		// This requires a wrapper element in IE
+		htmlSerialize: !!div.getElementsByTagName( "link" ).length,
+
+		// Get the style information from getAttribute
+		// (IE uses .cssText instead)
+		style: /top/.test( a.getAttribute("style") ),
+
+		// Make sure that URLs aren't manipulated
+		// (IE normalizes it by default)
+		hrefNormalized: ( a.getAttribute( "href" ) === "/a" ),
+
+		// Make sure that element opacity exists
+		// (IE uses filter instead)
+		// Use a regex to work around a WebKit issue. See #5145
+		opacity: /^0.55$/.test( a.style.opacity ),
+
+		// Verify style float existence
+		// (IE uses styleFloat instead of cssFloat)
+		cssFloat: !!a.style.cssFloat,
+
+		// Make sure that if no value is specified for a checkbox
+		// that it defaults to "on".
+		// (WebKit defaults to "" instead)
+		checkOn: ( input.value === "on" ),
+
+		// Make sure that a selected-by-default option has a working selected property.
+		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+		optSelected: opt.selected,
+
+		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+		getSetAttribute: div.className !== "t",
+
+		// Will be defined later
+		submitBubbles: true,
+		changeBubbles: true,
+		focusinBubbles: false,
+		deleteExpando: true,
+		noCloneEvent: true,
+		inlineBlockNeedsLayout: false,
+		shrinkWrapBlocks: false,
+		reliableMarginRight: true
+	};
+
+	// Make sure checked status is properly cloned
+	input.checked = true;
+	support.noCloneChecked = input.cloneNode( true ).checked;
+
+	// Make sure that the options inside disabled selects aren't marked as disabled
+	// (WebKit marks them as disabled)
+	select.disabled = true;
+	support.optDisabled = !opt.disabled;
+
+	// Test to see if it's possible to delete an expando from an element
+	// Fails in Internet Explorer
+	try {
+		delete div.test;
+	} catch( e ) {
+		support.deleteExpando = false;
+	}
+
+	if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+		div.attachEvent( "onclick", function click() {
+			// Cloning a node shouldn't copy over any
+			// bound event handlers (IE does this)
+			support.noCloneEvent = false;
+			div.detachEvent( "onclick", click );
+		});
+		div.cloneNode( true ).fireEvent( "onclick" );
+	}
+
+	// Check if a radio maintains it's value
+	// after being appended to the DOM
+	input = document.createElement("input");
+	input.value = "t";
+	input.setAttribute("type", "radio");
+	support.radioValue = input.value === "t";
+
+	input.setAttribute("checked", "checked");
+	div.appendChild( input );
+	fragment = document.createDocumentFragment();
+	fragment.appendChild( div.firstChild );
+
+	// WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	div.innerHTML = "";
+
+	// Figure out if the W3C box model works as expected
+	div.style.width = div.style.paddingLeft = "1px";
+
+	// We use our own, invisible, body
+	body = document.createElement( "body" );
+	bodyStyle = {
+		visibility: "hidden",
+		width: 0,
+		height: 0,
+		border: 0,
+		margin: 0,
+		// Set background to avoid IE crashes when removing (#9028)
+		background: "none"
+	};
+	for ( i in bodyStyle ) {
+		body.style[ i ] = bodyStyle[ i ];
+	}
+	body.appendChild( div );
+	documentElement.insertBefore( body, documentElement.firstChild );
+
+	// Check if a disconnected checkbox will retain its checked
+	// value of true after appended to the DOM (IE6/7)
+	support.appendChecked = input.checked;
+
+	support.boxModel = div.offsetWidth === 2;
+
+	if ( "zoom" in div.style ) {
+		// Check if natively block-level elements act like inline-block
+		// elements when setting their display to 'inline' and giving
+		// them layout
+		// (IE < 8 does this)
+		div.style.display = "inline";
+		div.style.zoom = 1;
+		support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
+
+		// Check if elements with layout shrink-wrap their children
+		// (IE 6 does this)
+		div.style.display = "";
+		div.innerHTML = "<div style='width:4px;'></div>";
+		support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
+	}
+
+	div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
+	tds = div.getElementsByTagName( "td" );
+
+	// Check if table cells still have offsetWidth/Height when they are set
+	// to display:none and there are still other visible table cells in a
+	// table row; if so, offsetWidth/Height are not reliable for use when
+	// determining if an element has been hidden directly using
+	// display:none (it is still safe to use offsets if a parent element is
+	// hidden; don safety goggles and see bug #4512 for more information).
+	// (only IE 8 fails this test)
+	isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+	tds[ 0 ].style.display = "";
+	tds[ 1 ].style.display = "none";
+
+	// Check if empty table cells still have offsetWidth/Height
+	// (IE < 8 fail this test)
+	support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+	div.innerHTML = "";
+
+	// Check if div with explicit width and no margin-right incorrectly
+	// gets computed margin-right based on width of container. For more
+	// info see bug #3333
+	// Fails in WebKit before Feb 2011 nightlies
+	// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+	if ( document.defaultView && document.defaultView.getComputedStyle ) {
+		marginDiv = document.createElement( "div" );
+		marginDiv.style.width = "0";
+		marginDiv.style.marginRight = "0";
+		div.appendChild( marginDiv );
+		support.reliableMarginRight =
+			( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
+	}
+
+	// Remove the body element we added
+	body.innerHTML = "";
+	documentElement.removeChild( body );
+
+	// Technique from Juriy Zaytsev
+	// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
+	// We only care about the case where non-standard event systems
+	// are used, namely in IE. Short-circuiting here helps us to
+	// avoid an eval call (in setAttribute) which can cause CSP
+	// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+	if ( div.attachEvent ) {
+		for( i in {
+			submit: 1,
+			change: 1,
+			focusin: 1
+		} ) {
+			eventName = "on" + i;
+			isSupported = ( eventName in div );
+			if ( !isSupported ) {
+				div.setAttribute( eventName, "return;" );
+				isSupported = ( typeof div[ eventName ] === "function" );
+			}
+			support[ i + "Bubbles" ] = isSupported;
+		}
+	}
+
+	return support;
+})();
+
+// Keep track of boxModel
+jQuery.boxModel = jQuery.support.boxModel;
+
+
+
+
+var rbrace = /^(?:\{.*\}|\[.*\])$/,
+	rmultiDash = /([a-z])([A-Z])/g;
+
+jQuery.extend({
+	cache: {},
+
+	// Please use with caution
+	uuid: 0,
+
+	// Unique for each copy of jQuery on the page
+	// Non-digits removed to match rinlinejQuery
+	expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+
+	// The following elements throw uncatchable exceptions if you
+	// attempt to add expando properties to them.
+	noData: {
+		"embed": true,
+		// Ban all objects except for Flash (which handle expandos)
+		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+		"applet": true
+	},
+
+	hasData: function( elem ) {
+		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+
+		return !!elem && !isEmptyDataObject( elem );
+	},
+
+	data: function( elem, name, data, pvt /* Internal Use Only */ ) {
+		if ( !jQuery.acceptData( elem ) ) {
+			return;
+		}
+
+		var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,
+
+			// We have to handle DOM nodes and JS objects differently because IE6-7
+			// can't GC object references properly across the DOM-JS boundary
+			isNode = elem.nodeType,
+
+			// Only DOM nodes need the global jQuery cache; JS object data is
+			// attached directly to the object so GC can occur automatically
+			cache = isNode ? jQuery.cache : elem,
+
+			// Only defining an ID for JS objects if its cache already exists allows
+			// the code to shortcut on the same path as a DOM node with no cache
+			id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;
+
+		// Avoid doing any more work than we need to when trying to get data on an
+		// object that has no data at all
+		if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) {
+			return;
+		}
+
+		if ( !id ) {
+			// Only DOM nodes need a new unique ID for each element since their data
+			// ends up in the global cache
+			if ( isNode ) {
+				elem[ jQuery.expando ] = id = ++jQuery.uuid;
+			} else {
+				id = jQuery.expando;
+			}
+		}
+
+		if ( !cache[ id ] ) {
+			cache[ id ] = {};
+
+			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
+			// metadata on plain JS objects when the object is serialized using
+			// JSON.stringify
+			if ( !isNode ) {
+				cache[ id ].toJSON = jQuery.noop;
+			}
+		}
+
+		// An object can be passed to jQuery.data instead of a key/value pair; this gets
+		// shallow copied over onto the existing cache
+		if ( typeof name === "object" || typeof name === "function" ) {
+			if ( pvt ) {
+				cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
+			} else {
+				cache[ id ] = jQuery.extend(cache[ id ], name);
+			}
+		}
+
+		thisCache = cache[ id ];
+
+		// Internal jQuery data is stored in a separate object inside the object's data
+		// cache in order to avoid key collisions between internal data and user-defined
+		// data
+		if ( pvt ) {
+			if ( !thisCache[ internalKey ] ) {
+				thisCache[ internalKey ] = {};
+			}
+
+			thisCache = thisCache[ internalKey ];
+		}
+
+		if ( data !== undefined ) {
+			thisCache[ jQuery.camelCase( name ) ] = data;
+		}
+
+		// TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
+		// not attempt to inspect the internal events object using jQuery.data, as this
+		// internal data object is undocumented and subject to change.
+		if ( name === "events" && !thisCache[name] ) {
+			return thisCache[ internalKey ] && thisCache[ internalKey ].events;
+		}
+
+		return getByName ? thisCache[ jQuery.camelCase( name ) ] : thisCache;
+	},
+
+	removeData: function( elem, name, pvt /* Internal Use Only */ ) {
+		if ( !jQuery.acceptData( elem ) ) {
+			return;
+		}
+
+		var internalKey = jQuery.expando, isNode = elem.nodeType,
+
+			// See jQuery.data for more information
+			cache = isNode ? jQuery.cache : elem,
+
+			// See jQuery.data for more information
+			id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+		// If there is already no cache entry for this object, there is no
+		// purpose in continuing
+		if ( !cache[ id ] ) {
+			return;
+		}
+
+		if ( name ) {
+			var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
+
+			if ( thisCache ) {
+				delete thisCache[ name ];
+
+				// If there is no data left in the cache, we want to continue
+				// and let the cache object itself get destroyed
+				if ( !isEmptyDataObject(thisCache) ) {
+					return;
+				}
+			}
+		}
+
+		// See jQuery.data for more information
+		if ( pvt ) {
+			delete cache[ id ][ internalKey ];
+
+			// Don't destroy the parent cache unless the internal data object
+			// had been the only thing left in it
+			if ( !isEmptyDataObject(cache[ id ]) ) {
+				return;
+			}
+		}
+
+		var internalCache = cache[ id ][ internalKey ];
+
+		// Browsers that fail expando deletion also refuse to delete expandos on
+		// the window, but it will allow it on all other JS objects; other browsers
+		// don't care
+		if ( jQuery.support.deleteExpando || cache != window ) {
+			delete cache[ id ];
+		} else {
+			cache[ id ] = null;
+		}
+
+		// We destroyed the entire user cache at once because it's faster than
+		// iterating through each key, but we need to continue to persist internal
+		// data if it existed
+		if ( internalCache ) {
+			cache[ id ] = {};
+			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
+			// metadata on plain JS objects when the object is serialized using
+			// JSON.stringify
+			if ( !isNode ) {
+				cache[ id ].toJSON = jQuery.noop;
+			}
+
+			cache[ id ][ internalKey ] = internalCache;
+
+		// Otherwise, we need to eliminate the expando on the node to avoid
+		// false lookups in the cache for entries that no longer exist
+		} else if ( isNode ) {
+			// IE does not allow us to delete expando properties from nodes,
+			// nor does it have a removeAttribute function on Document nodes;
+			// we must handle all of these cases
+			if ( jQuery.support.deleteExpando ) {
+				delete elem[ jQuery.expando ];
+			} else if ( elem.removeAttribute ) {
+				elem.removeAttribute( jQuery.expando );
+			} else {
+				elem[ jQuery.expando ] = null;
+			}
+		}
+	},
+
+	// For internal use only.
+	_data: function( elem, name, data ) {
+		return jQuery.data( elem, name, data, true );
+	},
+
+	// A method for determining if a DOM node can handle the data expando
+	acceptData: function( elem ) {
+		if ( elem.nodeName ) {
+			var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+			if ( match ) {
+				return !(match === true || elem.getAttribute("classid") !== match);
+			}
+		}
+
+		return true;
+	}
+});
+
+jQuery.fn.extend({
+	data: function( key, value ) {
+		var data = null;
+
+		if ( typeof key === "undefined" ) {
+			if ( this.length ) {
+				data = jQuery.data( this[0] );
+
+				if ( this[0].nodeType === 1 ) {
+			    var attr = this[0].attributes, name;
+					for ( var i = 0, l = attr.length; i < l; i++ ) {
+						name = attr[i].name;
+
+						if ( name.indexOf( "data-" ) === 0 ) {
+							name = jQuery.camelCase( name.substring(5) );
+
+							dataAttr( this[0], name, data[ name ] );
+						}
+					}
+				}
+			}
+
+			return data;
+
+		} else if ( typeof key === "object" ) {
+			return this.each(function() {
+				jQuery.data( this, key );
+			});
+		}
+
+		var parts = key.split(".");
+		parts[1] = parts[1] ? "." + parts[1] : "";
+
+		if ( value === undefined ) {
+			data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+
+			// Try to fetch any internally stored data first
+			if ( data === undefined && this.length ) {
+				data = jQuery.data( this[0], key );
+				data = dataAttr( this[0], key, data );
+			}
+
+			return data === undefined && parts[1] ?
+				this.data( parts[0] ) :
+				data;
+
+		} else {
+			return this.each(function() {
+				var $this = jQuery( this ),
+					args = [ parts[0], value ];
+
+				$this.triggerHandler( "setData" + parts[1] + "!", args );
+				jQuery.data( this, key, value );
+				$this.triggerHandler( "changeData" + parts[1] + "!", args );
+			});
+		}
+	},
+
+	removeData: function( key ) {
+		return this.each(function() {
+			jQuery.removeData( this, key );
+		});
+	}
+});
+
+function dataAttr( elem, key, data ) {
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+		var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase();
+
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = data === "true" ? true :
+				data === "false" ? false :
+				data === "null" ? null :
+				!jQuery.isNaN( data ) ? parseFloat( data ) :
+					rbrace.test( data ) ? jQuery.parseJSON( data ) :
+					data;
+			} catch( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			jQuery.data( elem, key, data );
+
+		} else {
+			data = undefined;
+		}
+	}
+
+	return data;
+}
+
+// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON
+// property to be considered empty objects; this property always exists in
+// order to make sure JSON.stringify does not expose internal metadata
+function isEmptyDataObject( obj ) {
+	for ( var name in obj ) {
+		if ( name !== "toJSON" ) {
+			return false;
+		}
+	}
+
+	return true;
+}
+
+
+
+
+function handleQueueMarkDefer( elem, type, src ) {
+	var deferDataKey = type + "defer",
+		queueDataKey = type + "queue",
+		markDataKey = type + "mark",
+		defer = jQuery.data( elem, deferDataKey, undefined, true );
+	if ( defer &&
+		( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&
+		( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {
+		// Give room for hard-coded callbacks to fire first
+		// and eventually mark/queue something else on the element
+		setTimeout( function() {
+			if ( !jQuery.data( elem, queueDataKey, undefined, true ) &&
+				!jQuery.data( elem, markDataKey, undefined, true ) ) {
+				jQuery.removeData( elem, deferDataKey, true );
+				defer.resolve();
+			}
+		}, 0 );
+	}
+}
+
+jQuery.extend({
+
+	_mark: function( elem, type ) {
+		if ( elem ) {
+			type = (type || "fx") + "mark";
+			jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
+		}
+	},
+
+	_unmark: function( force, elem, type ) {
+		if ( force !== true ) {
+			type = elem;
+			elem = force;
+			force = false;
+		}
+		if ( elem ) {
+			type = type || "fx";
+			var key = type + "mark",
+				count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
+			if ( count ) {
+				jQuery.data( elem, key, count, true );
+			} else {
+				jQuery.removeData( elem, key, true );
+				handleQueueMarkDefer( elem, type, "mark" );
+			}
+		}
+	},
+
+	queue: function( elem, type, data ) {
+		if ( elem ) {
+			type = (type || "fx") + "queue";
+			var q = jQuery.data( elem, type, undefined, true );
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !q || jQuery.isArray(data) ) {
+					q = jQuery.data( elem, type, jQuery.makeArray(data), true );
+				} else {
+					q.push( data );
+				}
+			}
+			return q || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			fn = queue.shift(),
+			defer;
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+		}
+
+		if ( fn ) {
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift("inprogress");
+			}
+
+			fn.call(elem, function() {
+				jQuery.dequeue(elem, type);
+			});
+		}
+
+		if ( !queue.length ) {
+			jQuery.removeData( elem, type + "queue", true );
+			handleQueueMarkDefer( elem, type, "queue" );
+		}
+	}
+});
+
+jQuery.fn.extend({
+	queue: function( type, data ) {
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+		}
+
+		if ( data === undefined ) {
+			return jQuery.queue( this[0], type );
+		}
+		return this.each(function() {
+			var queue = jQuery.queue( this, type, data );
+
+			if ( type === "fx" && queue[0] !== "inprogress" ) {
+				jQuery.dequeue( this, type );
+			}
+		});
+	},
+	dequeue: function( type ) {
+		return this.each(function() {
+			jQuery.dequeue( this, type );
+		});
+	},
+	// Based off of the plugin by Clint Helfers, with permission.
+	// http://blindsignals.com/index.php/2009/07/jquery-delay/
+	delay: function( time, type ) {
+		time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
+		type = type || "fx";
+
+		return this.queue( type, function() {
+			var elem = this;
+			setTimeout(function() {
+				jQuery.dequeue( elem, type );
+			}, time );
+		});
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, object ) {
+		if ( typeof type !== "string" ) {
+			object = type;
+			type = undefined;
+		}
+		type = type || "fx";
+		var defer = jQuery.Deferred(),
+			elements = this,
+			i = elements.length,
+			count = 1,
+			deferDataKey = type + "defer",
+			queueDataKey = type + "queue",
+			markDataKey = type + "mark",
+			tmp;
+		function resolve() {
+			if ( !( --count ) ) {
+				defer.resolveWith( elements, [ elements ] );
+			}
+		}
+		while( i-- ) {
+			if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
+					( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
+						jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
+					jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
+				count++;
+				tmp.done( resolve );
+			}
+		}
+		resolve();
+		return defer.promise();
+	}
+});
+
+
+
+
+var rclass = /[\n\t\r]/g,
+	rspace = /\s+/,
+	rreturn = /\r/g,
+	rtype = /^(?:button|input)$/i,
+	rfocusable = /^(?:button|input|object|select|textarea)$/i,
+	rclickable = /^a(?:rea)?$/i,
+	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+	rinvalidChar = /\:/,
+	formHook, boolHook;
+
+jQuery.fn.extend({
+	attr: function( name, value ) {
+		return jQuery.access( this, name, value, true, jQuery.attr );
+	},
+
+	removeAttr: function( name ) {
+		return this.each(function() {
+			jQuery.removeAttr( this, name );
+		});
+	},
+	
+	prop: function( name, value ) {
+		return jQuery.access( this, name, value, true, jQuery.prop );
+	},
+	
+	removeProp: function( name ) {
+		name = jQuery.propFix[ name ] || name;
+		return this.each(function() {
+			// try/catch handles cases where IE balks (such as removing a property on window)
+			try {
+				this[ name ] = undefined;
+				delete this[ name ];
+			} catch( e ) {}
+		});
+	},
+
+	addClass: function( value ) {
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				self.addClass( value.call(this, i, self.attr("class") || "") );
+			});
+		}
+
+		if ( value && typeof value === "string" ) {
+			var classNames = (value || "").split( rspace );
+
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				var elem = this[i];
+
+				if ( elem.nodeType === 1 ) {
+					if ( !elem.className ) {
+						elem.className = value;
+
+					} else {
+						var className = " " + elem.className + " ",
+							setClass = elem.className;
+
+						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
+							if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
+								setClass += " " + classNames[c];
+							}
+						}
+						elem.className = jQuery.trim( setClass );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		if ( jQuery.isFunction(value) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				self.removeClass( value.call(this, i, self.attr("class")) );
+			});
+		}
+
+		if ( (value && typeof value === "string") || value === undefined ) {
+			var classNames = (value || "").split( rspace );
+
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				var elem = this[i];
+
+				if ( elem.nodeType === 1 && elem.className ) {
+					if ( value ) {
+						var className = (" " + elem.className + " ").replace(rclass, " ");
+						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
+							className = className.replace(" " + classNames[c] + " ", " ");
+						}
+						elem.className = jQuery.trim( className );
+
+					} else {
+						elem.className = "";
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value,
+			isBool = typeof stateVal === "boolean";
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
+			});
+		}
+
+		return this.each(function() {
+			if ( type === "string" ) {
+				// toggle individual class names
+				var className,
+					i = 0,
+					self = jQuery( this ),
+					state = stateVal,
+					classNames = value.split( rspace );
+
+				while ( (className = classNames[ i++ ]) ) {
+					// check each className given, space seperated list
+					state = isBool ? state : !self.hasClass( className );
+					self[ state ? "addClass" : "removeClass" ]( className );
+				}
+
+			} else if ( type === "undefined" || type === "boolean" ) {
+				if ( this.className ) {
+					// store className if set
+					jQuery._data( this, "__className__", this.className );
+				}
+
+				// toggle whole className
+				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+			}
+		});
+	},
+
+	hasClass: function( selector ) {
+		var className = " " + selector + " ";
+		for ( var i = 0, l = this.length; i < l; i++ ) {
+			if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+				return true;
+			}
+		}
+
+		return false;
+	},
+
+	val: function( value ) {
+		var hooks, ret,
+			elem = this[0];
+		
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
+
+				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+					return ret;
+				}
+
+				return (elem.value || "").replace(rreturn, "");
+			}
+
+			return undefined;
+		}
+
+		var isFunction = jQuery.isFunction( value );
+
+		return this.each(function( i ) {
+			var self = jQuery(this), val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, self.val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+			} else if ( typeof val === "number" ) {
+				val += "";
+			} else if ( jQuery.isArray( val ) ) {
+				val = jQuery.map(val, function ( value ) {
+					return value == null ? "" : value + "";
+				});
+			}
+
+			hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	valHooks: {
+		option: {
+			get: function( elem ) {
+				// attributes.value is undefined in Blackberry 4.7 but
+				// uses .value. See #6932
+				var val = elem.attributes.value;
+				return !val || val.specified ? elem.value : elem.text;
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value,
+					index = elem.selectedIndex,
+					values = [],
+					options = elem.options,
+					one = elem.type === "select-one";
+
+				// Nothing was selected
+				if ( index < 0 ) {
+					return null;
+				}
+
+				// Loop through all the selected options
+				for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
+					var option = options[ i ];
+
+					// Don't return options that are disabled or in a disabled optgroup
+					if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
+							(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
+				if ( one && !values.length && options.length ) {
+					return jQuery( options[ index ] ).val();
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var values = jQuery.makeArray( value );
+
+				jQuery(elem).find("option").each(function() {
+					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+				});
+
+				if ( !values.length ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	},
+
+	attrFn: {
+		val: true,
+		css: true,
+		html: true,
+		text: true,
+		data: true,
+		width: true,
+		height: true,
+		offset: true
+	},
+	
+	attrFix: {
+		// Always normalize to ensure hook usage
+		tabindex: "tabIndex"
+	},
+	
+	attr: function( elem, name, value, pass ) {
+		var nType = elem.nodeType;
+		
+		// don't get/set attributes on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return undefined;
+		}
+
+		if ( pass && name in jQuery.attrFn ) {
+			return jQuery( elem )[ name ]( value );
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( !("getAttribute" in elem) ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		var ret, hooks,
+			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		// Normalize the name if needed
+		name = notxml && jQuery.attrFix[ name ] || name;
+
+		hooks = jQuery.attrHooks[ name ];
+
+		if ( !hooks ) {
+			// Use boolHook for boolean attributes
+			if ( rboolean.test( name ) &&
+				(typeof value === "boolean" || value === undefined || value.toLowerCase() === name.toLowerCase()) ) {
+
+				hooks = boolHook;
+
+			// Use formHook for forms and if the name contains certain characters
+			} else if ( formHook && (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) {
+				hooks = formHook;
+			}
+		}
+
+		if ( value !== undefined ) {
+
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+				return undefined;
+
+			} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				elem.setAttribute( name, "" + value );
+				return value;
+			}
+
+		} else if ( hooks && "get" in hooks && notxml ) {
+			return hooks.get( elem, name );
+
+		} else {
+
+			ret = elem.getAttribute( name );
+
+			// Non-existent attributes return null, we normalize to undefined
+			return ret === null ?
+				undefined :
+				ret;
+		}
+	},
+
+	removeAttr: function( elem, name ) {
+		var propName;
+		if ( elem.nodeType === 1 ) {
+			name = jQuery.attrFix[ name ] || name;
+		
+			if ( jQuery.support.getSetAttribute ) {
+				// Use removeAttribute in browsers that support it
+				elem.removeAttribute( name );
+			} else {
+				jQuery.attr( elem, name, "" );
+				elem.removeAttributeNode( elem.getAttributeNode( name ) );
+			}
+
+			// Set corresponding property to false for boolean attributes
+			if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) {
+				elem[ propName ] = false;
+			}
+		}
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				// We can't allow the type property to be changed (since it causes problems in IE)
+				if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+					jQuery.error( "type property can't be changed" );
+				} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+					// Setting the type on a radio button after the value resets the value in IE6-9
+					// Reset value to it's default in case type is set after value
+					// This is for element creation
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		},
+		tabIndex: {
+			get: function( elem ) {
+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				var attributeNode = elem.getAttributeNode("tabIndex");
+
+				return attributeNode && attributeNode.specified ?
+					parseInt( attributeNode.value, 10 ) :
+					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+						0 :
+						undefined;
+			}
+		}
+	},
+
+	propFix: {
+		tabindex: "tabIndex",
+		readonly: "readOnly",
+		"for": "htmlFor",
+		"class": "className",
+		maxlength: "maxLength",
+		cellspacing: "cellSpacing",
+		cellpadding: "cellPadding",
+		rowspan: "rowSpan",
+		colspan: "colSpan",
+		usemap: "useMap",
+		frameborder: "frameBorder",
+		contenteditable: "contentEditable"
+	},
+	
+	prop: function( elem, name, value ) {
+		var nType = elem.nodeType;
+
+		// don't get/set properties on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return undefined;
+		}
+
+		var ret, hooks,
+			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		// Try to normalize/fix the name
+		name = notxml && jQuery.propFix[ name ] || name;
+		
+		hooks = jQuery.propHooks[ name ];
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				return (elem[ name ] = value);
+			}
+
+		} else {
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				return elem[ name ];
+			}
+		}
+	},
+	
+	propHooks: {}
+});
+
+// Hook for boolean attributes
+boolHook = {
+	get: function( elem, name ) {
+		// Align boolean attributes with corresponding properties
+		return elem[ jQuery.propFix[ name ] || name ] ?
+			name.toLowerCase() :
+			undefined;
+	},
+	set: function( elem, value, name ) {
+		var propName;
+		if ( value === false ) {
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else {
+			// value is true since we know at this point it's type boolean and not false
+			// Set boolean attributes to the same name and set the DOM property
+			propName = jQuery.propFix[ name ] || name;
+			if ( propName in elem ) {
+				// Only set the IDL specifically if it already exists on the element
+				elem[ propName ] = value;
+			}
+
+			elem.setAttribute( name, name.toLowerCase() );
+		}
+		return name;
+	}
+};
+
+// Use the value property for back compat
+// Use the formHook for button elements in IE6/7 (#1954)
+jQuery.attrHooks.value = {
+	get: function( elem, name ) {
+		if ( formHook && jQuery.nodeName( elem, "button" ) ) {
+			return formHook.get( elem, name );
+		}
+		return elem.value;
+	},
+	set: function( elem, value, name ) {
+		if ( formHook && jQuery.nodeName( elem, "button" ) ) {
+			return formHook.set( elem, value, name );
+		}
+		// Does not return so that setAttribute is also used
+		elem.value = value;
+	}
+};
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !jQuery.support.getSetAttribute ) {
+
+	// propFix is more comprehensive and contains all fixes
+	jQuery.attrFix = jQuery.propFix;
+	
+	// Use this for any attribute on a form in IE6/7
+	formHook = jQuery.attrHooks.name = jQuery.valHooks.button = {
+		get: function( elem, name ) {
+			var ret;
+			ret = elem.getAttributeNode( name );
+			// Return undefined if nodeValue is empty string
+			return ret && ret.nodeValue !== "" ?
+				ret.nodeValue :
+				undefined;
+		},
+		set: function( elem, value, name ) {
+			// Check form objects in IE (multiple bugs related)
+			// Only use nodeValue if the attribute node exists on the form
+			var ret = elem.getAttributeNode( name );
+			if ( ret ) {
+				ret.nodeValue = value;
+				return value;
+			}
+		}
+	};
+
+	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
+	// This is for removals
+	jQuery.each([ "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			set: function( elem, value ) {
+				if ( value === "" ) {
+					elem.setAttribute( name, "auto" );
+					return value;
+				}
+			}
+		});
+	});
+}
+
+
+// Some attributes require a special call on IE
+if ( !jQuery.support.hrefNormalized ) {
+	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			get: function( elem ) {
+				var ret = elem.getAttribute( name, 2 );
+				return ret === null ? undefined : ret;
+			}
+		});
+	});
+}
+
+if ( !jQuery.support.style ) {
+	jQuery.attrHooks.style = {
+		get: function( elem ) {
+			// Return undefined in the case of empty string
+			// Normalize to lowercase since IE uppercases css property names
+			return elem.style.cssText.toLowerCase() || undefined;
+		},
+		set: function( elem, value ) {
+			return (elem.style.cssText = "" + value);
+		}
+	};
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+		get: function( elem ) {
+			var parent = elem.parentNode;
+
+			if ( parent ) {
+				parent.selectedIndex;
+
+				// Make sure that it also works with optgroups, see #5701
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+		}
+	});
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+	jQuery.each([ "radio", "checkbox" ], function() {
+		jQuery.valHooks[ this ] = {
+			get: function( elem ) {
+				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+				return elem.getAttribute("value") === null ? "on" : elem.value;
+			}
+		};
+	});
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+		set: function( elem, value ) {
+			if ( jQuery.isArray( value ) ) {
+				return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);
+			}
+		}
+	});
+});
+
+
+
+
+var hasOwn = Object.prototype.hasOwnProperty,
+	rnamespaces = /\.(.*)$/,
+	rformElems = /^(?:textarea|input|select)$/i,
+	rperiod = /\./g,
+	rspaces = / /g,
+	rescape = /[^\w\s.|`]/g,
+	fcleanup = function( nm ) {
+		return nm.replace(rescape, "\\$&");
+	};
+
+/*
+ * A number of helper functions used for managing events.
+ * Many of the ideas behind this code originated from
+ * Dean Edwards' addEvent library.
+ */
+jQuery.event = {
+
+	// Bind an event to an element
+	// Original by Dean Edwards
+	add: function( elem, types, handler, data ) {
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		if ( handler === false ) {
+			handler = returnFalse;
+		} else if ( !handler ) {
+			// Fixes bug #7229. Fix recommended by jdalton
+			return;
+		}
+
+		var handleObjIn, handleObj;
+
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+		}
+
+		// Make sure that the function being executed has a unique ID
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure
+		var elemData = jQuery._data( elem );
+
+		// If no elemData is found then we must be trying to bind to one of the
+		// banned noData elements
+		if ( !elemData ) {
+			return;
+		}
+
+		var events = elemData.events,
+			eventHandle = elemData.handle;
+
+		if ( !events ) {
+			elemData.events = events = {};
+		}
+
+		if ( !eventHandle ) {
+			elemData.handle = eventHandle = function( e ) {
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+					jQuery.event.handle.apply( eventHandle.elem, arguments ) :
+					undefined;
+			};
+		}
+
+		// Add elem as a property of the handle function
+		// This is to prevent a memory leak with non-native events in IE.
+		eventHandle.elem = elem;
+
+		// Handle multiple events separated by a space
+		// jQuery(...).bind("mouseover mouseout", fn);
+		types = types.split(" ");
+
+		var type, i = 0, namespaces;
+
+		while ( (type = types[ i++ ]) ) {
+			handleObj = handleObjIn ?
+				jQuery.extend({}, handleObjIn) :
+				{ handler: handler, data: data };
+
+			// Namespaced event handlers
+			if ( type.indexOf(".") > -1 ) {
+				namespaces = type.split(".");
+				type = namespaces.shift();
+				handleObj.namespace = namespaces.slice(0).sort().join(".");
+
+			} else {
+				namespaces = [];
+				handleObj.namespace = "";
+			}
+
+			handleObj.type = type;
+			if ( !handleObj.guid ) {
+				handleObj.guid = handler.guid;
+			}
+
+			// Get the current list of functions bound to this event
+			var handlers = events[ type ],
+				special = jQuery.event.special[ type ] || {};
+
+			// Init the event handler queue
+			if ( !handlers ) {
+				handlers = events[ type ] = [];
+
+				// Check for a special event handler
+				// Only use addEventListener/attachEvent if the special
+				// events handler returns false
+				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+					// Bind the global event handler to the element
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle, false );
+
+					} else if ( elem.attachEvent ) {
+						elem.attachEvent( "on" + type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add the function to the element's handler list
+			handlers.push( handleObj );
+
+			// Keep track of which events have been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+		// Nullify elem to prevent memory leaks in IE
+		elem = null;
+	},
+
+	global: {},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, pos ) {
+		// don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		if ( handler === false ) {
+			handler = returnFalse;
+		}
+
+		var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
+			elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
+			events = elemData && elemData.events;
+
+		if ( !elemData || !events ) {
+			return;
+		}
+
+		// types is actually an event object here
+		if ( types && types.type ) {
+			handler = types.handler;
+			types = types.type;
+		}
+
+		// Unbind all events for the element
+		if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
+			types = types || "";
+
+			for ( type in events ) {
+				jQuery.event.remove( elem, type + types );
+			}
+
+			return;
+		}
+
+		// Handle multiple events separated by a space
+		// jQuery(...).unbind("mouseover mouseout", fn);
+		types = types.split(" ");
+
+		while ( (type = types[ i++ ]) ) {
+			origType = type;
+			handleObj = null;
+			all = type.indexOf(".") < 0;
+			namespaces = [];
+
+			if ( !all ) {
+				// Namespaced event handlers
+				namespaces = type.split(".");
+				type = namespaces.shift();
+
+				namespace = new RegExp("(^|\\.)" +
+					jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
+			}
+
+			eventType = events[ type ];
+
+			if ( !eventType ) {
+				continue;
+			}
+
+			if ( !handler ) {
+				for ( j = 0; j < eventType.length; j++ ) {
+					handleObj = eventType[ j ];
+
+					if ( all || namespace.test( handleObj.namespace ) ) {
+						jQuery.event.remove( elem, origType, handleObj.handler, j );
+						eventType.splice( j--, 1 );
+					}
+				}
+
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+
+			for ( j = pos || 0; j < eventType.length; j++ ) {
+				handleObj = eventType[ j ];
+
+				if ( handler.guid === handleObj.guid ) {
+					// remove the given handler for the given type
+					if ( all || namespace.test( handleObj.namespace ) ) {
+						if ( pos == null ) {
+							eventType.splice( j--, 1 );
+						}
+
+						if ( special.remove ) {
+							special.remove.call( elem, handleObj );
+						}
+					}
+
+					if ( pos != null ) {
+						break;
+					}
+				}
+			}
+
+			// remove generic event handler if no more handlers exist
+			if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
+				if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				ret = null;
+				delete events[ type ];
+			}
+		}
+
+		// Remove the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			var handle = elemData.handle;
+			if ( handle ) {
+				handle.elem = null;
+			}
+
+			delete elemData.events;
+			delete elemData.handle;
+
+			if ( jQuery.isEmptyObject( elemData ) ) {
+				jQuery.removeData( elem, undefined, true );
+			}
+		}
+	},
+	
+	// Events that are safe to short-circuit if no handlers are attached.
+	// Native DOM events should not be added, they may have inline handlers.
+	customEvent: {
+		"getData": true,
+		"setData": true,
+		"changeData": true
+	},
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+		// Event object or event type
+		var type = event.type || event,
+			namespaces = [],
+			exclusive;
+
+		if ( type.indexOf("!") >= 0 ) {
+			// Exclusive events trigger only for the exact event (no namespaces)
+			type = type.slice(0, -1);
+			exclusive = true;
+		}
+
+		if ( type.indexOf(".") >= 0 ) {
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split(".");
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+
+		if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+			// No jQuery handlers for this event type, and it can't have inline handlers
+			return;
+		}
+
+		// Caller can pass in an Event, Object, or just an event type string
+		event = typeof event === "object" ?
+			// jQuery.Event object
+			event[ jQuery.expando ] ? event :
+			// Object literal
+			new jQuery.Event( type, event ) :
+			// Just the event type (string)
+			new jQuery.Event( type );
+
+		event.type = type;
+		event.exclusive = exclusive;
+		event.namespace = namespaces.join(".");
+		event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)");
+		
+		// triggerHandler() and global events don't bubble or run the default action
+		if ( onlyHandlers || !elem ) {
+			event.preventDefault();
+			event.stopPropagation();
+		}
+
+		// Handle a global trigger
+		if ( !elem ) {
+			// TODO: Stop taunting the data cache; remove global events and always attach to document
+			jQuery.each( jQuery.cache, function() {
+				// internalKey variable is just used to make it easier to find
+				// and potentially change this stuff later; currently it just
+				// points to jQuery.expando
+				var internalKey = jQuery.expando,
+					internalCache = this[ internalKey ];
+				if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
+					jQuery.event.trigger( event, data, internalCache.handle.elem );
+				}
+			});
+			return;
+		}
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		event.target = elem;
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data ? jQuery.makeArray( data ) : [];
+		data.unshift( event );
+
+		var cur = elem,
+			// IE doesn't like method names with a colon (#3533, #8272)
+			ontype = type.indexOf(":") < 0 ? "on" + type : "";
+
+		// Fire event on the current element, then bubble up the DOM tree
+		do {
+			var handle = jQuery._data( cur, "handle" );
+
+			event.currentTarget = cur;
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Trigger an inline bound script
+			if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) {
+				event.result = false;
+				event.preventDefault();
+			}
+
+			// Bubble up to document, then to window
+			cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window;
+		} while ( cur && !event.isPropagationStopped() );
+
+		// If nobody prevented the default action, do it now
+		if ( !event.isDefaultPrevented() ) {
+			var old,
+				special = jQuery.event.special[ type ] || {};
+
+			if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) &&
+				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name name as the event.
+				// Can't use an .isFunction)() check here because IE6/7 fails that test.
+				// IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch.
+				try {
+					if ( ontype && elem[ type ] ) {
+						// Don't re-trigger an onFOO event when we call its FOO() method
+						old = elem[ ontype ];
+
+						if ( old ) {
+							elem[ ontype ] = null;
+						}
+
+						jQuery.event.triggered = type;
+						elem[ type ]();
+					}
+				} catch ( ieError ) {}
+
+				if ( old ) {
+					elem[ ontype ] = old;
+				}
+
+				jQuery.event.triggered = undefined;
+			}
+		}
+		
+		return event.result;
+	},
+
+	handle: function( event ) {
+		event = jQuery.event.fix( event || window.event );
+		// Snapshot the handlers list since a called handler may add/remove events.
+		var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0),
+			run_all = !event.exclusive && !event.namespace,
+			args = Array.prototype.slice.call( arguments, 0 );
+
+		// Use the fix-ed Event rather than the (read-only) native event
+		args[0] = event;
+		event.currentTarget = this;
+
+		for ( var j = 0, l = handlers.length; j < l; j++ ) {
+			var handleObj = handlers[ j ];
+
+			// Triggered event must 1) be non-exclusive and have no namespace, or
+			// 2) have namespace(s) a subset or equal to those in the bound event.
+			if ( run_all || event.namespace_re.test( handleObj.namespace ) ) {
+				// Pass in a reference to the handler function itself
+				// So that we can later remove it
+				event.handler = handleObj.handler;
+				event.data = handleObj.data;
+				event.handleObj = handleObj;
+
+				var ret = handleObj.handler.apply( this, args );
+
+				if ( ret !== undefined ) {
+					event.result = ret;
+					if ( ret === false ) {
+						event.preventDefault();
+						event.stopPropagation();
+					}
+				}
+
+				if ( event.isImmediatePropagationStopped() ) {
+					break;
+				}
+			}
+		}
+		return event.result;
+	},
+
+	props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+
+	fix: function( event ) {
+		if ( event[ jQuery.expando ] ) {
+			return event;
+		}
+
+		// store a copy of the original event object
+		// and "clone" to set read-only properties
+		var originalEvent = event;
+		event = jQuery.Event( originalEvent );
+
+		for ( var i = this.props.length, prop; i; ) {
+			prop = this.props[ --i ];
+			event[ prop ] = originalEvent[ prop ];
+		}
+
+		// Fix target property, if necessary
+		if ( !event.target ) {
+			// Fixes #1925 where srcElement might not be defined either
+			event.target = event.srcElement || document;
+		}
+
+		// check if target is a textnode (safari)
+		if ( event.target.nodeType === 3 ) {
+			event.target = event.target.parentNode;
+		}
+
+		// Add relatedTarget, if necessary
+		if ( !event.relatedTarget && event.fromElement ) {
+			event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
+		}
+
+		// Calculate pageX/Y if missing and clientX/Y available
+		if ( event.pageX == null && event.clientX != null ) {
+			var eventDocument = event.target.ownerDocument || document,
+				doc = eventDocument.documentElement,
+				body = eventDocument.body;
+
+			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
+			event.pageY = event.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);
+		}
+
+		// Add which for key events
+		if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
+			event.which = event.charCode != null ? event.charCode : event.keyCode;
+		}
+
+		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
+		if ( !event.metaKey && event.ctrlKey ) {
+			event.metaKey = event.ctrlKey;
+		}
+
+		// Add which for click: 1 === left; 2 === middle; 3 === right
+		// Note: button is not normalized, so don't use it
+		if ( !event.which && event.button !== undefined ) {
+			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
+		}
+
+		return event;
+	},
+
+	// Deprecated, use jQuery.guid instead
+	guid: 1E8,
+
+	// Deprecated, use jQuery.proxy instead
+	proxy: jQuery.proxy,
+
+	special: {
+		ready: {
+			// Make sure the ready event is setup
+			setup: jQuery.bindReady,
+			teardown: jQuery.noop
+		},
+
+		live: {
+			add: function( handleObj ) {
+				jQuery.event.add( this,
+					liveConvert( handleObj.origType, handleObj.selector ),
+					jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
+			},
+
+			remove: function( handleObj ) {
+				jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
+			}
+		},
+
+		beforeunload: {
+			setup: function( data, namespaces, eventHandle ) {
+				// We only want to do this special case on windows
+				if ( jQuery.isWindow( this ) ) {
+					this.onbeforeunload = eventHandle;
+				}
+			},
+
+			teardown: function( namespaces, eventHandle ) {
+				if ( this.onbeforeunload === eventHandle ) {
+					this.onbeforeunload = null;
+				}
+			}
+		}
+	}
+};
+
+jQuery.removeEvent = document.removeEventListener ?
+	function( elem, type, handle ) {
+		if ( elem.removeEventListener ) {
+			elem.removeEventListener( type, handle, false );
+		}
+	} :
+	function( elem, type, handle ) {
+		if ( elem.detachEvent ) {
+			elem.detachEvent( "on" + type, handle );
+		}
+	};
+
+jQuery.Event = function( src, props ) {
+	// Allow instantiation without the 'new' keyword
+	if ( !this.preventDefault ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
+			src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// timeStamp is buggy for some events on Firefox(#3843)
+	// So we won't rely on the native value
+	this.timeStamp = jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+function returnFalse() {
+	return false;
+}
+function returnTrue() {
+	return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	preventDefault: function() {
+		this.isDefaultPrevented = returnTrue;
+
+		var e = this.originalEvent;
+		if ( !e ) {
+			return;
+		}
+
+		// if preventDefault exists run it on the original event
+		if ( e.preventDefault ) {
+			e.preventDefault();
+
+		// otherwise set the returnValue property of the original event to false (IE)
+		} else {
+			e.returnValue = false;
+		}
+	},
+	stopPropagation: function() {
+		this.isPropagationStopped = returnTrue;
+
+		var e = this.originalEvent;
+		if ( !e ) {
+			return;
+		}
+		// if stopPropagation exists run it on the original event
+		if ( e.stopPropagation ) {
+			e.stopPropagation();
+		}
+		// otherwise set the cancelBubble property of the original event to true (IE)
+		e.cancelBubble = true;
+	},
+	stopImmediatePropagation: function() {
+		this.isImmediatePropagationStopped = returnTrue;
+		this.stopPropagation();
+	},
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse
+};
+
+// Checks if an event happened on an element within another element
+// Used in jQuery.event.special.mouseenter and mouseleave handlers
+var withinElement = function( event ) {
+	// Check if mouse(over|out) are still within the same parent element
+	var parent = event.relatedTarget;
+
+	// set the correct event type
+	event.type = event.data;
+
+	// Firefox sometimes assigns relatedTarget a XUL element
+	// which we cannot access the parentNode property of
+	try {
+
+		// Chrome does something similar, the parentNode property
+		// can be accessed but is null.
+		if ( parent && parent !== document && !parent.parentNode ) {
+			return;
+		}
+
+		// Traverse up the tree
+		while ( parent && parent !== this ) {
+			parent = parent.parentNode;
+		}
+
+		if ( parent !== this ) {
+			// handle event if we actually just moused on to a non sub-element
+			jQuery.event.handle.apply( this, arguments );
+		}
+
+	// assuming we've left the element since we most likely mousedover a xul element
+	} catch(e) { }
+},
+
+// In case of event delegation, we only need to rename the event.type,
+// liveHandler will take care of the rest.
+delegate = function( event ) {
+	event.type = event.data;
+	jQuery.event.handle.apply( this, arguments );
+};
+
+// Create mouseenter and mouseleave events
+jQuery.each({
+	mouseenter: "mouseover",
+	mouseleave: "mouseout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		setup: function( data ) {
+			jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
+		},
+		teardown: function( data ) {
+			jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
+		}
+	};
+});
+
+// submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+	jQuery.event.special.submit = {
+		setup: function( data, namespaces ) {
+			if ( !jQuery.nodeName( this, "form" ) ) {
+				jQuery.event.add(this, "click.specialSubmit", function( e ) {
+					var elem = e.target,
+						type = elem.type;
+
+					if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
+						trigger( "submit", this, arguments );
+					}
+				});
+
+				jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
+					var elem = e.target,
+						type = elem.type;
+
+					if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
+						trigger( "submit", this, arguments );
+					}
+				});
+
+			} else {
+				return false;
+			}
+		},
+
+		teardown: function( namespaces ) {
+			jQuery.event.remove( this, ".specialSubmit" );
+		}
+	};
+
+}
+
+// change delegation, happens here so we have bind.
+if ( !jQuery.support.changeBubbles ) {
+
+	var changeFilters,
+
+	getVal = function( elem ) {
+		var type = elem.type, val = elem.value;
+
+		if ( type === "radio" || type === "checkbox" ) {
+			val = elem.checked;
+
+		} else if ( type === "select-multiple" ) {
+			val = elem.selectedIndex > -1 ?
+				jQuery.map( elem.options, function( elem ) {
+					return elem.selected;
+				}).join("-") :
+				"";
+
+		} else if ( jQuery.nodeName( elem, "select" ) ) {
+			val = elem.selectedIndex;
+		}
+
+		return val;
+	},
+
+	testChange = function testChange( e ) {
+		var elem = e.target, data, val;
+
+		if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {
+			return;
+		}
+
+		data = jQuery._data( elem, "_change_data" );
+		val = getVal(elem);
+
+		// the current data will be also retrieved by beforeactivate
+		if ( e.type !== "focusout" || elem.type !== "radio" ) {
+			jQuery._data( elem, "_change_data", val );
+		}
+
+		if ( data === undefined || val === data ) {
+			return;
+		}
+
+		if ( data != null || val ) {
+			e.type = "change";
+			e.liveFired = undefined;
+			jQuery.event.trigger( e, arguments[1], elem );
+		}
+	};
+
+	jQuery.event.special.change = {
+		filters: {
+			focusout: testChange,
+
+			beforedeactivate: testChange,
+
+			click: function( e ) {
+				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
+
+				if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) {
+					testChange.call( this, e );
+				}
+			},
+
+			// Change has to be called before submit
+			// Keydown will be called before keypress, which is used in submit-event delegation
+			keydown: function( e ) {
+				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
+
+				if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) ||
+					(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
+					type === "select-multiple" ) {
+					testChange.call( this, e );
+				}
+			},
+
+			// Beforeactivate happens also before the previous element is blurred
+			// with this event you can't trigger a change event, but you can store
+			// information
+			beforeactivate: function( e ) {
+				var elem = e.target;
+				jQuery._data( elem, "_change_data", getVal(elem) );
+			}
+		},
+
+		setup: function( data, namespaces ) {
+			if ( this.type === "file" ) {
+				return false;
+			}
+
+			for ( var type in changeFilters ) {
+				jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
+			}
+
+			return rformElems.test( this.nodeName );
+		},
+
+		teardown: function( namespaces ) {
+			jQuery.event.remove( this, ".specialChange" );
+
+			return rformElems.test( this.nodeName );
+		}
+	};
+
+	changeFilters = jQuery.event.special.change.filters;
+
+	// Handle when the input is .focus()'d
+	changeFilters.focus = changeFilters.beforeactivate;
+}
+
+function trigger( type, elem, args ) {
+	// Piggyback on a donor event to simulate a different one.
+	// Fake originalEvent to avoid donor's stopPropagation, but if the
+	// simulated event prevents default then we do the same on the donor.
+	// Don't pass args or remember liveFired; they apply to the donor event.
+	var event = jQuery.extend( {}, args[ 0 ] );
+	event.type = type;
+	event.originalEvent = {};
+	event.liveFired = undefined;
+	jQuery.event.handle.call( elem, event );
+	if ( event.isDefaultPrevented() ) {
+		args[ 0 ].preventDefault();
+	}
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler while someone wants focusin/focusout
+		var attaches = 0;
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				if ( attaches++ === 0 ) {
+					document.addEventListener( orig, handler, true );
+				}
+			},
+			teardown: function() {
+				if ( --attaches === 0 ) {
+					document.removeEventListener( orig, handler, true );
+				}
+			}
+		};
+
+		function handler( donor ) {
+			// Donor event is always a native one; fix it and switch its type.
+			// Let focusin/out handler cancel the donor focus/blur event.
+			var e = jQuery.event.fix( donor );
+			e.type = fix;
+			e.originalEvent = {};
+			jQuery.event.trigger( e, null, e.target );
+			if ( e.isDefaultPrevented() ) {
+				donor.preventDefault();
+			}
+		}
+	});
+}
+
+jQuery.each(["bind", "one"], function( i, name ) {
+	jQuery.fn[ name ] = function( type, data, fn ) {
+		var handler;
+
+		// Handle object literals
+		if ( typeof type === "object" ) {
+			for ( var key in type ) {
+				this[ name ](key, data, type[key], fn);
+			}
+			return this;
+		}
+
+		if ( arguments.length === 2 || data === false ) {
+			fn = data;
+			data = undefined;
+		}
+
+		if ( name === "one" ) {
+			handler = function( event ) {
+				jQuery( this ).unbind( event, handler );
+				return fn.apply( this, arguments );
+			};
+			handler.guid = fn.guid || jQuery.guid++;
+		} else {
+			handler = fn;
+		}
+
+		if ( type === "unload" && name !== "one" ) {
+			this.one( type, data, fn );
+
+		} else {
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				jQuery.event.add( this[i], type, handler, data );
+			}
+		}
+
+		return this;
+	};
+});
+
+jQuery.fn.extend({
+	unbind: function( type, fn ) {
+		// Handle object literals
+		if ( typeof type === "object" && !type.preventDefault ) {
+			for ( var key in type ) {
+				this.unbind(key, type[key]);
+			}
+
+		} else {
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				jQuery.event.remove( this[i], type, fn );
+			}
+		}
+
+		return this;
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.live( types, data, fn, selector );
+	},
+
+	undelegate: function( selector, types, fn ) {
+		if ( arguments.length === 0 ) {
+			return this.unbind( "live" );
+
+		} else {
+			return this.die( types, null, fn, selector );
+		}
+	},
+
+	trigger: function( type, data ) {
+		return this.each(function() {
+			jQuery.event.trigger( type, data, this );
+		});
+	},
+
+	triggerHandler: function( type, data ) {
+		if ( this[0] ) {
+			return jQuery.event.trigger( type, data, this[0], true );
+		}
+	},
+
+	toggle: function( fn ) {
+		// Save reference to arguments for access in closure
+		var args = arguments,
+			guid = fn.guid || jQuery.guid++,
+			i = 0,
+			toggler = function( event ) {
+				// Figure out which function to execute
+				var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+				jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+				// Make sure that clicks stop
+				event.preventDefault();
+
+				// and execute the function
+				return args[ lastToggle ].apply( this, arguments ) || false;
+			};
+
+		// link all the functions, so any of them can unbind this click handler
+		toggler.guid = guid;
+		while ( i < args.length ) {
+			args[ i++ ].guid = guid;
+		}
+
+		return this.click( toggler );
+	},
+
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+});
+
+var liveMap = {
+	focus: "focusin",
+	blur: "focusout",
+	mouseenter: "mouseover",
+	mouseleave: "mouseout"
+};
+
+jQuery.each(["live", "die"], function( i, name ) {
+	jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
+		var type, i = 0, match, namespaces, preType,
+			selector = origSelector || this.selector,
+			context = origSelector ? this : jQuery( this.context );
+
+		if ( typeof types === "object" && !types.preventDefault ) {
+			for ( var key in types ) {
+				context[ name ]( key, data, types[key], selector );
+			}
+
+			return this;
+		}
+
+		if ( name === "die" && !types &&
+					origSelector && origSelector.charAt(0) === "." ) {
+
+			context.unbind( origSelector );
+
+			return this;
+		}
+
+		if ( data === false || jQuery.isFunction( data ) ) {
+			fn = data || returnFalse;
+			data = undefined;
+		}
+
+		types = (types || "").split(" ");
+
+		while ( (type = types[ i++ ]) != null ) {
+			match = rnamespaces.exec( type );
+			namespaces = "";
+
+			if ( match )  {
+				namespaces = match[0];
+				type = type.replace( rnamespaces, "" );
+			}
+
+			if ( type === "hover" ) {
+				types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
+				continue;
+			}
+
+			preType = type;
+
+			if ( liveMap[ type ] ) {
+				types.push( liveMap[ type ] + namespaces );
+				type = type + namespaces;
+
+			} else {
+				type = (liveMap[ type ] || type) + namespaces;
+			}
+
+			if ( name === "live" ) {
+				// bind live handler
+				for ( var j = 0, l = context.length; j < l; j++ ) {
+					jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
+						{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
+				}
+
+			} else {
+				// unbind live handler
+				context.unbind( "live." + liveConvert( type, selector ), fn );
+			}
+		}
+
+		return this;
+	};
+});
+
+function liveHandler( event ) {
+	var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
+		elems = [],
+		selectors = [],
+		events = jQuery._data( this, "events" );
+
+	// Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)
+	if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) {
+		return;
+	}
+
+	if ( event.namespace ) {
+		namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
+	}
+
+	event.liveFired = this;
+
+	var live = events.live.slice(0);
+
+	for ( j = 0; j < live.length; j++ ) {
+		handleObj = live[j];
+
+		if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
+			selectors.push( handleObj.selector );
+
+		} else {
+			live.splice( j--, 1 );
+		}
+	}
+
+	match = jQuery( event.target ).closest( selectors, event.currentTarget );
+
+	for ( i = 0, l = match.length; i < l; i++ ) {
+		close = match[i];
+
+		for ( j = 0; j < live.length; j++ ) {
+			handleObj = live[j];
+
+			if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {
+				elem = close.elem;
+				related = null;
+
+				// Those two events require additional checking
+				if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
+					event.type = handleObj.preType;
+					related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
+
+					// Make sure not to accidentally match a child element with the same selector
+					if ( related && jQuery.contains( elem, related ) ) {
+						related = elem;
+					}
+				}
+
+				if ( !related || related !== elem ) {
+					elems.push({ elem: elem, handleObj: handleObj, level: close.level });
+				}
+			}
+		}
+	}
+
+	for ( i = 0, l = elems.length; i < l; i++ ) {
+		match = elems[i];
+
+		if ( maxLevel && match.level > maxLevel ) {
+			break;
+		}
+
+		event.currentTarget = match.elem;
+		event.data = match.handleObj.data;
+		event.handleObj = match.handleObj;
+
+		ret = match.handleObj.origHandler.apply( match.elem, arguments );
+
+		if ( ret === false || event.isPropagationStopped() ) {
+			maxLevel = match.level;
+
+			if ( ret === false ) {
+				stop = false;
+			}
+			if ( event.isImmediatePropagationStopped() ) {
+				break;
+			}
+		}
+	}
+
+	return stop;
+}
+
+function liveConvert( type, selector ) {
+	return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&");
+}
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup error").split(" "), function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		if ( fn == null ) {
+			fn = data;
+			data = null;
+		}
+
+		return arguments.length > 0 ?
+			this.bind( name, data, fn ) :
+			this.trigger( name );
+	};
+
+	if ( jQuery.attrFn ) {
+		jQuery.attrFn[ name ] = true;
+	}
+});
+
+
+
+/*!
+ * Sizzle CSS Selector Engine
+ *  Copyright 2011, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+	done = 0,
+	toString = Object.prototype.toString,
+	hasDuplicate = false,
+	baseHasDuplicate = true,
+	rBackslash = /\\/g,
+	rNonWord = /\W/;
+
+// Here we check if the JavaScript engine is using some sort of
+// optimization where it does not always call our comparision
+// function. If that is the case, discard the hasDuplicate value.
+//   Thus far that includes Google Chrome.
+[0, 0].sort(function() {
+	baseHasDuplicate = false;
+	return 0;
+});
+
+var Sizzle = function( selector, context, results, seed ) {
+	results = results || [];
+	context = context || document;
+
+	var origContext = context;
+
+	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+		return [];
+	}
+	
+	if ( !selector || typeof selector !== "string" ) {
+		return results;
+	}
+
+	var m, set, checkSet, extra, ret, cur, pop, i,
+		prune = true,
+		contextXML = Sizzle.isXML( context ),
+		parts = [],
+		soFar = selector;
+	
+	// Reset the position of the chunker regexp (start from head)
+	do {
+		chunker.exec( "" );
+		m = chunker.exec( soFar );
+
+		if ( m ) {
+			soFar = m[3];
+		
+			parts.push( m[1] );
+		
+			if ( m[2] ) {
+				extra = m[3];
+				break;
+			}
+		}
+	} while ( m );
+
+	if ( parts.length > 1 && origPOS.exec( selector ) ) {
+
+		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+			set = posProcess( parts[0] + parts[1], context );
+
+		} else {
+			set = Expr.relative[ parts[0] ] ?
+				[ context ] :
+				Sizzle( parts.shift(), context );
+
+			while ( parts.length ) {
+				selector = parts.shift();
+
+				if ( Expr.relative[ selector ] ) {
+					selector += parts.shift();
+				}
+				
+				set = posProcess( selector, set );
+			}
+		}
+
+	} else {
+		// Take a shortcut and set the context if the root selector is an ID
+		// (but not if it'll be faster if the inner selector is an ID)
+		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+
+			ret = Sizzle.find( parts.shift(), context, contextXML );
+			context = ret.expr ?
+				Sizzle.filter( ret.expr, ret.set )[0] :
+				ret.set[0];
+		}
+
+		if ( context ) {
+			ret = seed ?
+				{ expr: parts.pop(), set: makeArray(seed) } :
+				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+
+			set = ret.expr ?
+				Sizzle.filter( ret.expr, ret.set ) :
+				ret.set;
+
+			if ( parts.length > 0 ) {
+				checkSet = makeArray( set );
+
+			} else {
+				prune = false;
+			}
+
+			while ( parts.length ) {
+				cur = parts.pop();
+				pop = cur;
+
+				if ( !Expr.relative[ cur ] ) {
+					cur = "";
+				} else {
+					pop = parts.pop();
+				}
+
+				if ( pop == null ) {
+					pop = context;
+				}
+
+				Expr.relative[ cur ]( checkSet, pop, contextXML );
+			}
+
+		} else {
+			checkSet = parts = [];
+		}
+	}
+
+	if ( !checkSet ) {
+		checkSet = set;
+	}
+
+	if ( !checkSet ) {
+		Sizzle.error( cur || selector );
+	}
+
+	if ( toString.call(checkSet) === "[object Array]" ) {
+		if ( !prune ) {
+			results.push.apply( results, checkSet );
+
+		} else if ( context && context.nodeType === 1 ) {
+			for ( i = 0; checkSet[i] != null; i++ ) {
+				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
+					results.push( set[i] );
+				}
+			}
+
+		} else {
+			for ( i = 0; checkSet[i] != null; i++ ) {
+				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+					results.push( set[i] );
+				}
+			}
+		}
+
+	} else {
+		makeArray( checkSet, results );
+	}
+
+	if ( extra ) {
+		Sizzle( extra, origContext, results, seed );
+		Sizzle.uniqueSort( results );
+	}
+
+	return results;
+};
+
+Sizzle.uniqueSort = function( results ) {
+	if ( sortOrder ) {
+		hasDuplicate = baseHasDuplicate;
+		results.sort( sortOrder );
+
+		if ( hasDuplicate ) {
+			for ( var i = 1; i < results.length; i++ ) {
+				if ( results[i] === results[ i - 1 ] ) {
+					results.splice( i--, 1 );
+				}
+			}
+		}
+	}
+
+	return results;
+};
+
+Sizzle.matches = function( expr, set ) {
+	return Sizzle( expr, null, null, set );
+};
+
+Sizzle.matchesSelector = function( node, expr ) {
+	return Sizzle( expr, null, null, [node] ).length > 0;
+};
+
+Sizzle.find = function( expr, context, isXML ) {
+	var set;
+
+	if ( !expr ) {
+		return [];
+	}
+
+	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
+		var match,
+			type = Expr.order[i];
+		
+		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+			var left = match[1];
+			match.splice( 1, 1 );
+
+			if ( left.substr( left.length - 1 ) !== "\\" ) {
+				match[1] = (match[1] || "").replace( rBackslash, "" );
+				set = Expr.find[ type ]( match, context, isXML );
+
+				if ( set != null ) {
+					expr = expr.replace( Expr.match[ type ], "" );
+					break;
+				}
+			}
+		}
+	}
+
+	if ( !set ) {
+		set = typeof context.getElementsByTagName !== "undefined" ?
+			context.getElementsByTagName( "*" ) :
+			[];
+	}
+
+	return { set: set, expr: expr };
+};
+
+Sizzle.filter = function( expr, set, inplace, not ) {
+	var match, anyFound,
+		old = expr,
+		result = [],
+		curLoop = set,
+		isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
+
+	while ( expr && set.length ) {
+		for ( var type in Expr.filter ) {
+			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+				var found, item,
+					filter = Expr.filter[ type ],
+					left = match[1];
+
+				anyFound = false;
+
+				match.splice(1,1);
+
+				if ( left.substr( left.length - 1 ) === "\\" ) {
+					continue;
+				}
+
+				if ( curLoop === result ) {
+					result = [];
+				}
+
+				if ( Expr.preFilter[ type ] ) {
+					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+					if ( !match ) {
+						anyFound = found = true;
+
+					} else if ( match === true ) {
+						continue;
+					}
+				}
+
+				if ( match ) {
+					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
+						if ( item ) {
+							found = filter( item, match, i, curLoop );
+							var pass = not ^ !!found;
+
+							if ( inplace && found != null ) {
+								if ( pass ) {
+									anyFound = true;
+
+								} else {
+									curLoop[i] = false;
+								}
+
+							} else if ( pass ) {
+								result.push( item );
+								anyFound = true;
+							}
+						}
+					}
+				}
+
+				if ( found !== undefined ) {
+					if ( !inplace ) {
+						curLoop = result;
+					}
+
+					expr = expr.replace( Expr.match[ type ], "" );
+
+					if ( !anyFound ) {
+						return [];
+					}
+
+					break;
+				}
+			}
+		}
+
+		// Improper expression
+		if ( expr === old ) {
+			if ( anyFound == null ) {
+				Sizzle.error( expr );
+
+			} else {
+				break;
+			}
+		}
+
+		old = expr;
+	}
+
+	return curLoop;
+};
+
+Sizzle.error = function( msg ) {
+	throw "Syntax error, unrecognized expression: " + msg;
+};
+
+var Expr = Sizzle.selectors = {
+	order: [ "ID", "NAME", "TAG" ],
+
+	match: {
+		ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+		CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
+		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
+		TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+		CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
+		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
+		PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+	},
+
+	leftMatch: {},
+
+	attrMap: {
+		"class": "className",
+		"for": "htmlFor"
+	},
+
+	attrHandle: {
+		href: function( elem ) {
+			return elem.getAttribute( "href" );
+		},
+		type: function( elem ) {
+			return elem.getAttribute( "type" );
+		}
+	},
+
+	relative: {
+		"+": function(checkSet, part){
+			var isPartStr = typeof part === "string",
+				isTag = isPartStr && !rNonWord.test( part ),
+				isPartStrNotTag = isPartStr && !isTag;
+
+			if ( isTag ) {
+				part = part.toLowerCase();
+			}
+
+			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+				if ( (elem = checkSet[i]) ) {
+					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+						elem || false :
+						elem === part;
+				}
+			}
+
+			if ( isPartStrNotTag ) {
+				Sizzle.filter( part, checkSet, true );
+			}
+		},
+
+		">": function( checkSet, part ) {
+			var elem,
+				isPartStr = typeof part === "string",
+				i = 0,
+				l = checkSet.length;
+
+			if ( isPartStr && !rNonWord.test( part ) ) {
+				part = part.toLowerCase();
+
+				for ( ; i < l; i++ ) {
+					elem = checkSet[i];
+
+					if ( elem ) {
+						var parent = elem.parentNode;
+						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+					}
+				}
+
+			} else {
+				for ( ; i < l; i++ ) {
+					elem = checkSet[i];
+
+					if ( elem ) {
+						checkSet[i] = isPartStr ?
+							elem.parentNode :
+							elem.parentNode === part;
+					}
+				}
+
+				if ( isPartStr ) {
+					Sizzle.filter( part, checkSet, true );
+				}
+			}
+		},
+
+		"": function(checkSet, part, isXML){
+			var nodeCheck,
+				doneName = done++,
+				checkFn = dirCheck;
+
+			if ( typeof part === "string" && !rNonWord.test( part ) ) {
+				part = part.toLowerCase();
+				nodeCheck = part;
+				checkFn = dirNodeCheck;
+			}
+
+			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
+		},
+
+		"~": function( checkSet, part, isXML ) {
+			var nodeCheck,
+				doneName = done++,
+				checkFn = dirCheck;
+
+			if ( typeof part === "string" && !rNonWord.test( part ) ) {
+				part = part.toLowerCase();
+				nodeCheck = part;
+				checkFn = dirNodeCheck;
+			}
+
+			checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
+		}
+	},
+
+	find: {
+		ID: function( match, context, isXML ) {
+			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+				var m = context.getElementById(match[1]);
+				// Check parentNode to catch when Blackberry 4.6 returns
+				// nodes that are no longer in the document #6963
+				return m && m.parentNode ? [m] : [];
+			}
+		},
+
+		NAME: function( match, context ) {
+			if ( typeof context.getElementsByName !== "undefined" ) {
+				var ret = [],
+					results = context.getElementsByName( match[1] );
+
+				for ( var i = 0, l = results.length; i < l; i++ ) {
+					if ( results[i].getAttribute("name") === match[1] ) {
+						ret.push( results[i] );
+					}
+				}
+
+				return ret.length === 0 ? null : ret;
+			}
+		},
+
+		TAG: function( match, context ) {
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
+				return context.getElementsByTagName( match[1] );
+			}
+		}
+	},
+	preFilter: {
+		CLASS: function( match, curLoop, inplace, result, not, isXML ) {
+			match = " " + match[1].replace( rBackslash, "" ) + " ";
+
+			if ( isXML ) {
+				return match;
+			}
+
+			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+				if ( elem ) {
+					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
+						if ( !inplace ) {
+							result.push( elem );
+						}
+
+					} else if ( inplace ) {
+						curLoop[i] = false;
+					}
+				}
+			}
+
+			return false;
+		},
+
+		ID: function( match ) {
+			return match[1].replace( rBackslash, "" );
+		},
+
+		TAG: function( match, curLoop ) {
+			return match[1].replace( rBackslash, "" ).toLowerCase();
+		},
+
+		CHILD: function( match ) {
+			if ( match[1] === "nth" ) {
+				if ( !match[2] ) {
+					Sizzle.error( match[0] );
+				}
+
+				match[2] = match[2].replace(/^\+|\s*/g, '');
+
+				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+				var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
+					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+				// calculate the numbers (first)n+(last) including if they are negative
+				match[2] = (test[1] + (test[2] || 1)) - 0;
+				match[3] = test[3] - 0;
+			}
+			else if ( match[2] ) {
+				Sizzle.error( match[0] );
+			}
+
+			// TODO: Move to normal caching system
+			match[0] = done++;
+
+			return match;
+		},
+
+		ATTR: function( match, curLoop, inplace, result, not, isXML ) {
+			var name = match[1] = match[1].replace( rBackslash, "" );
+			
+			if ( !isXML && Expr.attrMap[name] ) {
+				match[1] = Expr.attrMap[name];
+			}
+
+			// Handle if an un-quoted value was used
+			match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
+
+			if ( match[2] === "~=" ) {
+				match[4] = " " + match[4] + " ";
+			}
+
+			return match;
+		},
+
+		PSEUDO: function( match, curLoop, inplace, result, not ) {
+			if ( match[1] === "not" ) {
+				// If we're dealing with a complex expression, or a simple one
+				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+					match[3] = Sizzle(match[3], null, null, curLoop);
+
+				} else {
+					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+
+					if ( !inplace ) {
+						result.push.apply( result, ret );
+					}
+
+					return false;
+				}
+
+			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+				return true;
+			}
+			
+			return match;
+		},
+
+		POS: function( match ) {
+			match.unshift( true );
+
+			return match;
+		}
+	},
+	
+	filters: {
+		enabled: function( elem ) {
+			return elem.disabled === false && elem.type !== "hidden";
+		},
+
+		disabled: function( elem ) {
+			return elem.disabled === true;
+		},
+
+		checked: function( elem ) {
+			return elem.checked === true;
+		},
+		
+		selected: function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+			
+			return elem.selected === true;
+		},
+
+		parent: function( elem ) {
+			return !!elem.firstChild;
+		},
+
+		empty: function( elem ) {
+			return !elem.firstChild;
+		},
+
+		has: function( elem, i, match ) {
+			return !!Sizzle( match[3], elem ).length;
+		},
+
+		header: function( elem ) {
+			return (/h\d/i).test( elem.nodeName );
+		},
+
+		text: function( elem ) {
+			var attr = elem.getAttribute( "type" ), type = elem.type;
+			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 
+			// use getAttribute instead to test this case
+			return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
+		},
+
+		radio: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
+		},
+
+		checkbox: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
+		},
+
+		file: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
+		},
+
+		password: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
+		},
+
+		submit: function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return (name === "input" || name === "button") && "submit" === elem.type;
+		},
+
+		image: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
+		},
+
+		reset: function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return (name === "input" || name === "button") && "reset" === elem.type;
+		},
+
+		button: function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && "button" === elem.type || name === "button";
+		},
+
+		input: function( elem ) {
+			return (/input|select|textarea|button/i).test( elem.nodeName );
+		},
+
+		focus: function( elem ) {
+			return elem === elem.ownerDocument.activeElement;
+		}
+	},
+	setFilters: {
+		first: function( elem, i ) {
+			return i === 0;
+		},
+
+		last: function( elem, i, match, array ) {
+			return i === array.length - 1;
+		},
+
+		even: function( elem, i ) {
+			return i % 2 === 0;
+		},
+
+		odd: function( elem, i ) {
+			return i % 2 === 1;
+		},
+
+		lt: function( elem, i, match ) {
+			return i < match[3] - 0;
+		},
+
+		gt: function( elem, i, match ) {
+			return i > match[3] - 0;
+		},
+
+		nth: function( elem, i, match ) {
+			return match[3] - 0 === i;
+		},
+
+		eq: function( elem, i, match ) {
+			return match[3] - 0 === i;
+		}
+	},
+	filter: {
+		PSEUDO: function( elem, match, i, array ) {
+			var name = match[1],
+				filter = Expr.filters[ name ];
+
+			if ( filter ) {
+				return filter( elem, i, match, array );
+
+			} else if ( name === "contains" ) {
+				return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
+
+			} else if ( name === "not" ) {
+				var not = match[3];
+
+				for ( var j = 0, l = not.length; j < l; j++ ) {
+					if ( not[j] === elem ) {
+						return false;
+					}
+				}
+
+				return true;
+
+			} else {
+				Sizzle.error( name );
+			}
+		},
+
+		CHILD: function( elem, match ) {
+			var type = match[1],
+				node = elem;
+
+			switch ( type ) {
+				case "only":
+				case "first":
+					while ( (node = node.previousSibling) )	 {
+						if ( node.nodeType === 1 ) { 
+							return false; 
+						}
+					}
+
+					if ( type === "first" ) { 
+						return true; 
+					}
+
+					node = elem;
+
+				case "last":
+					while ( (node = node.nextSibling) )	 {
+						if ( node.nodeType === 1 ) { 
+							return false; 
+						}
+					}
+
+					return true;
+
+				case "nth":
+					var first = match[2],
+						last = match[3];
+
+					if ( first === 1 && last === 0 ) {
+						return true;
+					}
+					
+					var doneName = match[0],
+						parent = elem.parentNode;
+	
+					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
+						var count = 0;
+						
+						for ( node = parent.firstChild; node; node = node.nextSibling ) {
+							if ( node.nodeType === 1 ) {
+								node.nodeIndex = ++count;
+							}
+						} 
+
+						parent.sizcache = doneName;
+					}
+					
+					var diff = elem.nodeIndex - last;
+
+					if ( first === 0 ) {
+						return diff === 0;
+
+					} else {
+						return ( diff % first === 0 && diff / first >= 0 );
+					}
+			}
+		},
+
+		ID: function( elem, match ) {
+			return elem.nodeType === 1 && elem.getAttribute("id") === match;
+		},
+
+		TAG: function( elem, match ) {
+			return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
+		},
+		
+		CLASS: function( elem, match ) {
+			return (" " + (elem.className || elem.getAttribute("class")) + " ")
+				.indexOf( match ) > -1;
+		},
+
+		ATTR: function( elem, match ) {
+			var name = match[1],
+				result = Expr.attrHandle[ name ] ?
+					Expr.attrHandle[ name ]( elem ) :
+					elem[ name ] != null ?
+						elem[ name ] :
+						elem.getAttribute( name ),
+				value = result + "",
+				type = match[2],
+				check = match[4];
+
+			return result == null ?
+				type === "!=" :
+				type === "=" ?
+				value === check :
+				type === "*=" ?
+				value.indexOf(check) >= 0 :
+				type === "~=" ?
+				(" " + value + " ").indexOf(check) >= 0 :
+				!check ?
+				value && result !== false :
+				type === "!=" ?
+				value !== check :
+				type === "^=" ?
+				value.indexOf(check) === 0 :
+				type === "$=" ?
+				value.substr(value.length - check.length) === check :
+				type === "|=" ?
+				value === check || value.substr(0, check.length + 1) === check + "-" :
+				false;
+		},
+
+		POS: function( elem, match, i, array ) {
+			var name = match[2],
+				filter = Expr.setFilters[ name ];
+
+			if ( filter ) {
+				return filter( elem, i, match, array );
+			}
+		}
+	}
+};
+
+var origPOS = Expr.match.POS,
+	fescape = function(all, num){
+		return "\\" + (num - 0 + 1);
+	};
+
+for ( var type in Expr.match ) {
+	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
+	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
+}
+
+var makeArray = function( array, results ) {
+	array = Array.prototype.slice.call( array, 0 );
+
+	if ( results ) {
+		results.push.apply( results, array );
+		return results;
+	}
+	
+	return array;
+};
+
+// Perform a simple check to determine if the browser is capable of
+// converting a NodeList to an array using builtin methods.
+// Also verifies that the returned array holds DOM nodes
+// (which is not the case in the Blackberry browser)
+try {
+	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+
+// Provide a fallback method if it does not work
+} catch( e ) {
+	makeArray = function( array, results ) {
+		var i = 0,
+			ret = results || [];
+
+		if ( toString.call(array) === "[object Array]" ) {
+			Array.prototype.push.apply( ret, array );
+
+		} else {
+			if ( typeof array.length === "number" ) {
+				for ( var l = array.length; i < l; i++ ) {
+					ret.push( array[i] );
+				}
+
+			} else {
+				for ( ; array[i]; i++ ) {
+					ret.push( array[i] );
+				}
+			}
+		}
+
+		return ret;
+	};
+}
+
+var sortOrder, siblingCheck;
+
+if ( document.documentElement.compareDocumentPosition ) {
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+			return a.compareDocumentPosition ? -1 : 1;
+		}
+
+		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
+	};
+
+} else {
+	sortOrder = function( a, b ) {
+		// The nodes are identical, we can exit early
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+
+		// Fallback to using sourceIndex (in IE) if it's available on both nodes
+		} else if ( a.sourceIndex && b.sourceIndex ) {
+			return a.sourceIndex - b.sourceIndex;
+		}
+
+		var al, bl,
+			ap = [],
+			bp = [],
+			aup = a.parentNode,
+			bup = b.parentNode,
+			cur = aup;
+
+		// If the nodes are siblings (or identical) we can do a quick check
+		if ( aup === bup ) {
+			return siblingCheck( a, b );
+
+		// If no parents were found then the nodes are disconnected
+		} else if ( !aup ) {
+			return -1;
+
+		} else if ( !bup ) {
+			return 1;
+		}
+
+		// Otherwise they're somewhere else in the tree so we need
+		// to build up a full list of the parentNodes for comparison
+		while ( cur ) {
+			ap.unshift( cur );
+			cur = cur.parentNode;
+		}
+
+		cur = bup;
+
+		while ( cur ) {
+			bp.unshift( cur );
+			cur = cur.parentNode;
+		}
+
+		al = ap.length;
+		bl = bp.length;
+
+		// Start walking down the tree looking for a discrepancy
+		for ( var i = 0; i < al && i < bl; i++ ) {
+			if ( ap[i] !== bp[i] ) {
+				return siblingCheck( ap[i], bp[i] );
+			}
+		}
+
+		// We ended someplace up the tree so do a sibling check
+		return i === al ?
+			siblingCheck( a, bp[i], -1 ) :
+			siblingCheck( ap[i], b, 1 );
+	};
+
+	siblingCheck = function( a, b, ret ) {
+		if ( a === b ) {
+			return ret;
+		}
+
+		var cur = a.nextSibling;
+
+		while ( cur ) {
+			if ( cur === b ) {
+				return -1;
+			}
+
+			cur = cur.nextSibling;
+		}
+
+		return 1;
+	};
+}
+
+// Utility function for retreiving the text value of an array of DOM nodes
+Sizzle.getText = function( elems ) {
+	var ret = "", elem;
+
+	for ( var i = 0; elems[i]; i++ ) {
+		elem = elems[i];
+
+		// Get the text from text nodes and CDATA nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
+			ret += elem.nodeValue;
+
+		// Traverse everything else, except comment nodes
+		} else if ( elem.nodeType !== 8 ) {
+			ret += Sizzle.getText( elem.childNodes );
+		}
+	}
+
+	return ret;
+};
+
+// Check to see if the browser returns elements by name when
+// querying by getElementById (and provide a workaround)
+(function(){
+	// We're going to inject a fake input element with a specified name
+	var form = document.createElement("div"),
+		id = "script" + (new Date()).getTime(),
+		root = document.documentElement;
+
+	form.innerHTML = "<a name='" + id + "'/>";
+
+	// Inject it into the root element, check its status, and remove it quickly
+	root.insertBefore( form, root.firstChild );
+
+	// The workaround has to do additional checks after a getElementById
+	// Which slows things down for other browsers (hence the branching)
+	if ( document.getElementById( id ) ) {
+		Expr.find.ID = function( match, context, isXML ) {
+			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+				var m = context.getElementById(match[1]);
+
+				return m ?
+					m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
+						[m] :
+						undefined :
+					[];
+			}
+		};
+
+		Expr.filter.ID = function( elem, match ) {
+			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+
+			return elem.nodeType === 1 && node && node.nodeValue === match;
+		};
+	}
+
+	root.removeChild( form );
+
+	// release memory in IE
+	root = form = null;
+})();
+
+(function(){
+	// Check to see if the browser returns only elements
+	// when doing getElementsByTagName("*")
+
+	// Create a fake element
+	var div = document.createElement("div");
+	div.appendChild( document.createComment("") );
+
+	// Make sure no comments are found
+	if ( div.getElementsByTagName("*").length > 0 ) {
+		Expr.find.TAG = function( match, context ) {
+			var results = context.getElementsByTagName( match[1] );
+
+			// Filter out possible comments
+			if ( match[1] === "*" ) {
+				var tmp = [];
+
+				for ( var i = 0; results[i]; i++ ) {
+					if ( results[i].nodeType === 1 ) {
+						tmp.push( results[i] );
+					}
+				}
+
+				results = tmp;
+			}
+
+			return results;
+		};
+	}
+
+	// Check to see if an attribute returns normalized href attributes
+	div.innerHTML = "<a href='#'></a>";
+
+	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+			div.firstChild.getAttribute("href") !== "#" ) {
+
+		Expr.attrHandle.href = function( elem ) {
+			return elem.getAttribute( "href", 2 );
+		};
+	}
+
+	// release memory in IE
+	div = null;
+})();
+
+if ( document.querySelectorAll ) {
+	(function(){
+		var oldSizzle = Sizzle,
+			div = document.createElement("div"),
+			id = "__sizzle__";
+
+		div.innerHTML = "<p class='TEST'></p>";
+
+		// Safari can't handle uppercase or unicode characters when
+		// in quirks mode.
+		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+			return;
+		}
+	
+		Sizzle = function( query, context, extra, seed ) {
+			context = context || document;
+
+			// Only use querySelectorAll on non-XML documents
+			// (ID selectors don't work in non-HTML documents)
+			if ( !seed && !Sizzle.isXML(context) ) {
+				// See if we find a selector to speed up
+				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
+				
+				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
+					// Speed-up: Sizzle("TAG")
+					if ( match[1] ) {
+						return makeArray( context.getElementsByTagName( query ), extra );
+					
+					// Speed-up: Sizzle(".CLASS")
+					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
+						return makeArray( context.getElementsByClassName( match[2] ), extra );
+					}
+				}
+				
+				if ( context.nodeType === 9 ) {
+					// Speed-up: Sizzle("body")
+					// The body element only exists once, optimize finding it
+					if ( query === "body" && context.body ) {
+						return makeArray( [ context.body ], extra );
+						
+					// Speed-up: Sizzle("#ID")
+					} else if ( match && match[3] ) {
+						var elem = context.getElementById( match[3] );
+
+						// Check parentNode to catch when Blackberry 4.6 returns
+						// nodes that are no longer in the document #6963
+						if ( elem && elem.parentNode ) {
+							// Handle the case where IE and Opera return items
+							// by name instead of ID
+							if ( elem.id === match[3] ) {
+								return makeArray( [ elem ], extra );
+							}
+							
+						} else {
+							return makeArray( [], extra );
+						}
+					}
+					
+					try {
+						return makeArray( context.querySelectorAll(query), extra );
+					} catch(qsaError) {}
+
+				// qSA works strangely on Element-rooted queries
+				// We can work around this by specifying an extra ID on the root
+				// and working up from there (Thanks to Andrew Dupont for the technique)
+				// IE 8 doesn't work on object elements
+				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+					var oldContext = context,
+						old = context.getAttribute( "id" ),
+						nid = old || id,
+						hasParent = context.parentNode,
+						relativeHierarchySelector = /^\s*[+~]/.test( query );
+
+					if ( !old ) {
+						context.setAttribute( "id", nid );
+					} else {
+						nid = nid.replace( /'/g, "\\$&" );
+					}
+					if ( relativeHierarchySelector && hasParent ) {
+						context = context.parentNode;
+					}
+
+					try {
+						if ( !relativeHierarchySelector || hasParent ) {
+							return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
+						}
+
+					} catch(pseudoError) {
+					} finally {
+						if ( !old ) {
+							oldContext.removeAttribute( "id" );
+						}
+					}
+				}
+			}
+		
+			return oldSizzle(query, context, extra, seed);
+		};
+
+		for ( var prop in oldSizzle ) {
+			Sizzle[ prop ] = oldSizzle[ prop ];
+		}
+
+		// release memory in IE
+		div = null;
+	})();
+}
+
+(function(){
+	var html = document.documentElement,
+		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
+
+	if ( matches ) {
+		// Check to see if it's possible to do matchesSelector
+		// on a disconnected node (IE 9 fails this)
+		var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
+			pseudoWorks = false;
+
+		try {
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( document.documentElement, "[test!='']:sizzle" );
+	
+		} catch( pseudoError ) {
+			pseudoWorks = true;
+		}
+
+		Sizzle.matchesSelector = function( node, expr ) {
+			// Make sure that attribute selectors are quoted
+			expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+
+			if ( !Sizzle.isXML( node ) ) {
+				try { 
+					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
+						var ret = matches.call( node, expr );
+
+						// IE 9's matchesSelector returns false on disconnected nodes
+						if ( ret || !disconnectedMatch ||
+								// As well, disconnected nodes are said to be in a document
+								// fragment in IE 9, so check for that
+								node.document && node.document.nodeType !== 11 ) {
+							return ret;
+						}
+					}
+				} catch(e) {}
+			}
+
+			return Sizzle(expr, null, null, [node]).length > 0;
+		};
+	}
+})();
+
+(function(){
+	var div = document.createElement("div");
+
+	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+
+	// Opera can't find a second classname (in 9.6)
+	// Also, make sure that getElementsByClassName actually exists
+	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+		return;
+	}
+
+	// Safari caches class attributes, doesn't catch changes (in 3.2)
+	div.lastChild.className = "e";
+
+	if ( div.getElementsByClassName("e").length === 1 ) {
+		return;
+	}
+	
+	Expr.order.splice(1, 0, "CLASS");
+	Expr.find.CLASS = function( match, context, isXML ) {
+		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+			return context.getElementsByClassName(match[1]);
+		}
+	};
+
+	// release memory in IE
+	div = null;
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+		var elem = checkSet[i];
+
+		if ( elem ) {
+			var match = false;
+
+			elem = elem[dir];
+
+			while ( elem ) {
+				if ( elem.sizcache === doneName ) {
+					match = checkSet[elem.sizset];
+					break;
+				}
+
+				if ( elem.nodeType === 1 && !isXML ){
+					elem.sizcache = doneName;
+					elem.sizset = i;
+				}
+
+				if ( elem.nodeName.toLowerCase() === cur ) {
+					match = elem;
+					break;
+				}
+
+				elem = elem[dir];
+			}
+
+			checkSet[i] = match;
+		}
+	}
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+		var elem = checkSet[i];
+
+		if ( elem ) {
+			var match = false;
+			
+			elem = elem[dir];
+
+			while ( elem ) {
+				if ( elem.sizcache === doneName ) {
+					match = checkSet[elem.sizset];
+					break;
+				}
+
+				if ( elem.nodeType === 1 ) {
+					if ( !isXML ) {
+						elem.sizcache = doneName;
+						elem.sizset = i;
+					}
+
+					if ( typeof cur !== "string" ) {
+						if ( elem === cur ) {
+							match = true;
+							break;
+						}
+
+					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+						match = elem;
+						break;
+					}
+				}
+
+				elem = elem[dir];
+			}
+
+			checkSet[i] = match;
+		}
+	}
+}
+
+if ( document.documentElement.contains ) {
+	Sizzle.contains = function( a, b ) {
+		return a !== b && (a.contains ? a.contains(b) : true);
+	};
+
+} else if ( document.documentElement.compareDocumentPosition ) {
+	Sizzle.contains = function( a, b ) {
+		return !!(a.compareDocumentPosition(b) & 16);
+	};
+
+} else {
+	Sizzle.contains = function() {
+		return false;
+	};
+}
+
+Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833) 
+	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+var posProcess = function( selector, context ) {
+	var match,
+		tmpSet = [],
+		later = "",
+		root = context.nodeType ? [context] : context;
+
+	// Position selectors must be done after the filter
+	// And so must :not(positional) so we move all PSEUDOs to the end
+	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+		later += match[0];
+		selector = selector.replace( Expr.match.PSEUDO, "" );
+	}
+
+	selector = Expr.relative[selector] ? selector + "*" : selector;
+
+	for ( var i = 0, l = root.length; i < l; i++ ) {
+		Sizzle( selector, root[i], tmpSet );
+	}
+
+	return Sizzle.filter( later, tmpSet );
+};
+
+// EXPOSE
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.filters;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})();
+
+
+var runtil = /Until$/,
+	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+	// Note: This RegExp should be improved, or likely pulled from Sizzle
+	rmultiselector = /,/,
+	isSimple = /^.[^:#\[\.,]*$/,
+	slice = Array.prototype.slice,
+	POS = jQuery.expr.match.POS,
+	// methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend({
+	find: function( selector ) {
+		var self = this,
+			i, l;
+
+		if ( typeof selector !== "string" ) {
+			return jQuery( selector ).filter(function() {
+				for ( i = 0, l = self.length; i < l; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			});
+		}
+
+		var ret = this.pushStack( "", "find", selector ),
+			length, n, r;
+
+		for ( i = 0, l = this.length; i < l; i++ ) {
+			length = ret.length;
+			jQuery.find( selector, this[i], ret );
+
+			if ( i > 0 ) {
+				// Make sure that the results are unique
+				for ( n = length; n < ret.length; n++ ) {
+					for ( r = 0; r < length; r++ ) {
+						if ( ret[r] === ret[n] ) {
+							ret.splice(n--, 1);
+							break;
+						}
+					}
+				}
+			}
+		}
+
+		return ret;
+	},
+
+	has: function( target ) {
+		var targets = jQuery( target );
+		return this.filter(function() {
+			for ( var i = 0, l = targets.length; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[i] ) ) {
+					return true;
+				}
+			}
+		});
+	},
+
+	not: function( selector ) {
+		return this.pushStack( winnow(this, selector, false), "not", selector);
+	},
+
+	filter: function( selector ) {
+		return this.pushStack( winnow(this, selector, true), "filter", selector );
+	},
+
+	is: function( selector ) {
+		return !!selector && ( typeof selector === "string" ?
+			jQuery.filter( selector, this ).length > 0 :
+			this.filter( selector ).length > 0 );
+	},
+
+	closest: function( selectors, context ) {
+		var ret = [], i, l, cur = this[0];
+		
+		// Array
+		if ( jQuery.isArray( selectors ) ) {
+			var match, selector,
+				matches = {},
+				level = 1;
+
+			if ( cur && selectors.length ) {
+				for ( i = 0, l = selectors.length; i < l; i++ ) {
+					selector = selectors[i];
+
+					if ( !matches[ selector ] ) {
+						matches[ selector ] = POS.test( selector ) ?
+							jQuery( selector, context || this.context ) :
+							selector;
+					}
+				}
+
+				while ( cur && cur.ownerDocument && cur !== context ) {
+					for ( selector in matches ) {
+						match = matches[ selector ];
+
+						if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) {
+							ret.push({ selector: selector, elem: cur, level: level });
+						}
+					}
+
+					cur = cur.parentNode;
+					level++;
+				}
+			}
+
+			return ret;
+		}
+
+		// String
+		var pos = POS.test( selectors ) || typeof selectors !== "string" ?
+				jQuery( selectors, context || this.context ) :
+				0;
+
+		for ( i = 0, l = this.length; i < l; i++ ) {
+			cur = this[i];
+
+			while ( cur ) {
+				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+					ret.push( cur );
+					break;
+
+				} else {
+					cur = cur.parentNode;
+					if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
+						break;
+					}
+				}
+			}
+		}
+
+		ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
+
+		return this.pushStack( ret, "closest", selectors );
+	},
+
+	// Determine the position of an element within
+	// the matched set of elements
+	index: function( elem ) {
+		if ( !elem || typeof elem === "string" ) {
+			return jQuery.inArray( this[0],
+				// If it receives a string, the selector is used
+				// If it receives nothing, the siblings are used
+				elem ? jQuery( elem ) : this.parent().children() );
+		}
+		// Locate the position of the desired element
+		return jQuery.inArray(
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[0] : elem, this );
+	},
+
+	add: function( selector, context ) {
+		var set = typeof selector === "string" ?
+				jQuery( selector, context ) :
+				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+			all = jQuery.merge( this.get(), set );
+
+		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+			all :
+			jQuery.unique( all ) );
+	},
+
+	andSelf: function() {
+		return this.add( this.prevObject );
+	}
+});
+
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+	return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+jQuery.each({
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return jQuery.dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return jQuery.nth( elem, 2, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return jQuery.nth( elem, 2, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return jQuery.dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return jQuery.dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return jQuery.sibling( elem.parentNode.firstChild, elem );
+	},
+	children: function( elem ) {
+		return jQuery.sibling( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return jQuery.nodeName( elem, "iframe" ) ?
+			elem.contentDocument || elem.contentWindow.document :
+			jQuery.makeArray( elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var ret = jQuery.map( this, fn, until ),
+			// The variable 'args' was introduced in
+			// https://github.com/jquery/jquery/commit/52a0238
+			// to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
+			// http://code.google.com/p/v8/issues/detail?id=1050
+			args = slice.call(arguments);
+
+		if ( !runtil.test( name ) ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			ret = jQuery.filter( selector, ret );
+		}
+
+		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+			ret = ret.reverse();
+		}
+
+		return this.pushStack( ret, name, args.join(",") );
+	};
+});
+
+jQuery.extend({
+	filter: function( expr, elems, not ) {
+		if ( not ) {
+			expr = ":not(" + expr + ")";
+		}
+
+		return elems.length === 1 ?
+			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+			jQuery.find.matches(expr, elems);
+	},
+
+	dir: function( elem, dir, until ) {
+		var matched = [],
+			cur = elem[ dir ];
+
+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+			if ( cur.nodeType === 1 ) {
+				matched.push( cur );
+			}
+			cur = cur[dir];
+		}
+		return matched;
+	},
+
+	nth: function( cur, result, dir, elem ) {
+		result = result || 1;
+		var num = 0;
+
+		for ( ; cur; cur = cur[dir] ) {
+			if ( cur.nodeType === 1 && ++num === result ) {
+				break;
+			}
+		}
+
+		return cur;
+	},
+
+	sibling: function( n, elem ) {
+		var r = [];
+
+		for ( ; n; n = n.nextSibling ) {
+			if ( n.nodeType === 1 && n !== elem ) {
+				r.push( n );
+			}
+		}
+
+		return r;
+	}
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+	// Can't pass null or undefined to indexOf in Firefox 4
+	// Set to 0 to skip string check
+	qualifier = qualifier || 0;
+
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			var retVal = !!qualifier.call( elem, i, elem );
+			return retVal === keep;
+		});
+
+	} else if ( qualifier.nodeType ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			return (elem === qualifier) === keep;
+		});
+
+	} else if ( typeof qualifier === "string" ) {
+		var filtered = jQuery.grep(elements, function( elem ) {
+			return elem.nodeType === 1;
+		});
+
+		if ( isSimple.test( qualifier ) ) {
+			return jQuery.filter(qualifier, filtered, !keep);
+		} else {
+			qualifier = jQuery.filter( qualifier, filtered );
+		}
+	}
+
+	return jQuery.grep(elements, function( elem, i ) {
+		return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
+	});
+}
+
+
+
+
+var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+	rleadingWhitespace = /^\s+/,
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+	rtagName = /<([\w:]+)/,
+	rtbody = /<tbody/i,
+	rhtml = /<|&#?\w+;/,
+	rnocache = /<(?:script|object|embed|option|style)/i,
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptType = /\/(java|ecma)script/i,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
+	wrapMap = {
+		option: [ 1, "<select multiple='multiple'>", "</select>" ],
+		legend: [ 1, "<fieldset>", "</fieldset>" ],
+		thead: [ 1, "<table>", "</table>" ],
+		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+		area: [ 1, "<map>", "</map>" ],
+		_default: [ 0, "", "" ]
+	};
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// IE can't serialize <link> and <script> tags normally
+if ( !jQuery.support.htmlSerialize ) {
+	wrapMap._default = [ 1, "div<div>", "</div>" ];
+}
+
+jQuery.fn.extend({
+	text: function( text ) {
+		if ( jQuery.isFunction(text) ) {
+			return this.each(function(i) {
+				var self = jQuery( this );
+
+				self.text( text.call(this, i, self.text()) );
+			});
+		}
+
+		if ( typeof text !== "object" && text !== undefined ) {
+			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+		}
+
+		return jQuery.text( this );
+	},
+
+	wrapAll: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapAll( html.call(this, i) );
+			});
+		}
+
+		if ( this[0] ) {
+			// The elements to wrap the target around
+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+			if ( this[0].parentNode ) {
+				wrap.insertBefore( this[0] );
+			}
+
+			wrap.map(function() {
+				var elem = this;
+
+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+					elem = elem.firstChild;
+				}
+
+				return elem;
+			}).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapInner( html.call(this, i) );
+			});
+		}
+
+		return this.each(function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		});
+	},
+
+	wrap: function( html ) {
+		return this.each(function() {
+			jQuery( this ).wrapAll( html );
+		});
+	},
+
+	unwrap: function() {
+		return this.parent().each(function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		}).end();
+	},
+
+	append: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 ) {
+				this.appendChild( elem );
+			}
+		});
+	},
+
+	prepend: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 ) {
+				this.insertBefore( elem, this.firstChild );
+			}
+		});
+	},
+
+	before: function() {
+		if ( this[0] && this[0].parentNode ) {
+			return this.domManip(arguments, false, function( elem ) {
+				this.parentNode.insertBefore( elem, this );
+			});
+		} else if ( arguments.length ) {
+			var set = jQuery(arguments[0]);
+			set.push.apply( set, this.toArray() );
+			return this.pushStack( set, "before", arguments );
+		}
+	},
+
+	after: function() {
+		if ( this[0] && this[0].parentNode ) {
+			return this.domManip(arguments, false, function( elem ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			});
+		} else if ( arguments.length ) {
+			var set = this.pushStack( this, "after", arguments );
+			set.push.apply( set, jQuery(arguments[0]).toArray() );
+			return set;
+		}
+	},
+
+	// keepData is for internal use only--do not document
+	remove: function( selector, keepData ) {
+		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+				if ( !keepData && elem.nodeType === 1 ) {
+					jQuery.cleanData( elem.getElementsByTagName("*") );
+					jQuery.cleanData( [ elem ] );
+				}
+
+				if ( elem.parentNode ) {
+					elem.parentNode.removeChild( elem );
+				}
+			}
+		}
+
+		return this;
+	},
+
+	empty: function() {
+		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+			// Remove element nodes and prevent memory leaks
+			if ( elem.nodeType === 1 ) {
+				jQuery.cleanData( elem.getElementsByTagName("*") );
+			}
+
+			// Remove any remaining nodes
+			while ( elem.firstChild ) {
+				elem.removeChild( elem.firstChild );
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function () {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		});
+	},
+
+	html: function( value ) {
+		if ( value === undefined ) {
+			return this[0] && this[0].nodeType === 1 ?
+				this[0].innerHTML.replace(rinlinejQuery, "") :
+				null;
+
+		// See if we can take a shortcut and just use innerHTML
+		} else if ( typeof value === "string" && !rnocache.test( value ) &&
+			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
+			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
+
+			value = value.replace(rxhtmlTag, "<$1></$2>");
+
+			try {
+				for ( var i = 0, l = this.length; i < l; i++ ) {
+					// Remove element nodes and prevent memory leaks
+					if ( this[i].nodeType === 1 ) {
+						jQuery.cleanData( this[i].getElementsByTagName("*") );
+						this[i].innerHTML = value;
+					}
+				}
+
+			// If using innerHTML throws an exception, use the fallback method
+			} catch(e) {
+				this.empty().append( value );
+			}
+
+		} else if ( jQuery.isFunction( value ) ) {
+			this.each(function(i){
+				var self = jQuery( this );
+
+				self.html( value.call(this, i, self.html()) );
+			});
+
+		} else {
+			this.empty().append( value );
+		}
+
+		return this;
+	},
+
+	replaceWith: function( value ) {
+		if ( this[0] && this[0].parentNode ) {
+			// Make sure that the elements are removed from the DOM before they are inserted
+			// this can help fix replacing a parent with child elements
+			if ( jQuery.isFunction( value ) ) {
+				return this.each(function(i) {
+					var self = jQuery(this), old = self.html();
+					self.replaceWith( value.call( this, i, old ) );
+				});
+			}
+
+			if ( typeof value !== "string" ) {
+				value = jQuery( value ).detach();
+			}
+
+			return this.each(function() {
+				var next = this.nextSibling,
+					parent = this.parentNode;
+
+				jQuery( this ).remove();
+
+				if ( next ) {
+					jQuery(next).before( value );
+				} else {
+					jQuery(parent).append( value );
+				}
+			});
+		} else {
+			return this.length ?
+				this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+				this;
+		}
+	},
+
+	detach: function( selector ) {
+		return this.remove( selector, true );
+	},
+
+	domManip: function( args, table, callback ) {
+		var results, first, fragment, parent,
+			value = args[0],
+			scripts = [];
+
+		// We can't cloneNode fragments that contain checked, in WebKit
+		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
+			return this.each(function() {
+				jQuery(this).domManip( args, table, callback, true );
+			});
+		}
+
+		if ( jQuery.isFunction(value) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				args[0] = value.call(this, i, table ? self.html() : undefined);
+				self.domManip( args, table, callback );
+			});
+		}
+
+		if ( this[0] ) {
+			parent = value && value.parentNode;
+
+			// If we're in a fragment, just use that instead of building a new one
+			if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+				results = { fragment: parent };
+
+			} else {
+				results = jQuery.buildFragment( args, this, scripts );
+			}
+
+			fragment = results.fragment;
+
+			if ( fragment.childNodes.length === 1 ) {
+				first = fragment = fragment.firstChild;
+			} else {
+				first = fragment.firstChild;
+			}
+
+			if ( first ) {
+				table = table && jQuery.nodeName( first, "tr" );
+
+				for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
+					callback.call(
+						table ?
+							root(this[i], first) :
+							this[i],
+						// Make sure that we do not leak memory by inadvertently discarding
+						// the original fragment (which might have attached data) instead of
+						// using it; in addition, use the original fragment object for the last
+						// item instead of first because it can end up being emptied incorrectly
+						// in certain situations (Bug #8070).
+						// Fragments from the fragment cache must always be cloned and never used
+						// in place.
+						results.cacheable || (l > 1 && i < lastIndex) ?
+							jQuery.clone( fragment, true, true ) :
+							fragment
+					);
+				}
+			}
+
+			if ( scripts.length ) {
+				jQuery.each( scripts, evalScript );
+			}
+		}
+
+		return this;
+	}
+});
+
+function root( elem, cur ) {
+	return jQuery.nodeName(elem, "table") ?
+		(elem.getElementsByTagName("tbody")[0] ||
+		elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+		elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+
+	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+		return;
+	}
+
+	var internalKey = jQuery.expando,
+		oldData = jQuery.data( src ),
+		curData = jQuery.data( dest, oldData );
+
+	// Switch to use the internal data object, if it exists, for the next
+	// stage of data copying
+	if ( (oldData = oldData[ internalKey ]) ) {
+		var events = oldData.events;
+				curData = curData[ internalKey ] = jQuery.extend({}, oldData);
+
+		if ( events ) {
+			delete curData.handle;
+			curData.events = {};
+
+			for ( var type in events ) {
+				for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
+					jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
+				}
+			}
+		}
+	}
+}
+
+function cloneFixAttributes( src, dest ) {
+	var nodeName;
+
+	// We do not need to do anything for non-Elements
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	// clearAttributes removes the attributes, which we don't want,
+	// but also removes the attachEvent events, which we *do* want
+	if ( dest.clearAttributes ) {
+		dest.clearAttributes();
+	}
+
+	// mergeAttributes, in contrast, only merges back on the
+	// original attributes, not the events
+	if ( dest.mergeAttributes ) {
+		dest.mergeAttributes( src );
+	}
+
+	nodeName = dest.nodeName.toLowerCase();
+
+	// IE6-8 fail to clone children inside object elements that use
+	// the proprietary classid attribute value (rather than the type
+	// attribute) to identify the type of content to display
+	if ( nodeName === "object" ) {
+		dest.outerHTML = src.outerHTML;
+
+	} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
+		// IE6-8 fails to persist the checked state of a cloned checkbox
+		// or radio button. Worse, IE6-7 fail to give the cloned element
+		// a checked appearance if the defaultChecked value isn't also set
+		if ( src.checked ) {
+			dest.defaultChecked = dest.checked = src.checked;
+		}
+
+		// IE6-7 get confused and end up setting the value of a cloned
+		// checkbox/radio button to an empty string instead of "on"
+		if ( dest.value !== src.value ) {
+			dest.value = src.value;
+		}
+
+	// IE6-8 fails to return the selected option to the default selected
+	// state when cloning options
+	} else if ( nodeName === "option" ) {
+		dest.selected = src.defaultSelected;
+
+	// IE6-8 fails to set the defaultValue to the correct value when
+	// cloning other types of input fields
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+
+	// Event data gets referenced instead of copied if the expando
+	// gets copied too
+	dest.removeAttribute( jQuery.expando );
+}
+
+jQuery.buildFragment = function( args, nodes, scripts ) {
+	var fragment, cacheable, cacheresults,
+		doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
+
+	// Only cache "small" (1/2 KB) HTML strings that are associated with the main document
+	// Cloning options loses the selected state, so don't cache them
+	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+	if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
+		args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
+
+		cacheable = true;
+
+		cacheresults = jQuery.fragments[ args[0] ];
+		if ( cacheresults && cacheresults !== 1 ) {
+			fragment = cacheresults;
+		}
+	}
+
+	if ( !fragment ) {
+		fragment = doc.createDocumentFragment();
+		jQuery.clean( args, doc, fragment, scripts );
+	}
+
+	if ( cacheable ) {
+		jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
+	}
+
+	return { fragment: fragment, cacheable: cacheable };
+};
+
+jQuery.fragments = {};
+
+jQuery.each({
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var ret = [],
+			insert = jQuery( selector ),
+			parent = this.length === 1 && this[0].parentNode;
+
+		if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
+			insert[ original ]( this[0] );
+			return this;
+
+		} else {
+			for ( var i = 0, l = insert.length; i < l; i++ ) {
+				var elems = (i > 0 ? this.clone(true) : this).get();
+				jQuery( insert[i] )[ original ]( elems );
+				ret = ret.concat( elems );
+			}
+
+			return this.pushStack( ret, name, insert.selector );
+		}
+	};
+});
+
+function getAll( elem ) {
+	if ( "getElementsByTagName" in elem ) {
+		return elem.getElementsByTagName( "*" );
+
+	} else if ( "querySelectorAll" in elem ) {
+		return elem.querySelectorAll( "*" );
+
+	} else {
+		return [];
+	}
+}
+
+// Used in clean, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+	if ( elem.type === "checkbox" || elem.type === "radio" ) {
+		elem.defaultChecked = elem.checked;
+	}
+}
+// Finds all inputs and passes them to fixDefaultChecked
+function findInputs( elem ) {
+	if ( jQuery.nodeName( elem, "input" ) ) {
+		fixDefaultChecked( elem );
+	} else if ( elem.getElementsByTagName ) {
+		jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+	}
+}
+
+jQuery.extend({
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var clone = elem.cloneNode(true),
+				srcElements,
+				destElements,
+				i;
+
+		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+			// IE copies events bound via attachEvent when using cloneNode.
+			// Calling detachEvent on the clone will also remove the events
+			// from the original. In order to get around this, we use some
+			// proprietary methods to clear the events. Thanks to MooTools
+			// guys for this hotness.
+
+			cloneFixAttributes( elem, clone );
+
+			// Using Sizzle here is crazy slow, so we use getElementsByTagName
+			// instead
+			srcElements = getAll( elem );
+			destElements = getAll( clone );
+
+			// Weird iteration because IE will replace the length property
+			// with an element if you are cloning the body and one of the
+			// elements on the page has a name or id of "length"
+			for ( i = 0; srcElements[i]; ++i ) {
+				cloneFixAttributes( srcElements[i], destElements[i] );
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			cloneCopyEvent( elem, clone );
+
+			if ( deepDataAndEvents ) {
+				srcElements = getAll( elem );
+				destElements = getAll( clone );
+
+				for ( i = 0; srcElements[i]; ++i ) {
+					cloneCopyEvent( srcElements[i], destElements[i] );
+				}
+			}
+		}
+
+		// Return the cloned set
+		return clone;
+	},
+
+	clean: function( elems, context, fragment, scripts ) {
+		var checkScriptType;
+
+		context = context || document;
+
+		// !context.createElement fails in IE with an error but returns typeof 'object'
+		if ( typeof context.createElement === "undefined" ) {
+			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+		}
+
+		var ret = [], j;
+
+		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+			if ( typeof elem === "number" ) {
+				elem += "";
+			}
+
+			if ( !elem ) {
+				continue;
+			}
+
+			// Convert html string into DOM nodes
+			if ( typeof elem === "string" ) {
+				if ( !rhtml.test( elem ) ) {
+					elem = context.createTextNode( elem );
+				} else {
+					// Fix "XHTML"-style tags in all browsers
+					elem = elem.replace(rxhtmlTag, "<$1></$2>");
+
+					// Trim whitespace, otherwise indexOf won't work as expected
+					var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
+						wrap = wrapMap[ tag ] || wrapMap._default,
+						depth = wrap[0],
+						div = context.createElement("div");
+
+					// Go to html and back, then peel off extra wrappers
+					div.innerHTML = wrap[1] + elem + wrap[2];
+
+					// Move to the right depth
+					while ( depth-- ) {
+						div = div.lastChild;
+					}
+
+					// Remove IE's autoinserted <tbody> from table fragments
+					if ( !jQuery.support.tbody ) {
+
+						// String was a <table>, *may* have spurious <tbody>
+						var hasBody = rtbody.test(elem),
+							tbody = tag === "table" && !hasBody ?
+								div.firstChild && div.firstChild.childNodes :
+
+								// String was a bare <thead> or <tfoot>
+								wrap[1] === "<table>" && !hasBody ?
+									div.childNodes :
+									[];
+
+						for ( j = tbody.length - 1; j >= 0 ; --j ) {
+							if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+								tbody[ j ].parentNode.removeChild( tbody[ j ] );
+							}
+						}
+					}
+
+					// IE completely kills leading whitespace when innerHTML is used
+					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+						div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+					}
+
+					elem = div.childNodes;
+				}
+			}
+
+			// Resets defaultChecked for any radios and checkboxes
+			// about to be appended to the DOM in IE 6/7 (#8060)
+			var len;
+			if ( !jQuery.support.appendChecked ) {
+				if ( elem[0] && typeof (len = elem.length) === "number" ) {
+					for ( j = 0; j < len; j++ ) {
+						findInputs( elem[j] );
+					}
+				} else {
+					findInputs( elem );
+				}
+			}
+
+			if ( elem.nodeType ) {
+				ret.push( elem );
+			} else {
+				ret = jQuery.merge( ret, elem );
+			}
+		}
+
+		if ( fragment ) {
+			checkScriptType = function( elem ) {
+				return !elem.type || rscriptType.test( elem.type );
+			};
+			for ( i = 0; ret[i]; i++ ) {
+				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
+					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
+
+				} else {
+					if ( ret[i].nodeType === 1 ) {
+						var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
+
+						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+					}
+					fragment.appendChild( ret[i] );
+				}
+			}
+		}
+
+		return ret;
+	},
+
+	cleanData: function( elems ) {
+		var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,
+			deleteExpando = jQuery.support.deleteExpando;
+
+		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+			if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+				continue;
+			}
+
+			id = elem[ jQuery.expando ];
+
+			if ( id ) {
+				data = cache[ id ] && cache[ id ][ internalKey ];
+
+				if ( data && data.events ) {
+					for ( var type in data.events ) {
+						if ( special[ type ] ) {
+							jQuery.event.remove( elem, type );
+
+						// This is a shortcut to avoid jQuery.event.remove's overhead
+						} else {
+							jQuery.removeEvent( elem, type, data.handle );
+						}
+					}
+
+					// Null the DOM reference to avoid IE6/7/8 leak (#7054)
+					if ( data.handle ) {
+						data.handle.elem = null;
+					}
+				}
+
+				if ( deleteExpando ) {
+					delete elem[ jQuery.expando ];
+
+				} else if ( elem.removeAttribute ) {
+					elem.removeAttribute( jQuery.expando );
+				}
+
+				delete cache[ id ];
+			}
+		}
+	}
+});
+
+function evalScript( i, elem ) {
+	if ( elem.src ) {
+		jQuery.ajax({
+			url: elem.src,
+			async: false,
+			dataType: "script"
+		});
+	} else {
+		jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
+	}
+
+	if ( elem.parentNode ) {
+		elem.parentNode.removeChild( elem );
+	}
+}
+
+
+
+
+var ralpha = /alpha\([^)]*\)/i,
+	ropacity = /opacity=([^)]*)/,
+	rdashAlpha = /-([a-z])/ig,
+	// fixed for IE9, see #8346
+	rupper = /([A-Z]|^ms)/g,
+	rnumpx = /^-?\d+(?:px)?$/i,
+	rnum = /^-?\d/,
+	rrelNum = /^[+\-]=/,
+	rrelNumFilter = /[^+\-\.\de]+/g,
+
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssWidth = [ "Left", "Right" ],
+	cssHeight = [ "Top", "Bottom" ],
+	curCSS,
+
+	getComputedStyle,
+	currentStyle,
+
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	};
+
+jQuery.fn.css = function( name, value ) {
+	// Setting 'undefined' is a no-op
+	if ( arguments.length === 2 && value === undefined ) {
+		return this;
+	}
+
+	return jQuery.access( this, name, value, true, function( elem, name, value ) {
+		return value !== undefined ?
+			jQuery.style( elem, name, value ) :
+			jQuery.css( elem, name );
+	});
+};
+
+jQuery.extend({
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity", "opacity" );
+					return ret === "" ? "1" : ret;
+
+				} else {
+					return elem.style.opacity;
+				}
+			}
+		}
+	},
+
+	// Exclude the following css properties to add px
+	cssNumber: {
+		"zIndex": true,
+		"fontWeight": true,
+		"opacity": true,
+		"zoom": true,
+		"lineHeight": true,
+		"widows": true,
+		"orphans": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		// normalize float css property
+		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, origName = jQuery.camelCase( name ),
+			style = elem.style, hooks = jQuery.cssHooks[ origName ];
+
+		name = jQuery.cssProps[ origName ] || origName;
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// Make sure that NaN and null values aren't set. See: #7116
+			if ( type === "number" && isNaN( value ) || value == null ) {
+				return;
+			}
+
+			// convert relative number strings (+= or -=) to relative numbers. #7345
+			if ( type === "string" && rrelNum.test( value ) ) {
+				value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) );
+			}
+
+			// If a number was passed in, add 'px' to the (except for certain CSS properties)
+			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+				value += "px";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
+				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+				// Fixes bug #5509
+				try {
+					style[ name ] = value;
+				} catch(e) {}
+			}
+
+		} else {
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra ) {
+		var ret, hooks;
+
+		// Make sure that we're working with the right name
+		name = jQuery.camelCase( name );
+		hooks = jQuery.cssHooks[ name ];
+		name = jQuery.cssProps[ name ] || name;
+
+		// cssFloat needs a special treatment
+		if ( name === "cssFloat" ) {
+			name = "float";
+		}
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
+			return ret;
+
+		// Otherwise, if a way to get the computed value exists, use that
+		} else if ( curCSS ) {
+			return curCSS( elem, name );
+		}
+	},
+
+	// A method for quickly swapping in/out CSS properties to get correct calculations
+	swap: function( elem, options, callback ) {
+		var old = {};
+
+		// Remember the old values, and insert the new ones
+		for ( var name in options ) {
+			old[ name ] = elem.style[ name ];
+			elem.style[ name ] = options[ name ];
+		}
+
+		callback.call( elem );
+
+		// Revert the old values
+		for ( name in options ) {
+			elem.style[ name ] = old[ name ];
+		}
+	},
+
+	camelCase: function( string ) {
+		return string.replace( rdashAlpha, fcamelCase );
+	}
+});
+
+// DEPRECATED, Use jQuery.css() instead
+jQuery.curCSS = jQuery.css;
+
+jQuery.each(["height", "width"], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			var val;
+
+			if ( computed ) {
+				if ( elem.offsetWidth !== 0 ) {
+					val = getWH( elem, name, extra );
+
+				} else {
+					jQuery.swap( elem, cssShow, function() {
+						val = getWH( elem, name, extra );
+					});
+				}
+
+				if ( val <= 0 ) {
+					val = curCSS( elem, name, name );
+
+					if ( val === "0px" && currentStyle ) {
+						val = currentStyle( elem, name, name );
+					}
+
+					if ( val != null ) {
+						// Should return "auto" instead of 0, use 0 for
+						// temporary backwards-compat
+						return val === "" || val === "auto" ? "0px" : val;
+					}
+				}
+
+				if ( val < 0 || val == null ) {
+					val = elem.style[ name ];
+
+					// Should return "auto" instead of 0, use 0 for
+					// temporary backwards-compat
+					return val === "" || val === "auto" ? "0px" : val;
+				}
+
+				return typeof val === "string" ? val : val + "px";
+			}
+		},
+
+		set: function( elem, value ) {
+			if ( rnumpx.test( value ) ) {
+				// ignore negative width and height values #1599
+				value = parseFloat(value);
+
+				if ( value >= 0 ) {
+					return value + "px";
+				}
+
+			} else {
+				return value;
+			}
+		}
+	};
+});
+
+if ( !jQuery.support.opacity ) {
+	jQuery.cssHooks.opacity = {
+		get: function( elem, computed ) {
+			// IE uses filters for opacity
+			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+				( parseFloat( RegExp.$1 ) / 100 ) + "" :
+				computed ? "1" : "";
+		},
+
+		set: function( elem, value ) {
+			var style = elem.style,
+				currentStyle = elem.currentStyle;
+
+			// IE has trouble with opacity if it does not have layout
+			// Force it by setting the zoom level
+			style.zoom = 1;
+
+			// Set the alpha filter to set the opacity
+			var opacity = jQuery.isNaN( value ) ?
+				"" :
+				"alpha(opacity=" + value * 100 + ")",
+				filter = currentStyle && currentStyle.filter || style.filter || "";
+
+			style.filter = ralpha.test( filter ) ?
+				filter.replace( ralpha, opacity ) :
+				filter + " " + opacity;
+		}
+	};
+}
+
+jQuery(function() {
+	// This hook cannot be added until DOM ready because the support test
+	// for it is not run until after DOM ready
+	if ( !jQuery.support.reliableMarginRight ) {
+		jQuery.cssHooks.marginRight = {
+			get: function( elem, computed ) {
+				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+				// Work around by temporarily setting element display to inline-block
+				var ret;
+				jQuery.swap( elem, { "display": "inline-block" }, function() {
+					if ( computed ) {
+						ret = curCSS( elem, "margin-right", "marginRight" );
+					} else {
+						ret = elem.style.marginRight;
+					}
+				});
+				return ret;
+			}
+		};
+	}
+});
+
+if ( document.defaultView && document.defaultView.getComputedStyle ) {
+	getComputedStyle = function( elem, name ) {
+		var ret, defaultView, computedStyle;
+
+		name = name.replace( rupper, "-$1" ).toLowerCase();
+
+		if ( !(defaultView = elem.ownerDocument.defaultView) ) {
+			return undefined;
+		}
+
+		if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
+			ret = computedStyle.getPropertyValue( name );
+			if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+				ret = jQuery.style( elem, name );
+			}
+		}
+
+		return ret;
+	};
+}
+
+if ( document.documentElement.currentStyle ) {
+	currentStyle = function( elem, name ) {
+		var left,
+			ret = elem.currentStyle && elem.currentStyle[ name ],
+			rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],
+			style = elem.style;
+
+		// From the awesome hack by Dean Edwards
+		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+		// If we're not dealing with a regular pixel number
+		// but a number that has a weird ending, we need to convert it to pixels
+		if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
+			// Remember the original values
+			left = style.left;
+
+			// Put in the new values to get a computed value out
+			if ( rsLeft ) {
+				elem.runtimeStyle.left = elem.currentStyle.left;
+			}
+			style.left = name === "fontSize" ? "1em" : (ret || 0);
+			ret = style.pixelLeft + "px";
+
+			// Revert the changed values
+			style.left = left;
+			if ( rsLeft ) {
+				elem.runtimeStyle.left = rsLeft;
+			}
+		}
+
+		return ret === "" ? "auto" : ret;
+	};
+}
+
+curCSS = getComputedStyle || currentStyle;
+
+function getWH( elem, name, extra ) {
+	var which = name === "width" ? cssWidth : cssHeight,
+		val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
+
+	if ( extra === "border" ) {
+		return val;
+	}
+
+	jQuery.each( which, function() {
+		if ( !extra ) {
+			val -= parseFloat(jQuery.css( elem, "padding" + this )) || 0;
+		}
+
+		if ( extra === "margin" ) {
+			val += parseFloat(jQuery.css( elem, "margin" + this )) || 0;
+
+		} else {
+			val -= parseFloat(jQuery.css( elem, "border" + this + "Width" )) || 0;
+		}
+	});
+
+	return val;
+}
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.hidden = function( elem ) {
+		var width = elem.offsetWidth,
+			height = elem.offsetHeight;
+
+		return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
+	};
+
+	jQuery.expr.filters.visible = function( elem ) {
+		return !jQuery.expr.filters.hidden( elem );
+	};
+}
+
+
+
+
+var r20 = /%20/g,
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rhash = /#.*$/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+	rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+	rquery = /\?/,
+	rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+	rselectTextarea = /^(?:select|textarea)/i,
+	rspacesAjax = /\s+/,
+	rts = /([?&])_=[^&]*/,
+	rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
+
+	// Keep a copy of the old load method
+	_load = jQuery.fn.load,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Document location
+	ajaxLocation,
+
+	// Document location segments
+	ajaxLocParts;
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+	ajaxLocation = location.href;
+} catch( e ) {
+	// Use the href attribute of an A element
+	// since IE will modify it given document.location
+	ajaxLocation = document.createElement( "a" );
+	ajaxLocation.href = "";
+	ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		if ( jQuery.isFunction( func ) ) {
+			var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
+				i = 0,
+				length = dataTypes.length,
+				dataType,
+				list,
+				placeBefore;
+
+			// For each dataType in the dataTypeExpression
+			for(; i < length; i++ ) {
+				dataType = dataTypes[ i ];
+				// We control if we're asked to add before
+				// any existing element
+				placeBefore = /^\+/.test( dataType );
+				if ( placeBefore ) {
+					dataType = dataType.substr( 1 ) || "*";
+				}
+				list = structure[ dataType ] = structure[ dataType ] || [];
+				// then we add to the structure accordingly
+				list[ placeBefore ? "unshift" : "push" ]( func );
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
+		dataType /* internal */, inspected /* internal */ ) {
+
+	dataType = dataType || options.dataTypes[ 0 ];
+	inspected = inspected || {};
+
+	inspected[ dataType ] = true;
+
+	var list = structure[ dataType ],
+		i = 0,
+		length = list ? list.length : 0,
+		executeOnly = ( structure === prefilters ),
+		selection;
+
+	for(; i < length && ( executeOnly || !selection ); i++ ) {
+		selection = list[ i ]( options, originalOptions, jqXHR );
+		// If we got redirected to another dataType
+		// we try there if executing only and not done already
+		if ( typeof selection === "string" ) {
+			if ( !executeOnly || inspected[ selection ] ) {
+				selection = undefined;
+			} else {
+				options.dataTypes.unshift( selection );
+				selection = inspectPrefiltersOrTransports(
+						structure, options, originalOptions, jqXHR, selection, inspected );
+			}
+		}
+	}
+	// If we're only executing or nothing was selected
+	// we try the catchall dataType if not done already
+	if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
+		selection = inspectPrefiltersOrTransports(
+				structure, options, originalOptions, jqXHR, "*", inspected );
+	}
+	// unnecessary when only executing (prefilters)
+	// but it'll be ignored by the caller in that case
+	return selection;
+}
+
+jQuery.fn.extend({
+	load: function( url, params, callback ) {
+		if ( typeof url !== "string" && _load ) {
+			return _load.apply( this, arguments );
+
+		// Don't do a request if no elements are being requested
+		} else if ( !this.length ) {
+			return this;
+		}
+
+		var off = url.indexOf( " " );
+		if ( off >= 0 ) {
+			var selector = url.slice( off, url.length );
+			url = url.slice( 0, off );
+		}
+
+		// Default to a GET request
+		var type = "GET";
+
+		// If the second parameter was provided
+		if ( params ) {
+			// If it's a function
+			if ( jQuery.isFunction( params ) ) {
+				// We assume that it's the callback
+				callback = params;
+				params = undefined;
+
+			// Otherwise, build a param string
+			} else if ( typeof params === "object" ) {
+				params = jQuery.param( params, jQuery.ajaxSettings.traditional );
+				type = "POST";
+			}
+		}
+
+		var self = this;
+
+		// Request the remote document
+		jQuery.ajax({
+			url: url,
+			type: type,
+			dataType: "html",
+			data: params,
+			// Complete callback (responseText is used internally)
+			complete: function( jqXHR, status, responseText ) {
+				// Store the response as specified by the jqXHR object
+				responseText = jqXHR.responseText;
+				// If successful, inject the HTML into all the matched elements
+				if ( jqXHR.isResolved() ) {
+					// #4825: Get the actual response in case
+					// a dataFilter is present in ajaxSettings
+					jqXHR.done(function( r ) {
+						responseText = r;
+					});
+					// See if a selector was specified
+					self.html( selector ?
+						// Create a dummy div to hold the results
+						jQuery("<div>")
+							// inject the contents of the document in, removing the scripts
+							// to avoid any 'Permission Denied' errors in IE
+							.append(responseText.replace(rscript, ""))
+
+							// Locate the specified elements
+							.find(selector) :
+
+						// If not, just inject the full result
+						responseText );
+				}
+
+				if ( callback ) {
+					self.each( callback, [ responseText, status, jqXHR ] );
+				}
+			}
+		});
+
+		return this;
+	},
+
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+
+	serializeArray: function() {
+		return this.map(function(){
+			return this.elements ? jQuery.makeArray( this.elements ) : this;
+		})
+		.filter(function(){
+			return this.name && !this.disabled &&
+				( this.checked || rselectTextarea.test( this.nodeName ) ||
+					rinput.test( this.type ) );
+		})
+		.map(function( i, elem ){
+			var val = jQuery( this ).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray( val ) ?
+					jQuery.map( val, function( val, i ){
+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+					}) :
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		}).get();
+	}
+});
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
+	jQuery.fn[ o ] = function( f ){
+		return this.bind( o, f );
+	};
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+		// shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		return jQuery.ajax({
+			type: method,
+			url: url,
+			data: data,
+			success: callback,
+			dataType: type
+		});
+	};
+});
+
+jQuery.extend({
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function ( target, settings ) {
+		if ( !settings ) {
+			// Only one parameter, we extend ajaxSettings
+			settings = target;
+			target = jQuery.extend( true, jQuery.ajaxSettings, settings );
+		} else {
+			// target was provided, we extend into it
+			jQuery.extend( true, target, jQuery.ajaxSettings, settings );
+		}
+		// Flatten fields we don't want deep extended
+		for( var field in { context: 1, url: 1 } ) {
+			if ( field in settings ) {
+				target[ field ] = settings[ field ];
+			} else if( field in jQuery.ajaxSettings ) {
+				target[ field ] = jQuery.ajaxSettings[ field ];
+			}
+		}
+		return target;
+	},
+
+	ajaxSettings: {
+		url: ajaxLocation,
+		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+		global: true,
+		type: "GET",
+		contentType: "application/x-www-form-urlencoded",
+		processData: true,
+		async: true,
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			xml: "application/xml, text/xml",
+			html: "text/html",
+			text: "text/plain",
+			json: "application/json, text/javascript",
+			"*": "*/*"
+		},
+
+		contents: {
+			xml: /xml/,
+			html: /html/,
+			json: /json/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText"
+		},
+
+		// List of data converters
+		// 1) key format is "source_type destination_type" (a single space in-between)
+		// 2) the catchall symbol "*" can be used for source_type
+		converters: {
+
+			// Convert anything to text
+			"* text": window.String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": jQuery.parseJSON,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		}
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var // Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+			// Callbacks context
+			callbackContext = s.context || s,
+			// Context for global events
+			// It's the callbackContext if one was provided in the options
+			// and if it's a DOM node or a jQuery collection
+			globalEventContext = callbackContext !== s &&
+				( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
+						jQuery( callbackContext ) : jQuery.event,
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery._Deferred(),
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+			// ifModified key
+			ifModifiedKey,
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+			// transport
+			transport,
+			// timeout handle
+			timeoutTimer,
+			// Cross-domain detection vars
+			parts,
+			// The jqXHR state
+			state = 0,
+			// To know if global events are to be dispatched
+			fireGlobals,
+			// Loop variable
+			i,
+			// Fake xhr
+			jqXHR = {
+
+				readyState: 0,
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					if ( !state ) {
+						var lname = name.toLowerCase();
+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return state === 2 ? responseHeadersString : null;
+				},
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( state === 2 ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while( ( match = rheaders.exec( responseHeadersString ) ) ) {
+								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match === undefined ? null : match;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( !state ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					statusText = statusText || "abort";
+					if ( transport ) {
+						transport.abort( statusText );
+					}
+					done( 0, statusText );
+					return this;
+				}
+			};
+
+		// Callback for when everything is done
+		// It is defined here because jslint complains if it is declared
+		// at the end of the function (which would be more logical and readable)
+		function done( status, statusText, responses, headers ) {
+
+			// Called once
+			if ( state === 2 ) {
+				return;
+			}
+
+			// State is "done" now
+			state = 2;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status ? 4 : 0;
+
+			var isSuccess,
+				success,
+				error,
+				response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
+				lastModified,
+				etag;
+
+			// If successful, handle type chaining
+			if ( status >= 200 && status < 300 || status === 304 ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+
+					if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
+						jQuery.lastModified[ ifModifiedKey ] = lastModified;
+					}
+					if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
+						jQuery.etag[ ifModifiedKey ] = etag;
+					}
+				}
+
+				// If not modified
+				if ( status === 304 ) {
+
+					statusText = "notmodified";
+					isSuccess = true;
+
+				// If we have data
+				} else {
+
+					try {
+						success = ajaxConvert( s, response );
+						statusText = "success";
+						isSuccess = true;
+					} catch(e) {
+						// We have a parsererror
+						statusText = "parsererror";
+						error = e;
+					}
+				}
+			} else {
+				// We extract error from statusText
+				// then normalize statusText and status for non-aborts
+				error = statusText;
+				if( !statusText || status ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = statusText;
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
+						[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger( "ajaxStop" );
+				}
+			}
+		}
+
+		// Attach deferreds
+		deferred.promise( jqXHR );
+		jqXHR.success = jqXHR.done;
+		jqXHR.error = jqXHR.fail;
+		jqXHR.complete = completeDeferred.done;
+
+		// Status-dependent callbacks
+		jqXHR.statusCode = function( map ) {
+			if ( map ) {
+				var tmp;
+				if ( state < 2 ) {
+					for( tmp in map ) {
+						statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
+					}
+				} else {
+					tmp = map[ jqXHR.status ];
+					jqXHR.then( tmp, tmp );
+				}
+			}
+			return this;
+		};
+
+		// Remove hash character (#7531: and string promotion)
+		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+		// Extract dataTypes list
+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
+
+		// Determine if a cross-domain request is in order
+		if ( s.crossDomain == null ) {
+			parts = rurl.exec( s.url.toLowerCase() );
+			s.crossDomain = !!( parts &&
+				( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
+					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+			);
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefiler, stop there
+		if ( state === 2 ) {
+			return false;
+		}
+
+		// We can fire global events as of now if asked to
+		fireGlobals = s.global;
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
+			}
+
+			// Get ifModifiedKey before adding the anti-cache parameter
+			ifModifiedKey = s.url;
+
+			// Add anti-cache in url if needed
+			if ( s.cache === false ) {
+
+				var ts = jQuery.now(),
+					// try replacing _= if it is there
+					ret = s.url.replace( rts, "$1_=" + ts );
+
+				// if nothing was replaced, add timestamp to the end
+				s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			ifModifiedKey = ifModifiedKey || s.url;
+			if ( jQuery.lastModified[ ifModifiedKey ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
+			}
+			if ( jQuery.etag[ ifModifiedKey ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
+			}
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+				// Abort if not done already
+				jqXHR.abort();
+				return false;
+
+		}
+
+		// Install callbacks on deferreds
+		for ( i in { success: 1, error: 1, complete: 1 } ) {
+			jqXHR[ i ]( s[ i ] );
+		}
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = setTimeout( function(){
+					jqXHR.abort( "timeout" );
+				}, s.timeout );
+			}
+
+			try {
+				state = 1;
+				transport.send( requestHeaders, done );
+			} catch (e) {
+				// Propagate exception as error if not done
+				if ( status < 2 ) {
+					done( -1, e );
+				// Simply rethrow otherwise
+				} else {
+					jQuery.error( e );
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	// Serialize an array of form elements or a set of
+	// key/values into a query string
+	param: function( a, traditional ) {
+		var s = [],
+			add = function( key, value ) {
+				// If value is a function, invoke it and return its value
+				value = jQuery.isFunction( value ) ? value() : value;
+				s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+			};
+
+		// Set traditional to true for jQuery <= 1.3.2 behavior.
+		if ( traditional === undefined ) {
+			traditional = jQuery.ajaxSettings.traditional;
+		}
+
+		// If an array was passed in, assume that it is an array of form elements.
+		if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+			// Serialize the form elements
+			jQuery.each( a, function() {
+				add( this.name, this.value );
+			});
+
+		} else {
+			// If traditional, encode the "old" way (the way 1.3.2 or older
+			// did it), otherwise encode params recursively.
+			for ( var prefix in a ) {
+				buildParams( prefix, a[ prefix ], traditional, add );
+			}
+		}
+
+		// Return the resulting serialization
+		return s.join( "&" ).replace( r20, "+" );
+	}
+});
+
+function buildParams( prefix, obj, traditional, add ) {
+	if ( jQuery.isArray( obj ) ) {
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+				// If array item is non-scalar (array or object), encode its
+				// numeric index to resolve deserialization ambiguity issues.
+				// Note that rack (as of 1.0.0) can't currently deserialize
+				// nested arrays properly, and attempting to do so may cause
+				// a server error. Possible fixes are to modify rack's
+				// deserialization algorithm or to provide an option or flag
+				// to force array serialization to be shallow.
+				buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
+			}
+		});
+
+	} else if ( !traditional && obj != null && typeof obj === "object" ) {
+		// Serialize object item.
+		for ( var name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// This is still on the jQuery object... for now
+// Want to move this to jQuery.ajax some day
+jQuery.extend({
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {}
+
+});
+
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var contents = s.contents,
+		dataTypes = s.dataTypes,
+		responseFields = s.responseFields,
+		ct,
+		type,
+		finalDataType,
+		firstDataType;
+
+	// Fill responseXXX fields
+	for( type in responseFields ) {
+		if ( type in responses ) {
+			jqXHR[ responseFields[type] ] = responses[ type ];
+		}
+	}
+
+	// Remove auto dataType and get content-type in the process
+	while( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+
+	// Apply the dataFilter if provided
+	if ( s.dataFilter ) {
+		response = s.dataFilter( response, s.dataType );
+	}
+
+	var dataTypes = s.dataTypes,
+		converters = {},
+		i,
+		key,
+		length = dataTypes.length,
+		tmp,
+		// Current and previous dataTypes
+		current = dataTypes[ 0 ],
+		prev,
+		// Conversion expression
+		conversion,
+		// Conversion function
+		conv,
+		// Conversion functions (transitive conversion)
+		conv1,
+		conv2;
+
+	// For each dataType in the chain
+	for( i = 1; i < length; i++ ) {
+
+		// Create converters map
+		// with lowercased keys
+		if ( i === 1 ) {
+			for( key in s.converters ) {
+				if( typeof key === "string" ) {
+					converters[ key.toLowerCase() ] = s.converters[ key ];
+				}
+			}
+		}
+
+		// Get the dataTypes
+		prev = current;
+		current = dataTypes[ i ];
+
+		// If current is auto dataType, update it to prev
+		if( current === "*" ) {
+			current = prev;
+		// If no auto and dataTypes are actually different
+		} else if ( prev !== "*" && prev !== current ) {
+
+			// Get the converter
+			conversion = prev + " " + current;
+			conv = converters[ conversion ] || converters[ "* " + current ];
+
+			// If there is no direct converter, search transitively
+			if ( !conv ) {
+				conv2 = undefined;
+				for( conv1 in converters ) {
+					tmp = conv1.split( " " );
+					if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
+						conv2 = converters[ tmp[1] + " " + current ];
+						if ( conv2 ) {
+							conv1 = converters[ conv1 ];
+							if ( conv1 === true ) {
+								conv = conv2;
+							} else if ( conv2 === true ) {
+								conv = conv1;
+							}
+							break;
+						}
+					}
+				}
+			}
+			// If we found no converter, dispatch an error
+			if ( !( conv || conv2 ) ) {
+				jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
+			}
+			// If found converter is not an equivalence
+			if ( conv !== true ) {
+				// Convert with 1 or 2 converters accordingly
+				response = conv ? conv( response ) : conv2( conv1(response) );
+			}
+		}
+	}
+	return response;
+}
+
+
+
+
+var jsc = jQuery.now(),
+	jsre = /(\=)\?(&|$)|\?\?/i;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+	jsonp: "callback",
+	jsonpCallback: function() {
+		return jQuery.expando + "_" + ( jsc++ );
+	}
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
+		( typeof s.data === "string" );
+
+	if ( s.dataTypes[ 0 ] === "jsonp" ||
+		s.jsonp !== false && ( jsre.test( s.url ) ||
+				inspectData && jsre.test( s.data ) ) ) {
+
+		var responseContainer,
+			jsonpCallback = s.jsonpCallback =
+				jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
+			previous = window[ jsonpCallback ],
+			url = s.url,
+			data = s.data,
+			replace = "$1" + jsonpCallback + "$2";
+
+		if ( s.jsonp !== false ) {
+			url = url.replace( jsre, replace );
+			if ( s.url === url ) {
+				if ( inspectData ) {
+					data = data.replace( jsre, replace );
+				}
+				if ( s.data === data ) {
+					// Add callback manually
+					url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
+				}
+			}
+		}
+
+		s.url = url;
+		s.data = data;
+
+		// Install callback
+		window[ jsonpCallback ] = function( response ) {
+			responseContainer = [ response ];
+		};
+
+		// Clean-up function
+		jqXHR.always(function() {
+			// Set callback back to previous value
+			window[ jsonpCallback ] = previous;
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( previous ) ) {
+				window[ jsonpCallback ]( responseContainer[ 0 ] );
+			}
+		});
+
+		// Use data converter to retrieve json after script execution
+		s.converters["script json"] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( jsonpCallback + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Delegate to script
+		return "script";
+	}
+});
+
+
+
+
+// Install script dataType
+jQuery.ajaxSetup({
+	accepts: {
+		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /javascript|ecmascript/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+		s.global = false;
+	}
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+
+		var script,
+			head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
+
+		return {
+
+			send: function( _, callback ) {
+
+				script = document.createElement( "script" );
+
+				script.async = "async";
+
+				if ( s.scriptCharset ) {
+					script.charset = s.scriptCharset;
+				}
+
+				script.src = s.url;
+
+				// Attach handlers for all browsers
+				script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+						// Handle memory leak in IE
+						script.onload = script.onreadystatechange = null;
+
+						// Remove the script
+						if ( head && script.parentNode ) {
+							head.removeChild( script );
+						}
+
+						// Dereference the script
+						script = undefined;
+
+						// Callback if not abort
+						if ( !isAbort ) {
+							callback( 200, "success" );
+						}
+					}
+				};
+				// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
+				// This arises when a base node is used (#2709 and #4378).
+				head.insertBefore( script, head.firstChild );
+			},
+
+			abort: function() {
+				if ( script ) {
+					script.onload( 0, 1 );
+				}
+			}
+		};
+	}
+});
+
+
+
+
+var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+	xhrOnUnloadAbort = window.ActiveXObject ? function() {
+		// Abort all pending requests
+		for ( var key in xhrCallbacks ) {
+			xhrCallbacks[ key ]( 0, 1 );
+		}
+	} : false,
+	xhrId = 0,
+	xhrCallbacks;
+
+// Functions to create xhrs
+function createStandardXHR() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch( e ) {}
+}
+
+function createActiveXHR() {
+	try {
+		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+	} catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+	/* Microsoft failed to properly
+	 * implement the XMLHttpRequest in IE7 (can't request local files),
+	 * so we use the ActiveXObject when it is available
+	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+	 * we need a fallback.
+	 */
+	function() {
+		return !this.isLocal && createStandardXHR() || createActiveXHR();
+	} :
+	// For all other browsers, use the standard XMLHttpRequest object
+	createStandardXHR;
+
+// Determine support properties
+(function( xhr ) {
+	jQuery.extend( jQuery.support, {
+		ajax: !!xhr,
+		cors: !!xhr && ( "withCredentials" in xhr )
+	});
+})( jQuery.ajaxSettings.xhr() );
+
+// Create transport if the browser can provide an xhr
+if ( jQuery.support.ajax ) {
+
+	jQuery.ajaxTransport(function( s ) {
+		// Cross domain only allowed if supported through XMLHttpRequest
+		if ( !s.crossDomain || jQuery.support.cors ) {
+
+			var callback;
+
+			return {
+				send: function( headers, complete ) {
+
+					// Get a new xhr
+					var xhr = s.xhr(),
+						handle,
+						i;
+
+					// Open the socket
+					// Passing null username, generates a login popup on Opera (#2865)
+					if ( s.username ) {
+						xhr.open( s.type, s.url, s.async, s.username, s.password );
+					} else {
+						xhr.open( s.type, s.url, s.async );
+					}
+
+					// Apply custom fields if provided
+					if ( s.xhrFields ) {
+						for ( i in s.xhrFields ) {
+							xhr[ i ] = s.xhrFields[ i ];
+						}
+					}
+
+					// Override mime type if needed
+					if ( s.mimeType && xhr.overrideMimeType ) {
+						xhr.overrideMimeType( s.mimeType );
+					}
+
+					// X-Requested-With header
+					// For cross-domain requests, seeing as conditions for a preflight are
+					// akin to a jigsaw puzzle, we simply never set it to be sure.
+					// (it can always be set on a per-request basis or even using ajaxSetup)
+					// For same-domain requests, won't change header if already provided.
+					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+						headers[ "X-Requested-With" ] = "XMLHttpRequest";
+					}
+
+					// Need an extra try/catch for cross domain requests in Firefox 3
+					try {
+						for ( i in headers ) {
+							xhr.setRequestHeader( i, headers[ i ] );
+						}
+					} catch( _ ) {}
+
+					// Do send the request
+					// This may raise an exception which is actually
+					// handled in jQuery.ajax (so no try/catch here)
+					xhr.send( ( s.hasContent && s.data ) || null );
+
+					// Listener
+					callback = function( _, isAbort ) {
+
+						var status,
+							statusText,
+							responseHeaders,
+							responses,
+							xml;
+
+						// Firefox throws exceptions when accessing properties
+						// of an xhr when a network error occured
+						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+						try {
+
+							// Was never called and is aborted or complete
+							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+								// Only called once
+								callback = undefined;
+
+								// Do not keep as active anymore
+								if ( handle ) {
+									xhr.onreadystatechange = jQuery.noop;
+									if ( xhrOnUnloadAbort ) {
+										delete xhrCallbacks[ handle ];
+									}
+								}
+
+								// If it's an abort
+								if ( isAbort ) {
+									// Abort it manually if needed
+									if ( xhr.readyState !== 4 ) {
+										xhr.abort();
+									}
+								} else {
+									status = xhr.status;
+									responseHeaders = xhr.getAllResponseHeaders();
+									responses = {};
+									xml = xhr.responseXML;
+
+									// Construct response list
+									if ( xml && xml.documentElement /* #4958 */ ) {
+										responses.xml = xml;
+									}
+									responses.text = xhr.responseText;
+
+									// Firefox throws an exception when accessing
+									// statusText for faulty cross-domain requests
+									try {
+										statusText = xhr.statusText;
+									} catch( e ) {
+										// We normalize with Webkit giving an empty statusText
+										statusText = "";
+									}
+
+									// Filter status for non standard behaviors
+
+									// If the request is local and we have data: assume a success
+									// (success with no data won't get notified, that's the best we
+									// can do given current implementations)
+									if ( !status && s.isLocal && !s.crossDomain ) {
+										status = responses.text ? 200 : 404;
+									// IE - #1450: sometimes returns 1223 when it should be 204
+									} else if ( status === 1223 ) {
+										status = 204;
+									}
+								}
+							}
+						} catch( firefoxAccessException ) {
+							if ( !isAbort ) {
+								complete( -1, firefoxAccessException );
+							}
+						}
+
+						// Call complete if needed
+						if ( responses ) {
+							complete( status, statusText, responses, responseHeaders );
+						}
+					};
+
+					// if we're in sync mode or it's in cache
+					// and has been retrieved directly (IE6 & IE7)
+					// we need to manually fire the callback
+					if ( !s.async || xhr.readyState === 4 ) {
+						callback();
+					} else {
+						handle = ++xhrId;
+						if ( xhrOnUnloadAbort ) {
+							// Create the active xhrs callbacks list if needed
+							// and attach the unload handler
+							if ( !xhrCallbacks ) {
+								xhrCallbacks = {};
+								jQuery( window ).unload( xhrOnUnloadAbort );
+							}
+							// Add to list of active xhrs callbacks
+							xhrCallbacks[ handle ] = callback;
+						}
+						xhr.onreadystatechange = callback;
+					}
+				},
+
+				abort: function() {
+					if ( callback ) {
+						callback(0,1);
+					}
+				}
+			};
+		}
+	});
+}
+
+
+
+
+var elemdisplay = {},
+	iframe, iframeDoc,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
+	timerId,
+	fxAttrs = [
+		// height animations
+		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
+		// width animations
+		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
+		// opacity animations
+		[ "opacity" ]
+	],
+	fxNow,
+	requestAnimationFrame = window.webkitRequestAnimationFrame ||
+	    window.mozRequestAnimationFrame ||
+	    window.oRequestAnimationFrame;
+
+jQuery.fn.extend({
+	show: function( speed, easing, callback ) {
+		var elem, display;
+
+		if ( speed || speed === 0 ) {
+			return this.animate( genFx("show", 3), speed, easing, callback);
+
+		} else {
+			for ( var i = 0, j = this.length; i < j; i++ ) {
+				elem = this[i];
+
+				if ( elem.style ) {
+					display = elem.style.display;
+
+					// Reset the inline display of this element to learn if it is
+					// being hidden by cascaded rules or not
+					if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
+						display = elem.style.display = "";
+					}
+
+					// Set elements which have been overridden with display: none
+					// in a stylesheet to whatever the default browser style is
+					// for such an element
+					if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
+						jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
+					}
+				}
+			}
+
+			// Set the display of most of the elements in a second loop
+			// to avoid the constant reflow
+			for ( i = 0; i < j; i++ ) {
+				elem = this[i];
+
+				if ( elem.style ) {
+					display = elem.style.display;
+
+					if ( display === "" || display === "none" ) {
+						elem.style.display = jQuery._data(elem, "olddisplay") || "";
+					}
+				}
+			}
+
+			return this;
+		}
+	},
+
+	hide: function( speed, easing, callback ) {
+		if ( speed || speed === 0 ) {
+			return this.animate( genFx("hide", 3), speed, easing, callback);
+
+		} else {
+			for ( var i = 0, j = this.length; i < j; i++ ) {
+				if ( this[i].style ) {
+					var display = jQuery.css( this[i], "display" );
+
+					if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) {
+						jQuery._data( this[i], "olddisplay", display );
+					}
+				}
+			}
+
+			// Set the display of the elements in a second loop
+			// to avoid the constant reflow
+			for ( i = 0; i < j; i++ ) {
+				if ( this[i].style ) {
+					this[i].style.display = "none";
+				}
+			}
+
+			return this;
+		}
+	},
+
+	// Save the old toggle function
+	_toggle: jQuery.fn.toggle,
+
+	toggle: function( fn, fn2, callback ) {
+		var bool = typeof fn === "boolean";
+
+		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
+			this._toggle.apply( this, arguments );
+
+		} else if ( fn == null || bool ) {
+			this.each(function() {
+				var state = bool ? fn : jQuery(this).is(":hidden");
+				jQuery(this)[ state ? "show" : "hide" ]();
+			});
+
+		} else {
+			this.animate(genFx("toggle", 3), fn, fn2, callback);
+		}
+
+		return this;
+	},
+
+	fadeTo: function( speed, to, easing, callback ) {
+		return this.filter(":hidden").css("opacity", 0).show().end()
+					.animate({opacity: to}, speed, easing, callback);
+	},
+
+	animate: function( prop, speed, easing, callback ) {
+		var optall = jQuery.speed(speed, easing, callback);
+
+		if ( jQuery.isEmptyObject( prop ) ) {
+			return this.each( optall.complete, [ false ] );
+		}
+
+		// Do not change referenced properties as per-property easing will be lost
+		prop = jQuery.extend( {}, prop );
+
+		return this[ optall.queue === false ? "each" : "queue" ](function() {
+			// XXX 'this' does not always have a nodeName when running the
+			// test suite
+
+			if ( optall.queue === false ) {
+				jQuery._mark( this );
+			}
+
+			var opt = jQuery.extend( {}, optall ),
+				isElement = this.nodeType === 1,
+				hidden = isElement && jQuery(this).is(":hidden"),
+				name, val, p,
+				display, e,
+				parts, start, end, unit;
+
+			// will store per property easing and be used to determine when an animation is complete
+			opt.animatedProperties = {};
+
+			for ( p in prop ) {
+
+				// property name normalization
+				name = jQuery.camelCase( p );
+				if ( p !== name ) {
+					prop[ name ] = prop[ p ];
+					delete prop[ p ];
+				}
+
+				val = prop[ name ];
+
+				// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
+				if ( jQuery.isArray( val ) ) {
+					opt.animatedProperties[ name ] = val[ 1 ];
+					val = prop[ name ] = val[ 0 ];
+				} else {
+					opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
+				}
+
+				if ( val === "hide" && hidden || val === "show" && !hidden ) {
+					return opt.complete.call( this );
+				}
+
+				if ( isElement && ( name === "height" || name === "width" ) ) {
+					// Make sure that nothing sneaks out
+					// Record all 3 overflow attributes because IE does not
+					// change the overflow attribute when overflowX and
+					// overflowY are set to the same value
+					opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
+
+					// Set display property to inline-block for height/width
+					// animations on inline elements that are having width/height
+					// animated
+					if ( jQuery.css( this, "display" ) === "inline" &&
+							jQuery.css( this, "float" ) === "none" ) {
+						if ( !jQuery.support.inlineBlockNeedsLayout ) {
+							this.style.display = "inline-block";
+
+						} else {
+							display = defaultDisplay( this.nodeName );
+
+							// inline-level elements accept inline-block;
+							// block-level elements need to be inline with layout
+							if ( display === "inline" ) {
+								this.style.display = "inline-block";
+
+							} else {
+								this.style.display = "inline";
+								this.style.zoom = 1;
+							}
+						}
+					}
+				}
+			}
+
+			if ( opt.overflow != null ) {
+				this.style.overflow = "hidden";
+			}
+
+			for ( p in prop ) {
+				e = new jQuery.fx( this, opt, p );
+				val = prop[ p ];
+
+				if ( rfxtypes.test(val) ) {
+					e[ val === "toggle" ? hidden ? "show" : "hide" : val ]();
+
+				} else {
+					parts = rfxnum.exec( val );
+					start = e.cur();
+
+					if ( parts ) {
+						end = parseFloat( parts[2] );
+						unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
+
+						// We need to compute starting value
+						if ( unit !== "px" ) {
+							jQuery.style( this, p, (end || 1) + unit);
+							start = ((end || 1) / e.cur()) * start;
+							jQuery.style( this, p, start + unit);
+						}
+
+						// If a +=/-= token was provided, we're doing a relative animation
+						if ( parts[1] ) {
+							end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
+						}
+
+						e.custom( start, end, unit );
+
+					} else {
+						e.custom( start, val, "" );
+					}
+				}
+			}
+
+			// For JS strict compliance
+			return true;
+		});
+	},
+
+	stop: function( clearQueue, gotoEnd ) {
+		if ( clearQueue ) {
+			this.queue([]);
+		}
+
+		this.each(function() {
+			var timers = jQuery.timers,
+				i = timers.length;
+			// clear marker counters if we know they won't be
+			if ( !gotoEnd ) {
+				jQuery._unmark( true, this );
+			}
+			while ( i-- ) {
+				if ( timers[i].elem === this ) {
+					if (gotoEnd) {
+						// force the next step to be the last
+						timers[i](true);
+					}
+
+					timers.splice(i, 1);
+				}
+			}
+		});
+
+		// start the next in the queue if the last step wasn't forced
+		if ( !gotoEnd ) {
+			this.dequeue();
+		}
+
+		return this;
+	}
+
+});
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	setTimeout( clearFxNow, 0 );
+	return ( fxNow = jQuery.now() );
+}
+
+function clearFxNow() {
+	fxNow = undefined;
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, num ) {
+	var obj = {};
+
+	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
+		obj[ this ] = type;
+	});
+
+	return obj;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+	slideDown: genFx("show", 1),
+	slideUp: genFx("hide", 1),
+	slideToggle: genFx("toggle", 1),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+});
+
+jQuery.extend({
+	speed: function( speed, easing, fn ) {
+		var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
+			complete: fn || !fn && easing ||
+				jQuery.isFunction( speed ) && speed,
+			duration: speed,
+			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
+		};
+
+		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
+
+		// Queueing
+		opt.old = opt.complete;
+		opt.complete = function( noUnmark ) {
+			if ( opt.queue !== false ) {
+				jQuery.dequeue( this );
+			} else if ( noUnmark !== false ) {
+				jQuery._unmark( this );
+			}
+
+			if ( jQuery.isFunction( opt.old ) ) {
+				opt.old.call( this );
+			}
+		};
+
+		return opt;
+	},
+
+	easing: {
+		linear: function( p, n, firstNum, diff ) {
+			return firstNum + diff * p;
+		},
+		swing: function( p, n, firstNum, diff ) {
+			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
+		}
+	},
+
+	timers: [],
+
+	fx: function( elem, options, prop ) {
+		this.options = options;
+		this.elem = elem;
+		this.prop = prop;
+
+		options.orig = options.orig || {};
+	}
+
+});
+
+jQuery.fx.prototype = {
+	// Simple function for setting a style value
+	update: function() {
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
+	},
+
+	// Get the current size
+	cur: function() {
+		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
+			return this.elem[ this.prop ];
+		}
+
+		var parsed,
+			r = jQuery.css( this.elem, this.prop );
+		// Empty strings, null, undefined and "auto" are converted to 0,
+		// complex values such as "rotate(1rad)" are returned as is,
+		// simple values such as "10px" are parsed to Float.
+		return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
+	},
+
+	// Start an animation from one number to another
+	custom: function( from, to, unit ) {
+		var self = this,
+			fx = jQuery.fx,
+			raf;
+
+		this.startTime = fxNow || createFxNow();
+		this.start = from;
+		this.end = to;
+		this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
+		this.now = this.start;
+		this.pos = this.state = 0;
+
+		function t( gotoEnd ) {
+			return self.step(gotoEnd);
+		}
+
+		t.elem = this.elem;
+
+		if ( t() && jQuery.timers.push(t) && !timerId ) {
+			// Use requestAnimationFrame instead of setInterval if available
+			if ( requestAnimationFrame ) {
+				timerId = 1;
+				raf = function() {
+					// When timerId gets set to null at any point, this stops
+					if ( timerId ) {
+						requestAnimationFrame( raf );
+						fx.tick();
+					}
+				};
+				requestAnimationFrame( raf );
+			} else {
+				timerId = setInterval( fx.tick, fx.interval );
+			}
+		}
+	},
+
+	// Simple 'show' function
+	show: function() {
+		// Remember where we started, so that we can go back to it later
+		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+		this.options.show = true;
+
+		// Begin the animation
+		// Make sure that we start at a small width/height to avoid any
+		// flash of content
+		this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
+
+		// Start by showing the element
+		jQuery( this.elem ).show();
+	},
+
+	// Simple 'hide' function
+	hide: function() {
+		// Remember where we started, so that we can go back to it later
+		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+		this.options.hide = true;
+
+		// Begin the animation
+		this.custom(this.cur(), 0);
+	},
+
+	// Each step of an animation
+	step: function( gotoEnd ) {
+		var t = fxNow || createFxNow(),
+			done = true,
+			elem = this.elem,
+			options = this.options,
+			i, n;
+
+		if ( gotoEnd || t >= options.duration + this.startTime ) {
+			this.now = this.end;
+			this.pos = this.state = 1;
+			this.update();
+
+			options.animatedProperties[ this.prop ] = true;
+
+			for ( i in options.animatedProperties ) {
+				if ( options.animatedProperties[i] !== true ) {
+					done = false;
+				}
+			}
+
+			if ( done ) {
+				// Reset the overflow
+				if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
+
+					jQuery.each( [ "", "X", "Y" ], function (index, value) {
+						elem.style[ "overflow" + value ] = options.overflow[index];
+					});
+				}
+
+				// Hide the element if the "hide" operation was done
+				if ( options.hide ) {
+					jQuery(elem).hide();
+				}
+
+				// Reset the properties, if the item has been hidden or shown
+				if ( options.hide || options.show ) {
+					for ( var p in options.animatedProperties ) {
+						jQuery.style( elem, p, options.orig[p] );
+					}
+				}
+
+				// Execute the complete function
+				options.complete.call( elem );
+			}
+
+			return false;
+
+		} else {
+			// classical easing cannot be used with an Infinity duration
+			if ( options.duration == Infinity ) {
+				this.now = t;
+			} else {
+				n = t - this.startTime;
+				this.state = n / options.duration;
+
+				// Perform the easing function, defaults to swing
+				this.pos = jQuery.easing[ options.animatedProperties[ this.prop ] ]( this.state, n, 0, 1, options.duration );
+				this.now = this.start + ((this.end - this.start) * this.pos);
+			}
+			// Perform the next step of the animation
+			this.update();
+		}
+
+		return true;
+	}
+};
+
+jQuery.extend( jQuery.fx, {
+	tick: function() {
+		for ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) {
+			if ( !timers[i]() ) {
+				timers.splice(i--, 1);
+			}
+		}
+
+		if ( !timers.length ) {
+			jQuery.fx.stop();
+		}
+	},
+
+	interval: 13,
+
+	stop: function() {
+		clearInterval( timerId );
+		timerId = null;
+	},
+
+	speeds: {
+		slow: 600,
+		fast: 200,
+		// Default speed
+		_default: 400
+	},
+
+	step: {
+		opacity: function( fx ) {
+			jQuery.style( fx.elem, "opacity", fx.now );
+		},
+
+		_default: function( fx ) {
+			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
+				fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
+			} else {
+				fx.elem[ fx.prop ] = fx.now;
+			}
+		}
+	}
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.animated = function( elem ) {
+		return jQuery.grep(jQuery.timers, function( fn ) {
+			return elem === fn.elem;
+		}).length;
+	};
+}
+
+// Try to restore the default display value of an element
+function defaultDisplay( nodeName ) {
+
+	if ( !elemdisplay[ nodeName ] ) {
+
+		var elem = jQuery( "<" + nodeName + ">" ).appendTo( "body" ),
+			display = elem.css( "display" );
+
+		elem.remove();
+
+		// If the simple way fails,
+		// get element's real default display by attaching it to a temp iframe
+		if ( display === "none" || display === "" ) {
+			// No iframe to use yet, so create it
+			if ( !iframe ) {
+				iframe = document.createElement( "iframe" );
+				iframe.frameBorder = iframe.width = iframe.height = 0;
+			}
+
+			document.body.appendChild( iframe );
+
+			// Create a cacheable copy of the iframe document on first call.
+			// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake html
+			// document to it, Webkit & Firefox won't allow reusing the iframe document
+			if ( !iframeDoc || !iframe.createElement ) {
+				iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+				iframeDoc.write( "<!doctype><html><body></body></html>" );
+			}
+
+			elem = iframeDoc.createElement( nodeName );
+
+			iframeDoc.body.appendChild( elem );
+
+			display = jQuery.css( elem, "display" );
+
+			document.body.removeChild( iframe );
+		}
+
+		// Store the correct default display
+		elemdisplay[ nodeName ] = display;
+	}
+
+	return elemdisplay[ nodeName ];
+}
+
+
+
+
+var rtable = /^t(?:able|d|h)$/i,
+	rroot = /^(?:body|html)$/i;
+
+if ( "getBoundingClientRect" in document.documentElement ) {
+	jQuery.fn.offset = function( options ) {
+		var elem = this[0], box;
+
+		if ( options ) {
+			return this.each(function( i ) {
+				jQuery.offset.setOffset( this, options, i );
+			});
+		}
+
+		if ( !elem || !elem.ownerDocument ) {
+			return null;
+		}
+
+		if ( elem === elem.ownerDocument.body ) {
+			return jQuery.offset.bodyOffset( elem );
+		}
+
+		try {
+			box = elem.getBoundingClientRect();
+		} catch(e) {}
+
+		var doc = elem.ownerDocument,
+			docElem = doc.documentElement;
+
+		// Make sure we're not dealing with a disconnected DOM node
+		if ( !box || !jQuery.contains( docElem, elem ) ) {
+			return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
+		}
+
+		var body = doc.body,
+			win = getWindow(doc),
+			clientTop  = docElem.clientTop  || body.clientTop  || 0,
+			clientLeft = docElem.clientLeft || body.clientLeft || 0,
+			scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
+			scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
+			top  = box.top  + scrollTop  - clientTop,
+			left = box.left + scrollLeft - clientLeft;
+
+		return { top: top, left: left };
+	};
+
+} else {
+	jQuery.fn.offset = function( options ) {
+		var elem = this[0];
+
+		if ( options ) {
+			return this.each(function( i ) {
+				jQuery.offset.setOffset( this, options, i );
+			});
+		}
+
+		if ( !elem || !elem.ownerDocument ) {
+			return null;
+		}
+
+		if ( elem === elem.ownerDocument.body ) {
+			return jQuery.offset.bodyOffset( elem );
+		}
+
+		jQuery.offset.initialize();
+
+		var computedStyle,
+			offsetParent = elem.offsetParent,
+			prevOffsetParent = elem,
+			doc = elem.ownerDocument,
+			docElem = doc.documentElement,
+			body = doc.body,
+			defaultView = doc.defaultView,
+			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
+			top = elem.offsetTop,
+			left = elem.offsetLeft;
+
+		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
+			if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+				break;
+			}
+
+			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
+			top  -= elem.scrollTop;
+			left -= elem.scrollLeft;
+
+			if ( elem === offsetParent ) {
+				top  += elem.offsetTop;
+				left += elem.offsetLeft;
+
+				if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
+					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+					left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+				}
+
+				prevOffsetParent = offsetParent;
+				offsetParent = elem.offsetParent;
+			}
+
+			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
+				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+				left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+			}
+
+			prevComputedStyle = computedStyle;
+		}
+
+		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
+			top  += body.offsetTop;
+			left += body.offsetLeft;
+		}
+
+		if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+			top  += Math.max( docElem.scrollTop, body.scrollTop );
+			left += Math.max( docElem.scrollLeft, body.scrollLeft );
+		}
+
+		return { top: top, left: left };
+	};
+}
+
+jQuery.offset = {
+	initialize: function() {
+		var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0,
+			html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
+
+		jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
+
+		container.innerHTML = html;
+		body.insertBefore( container, body.firstChild );
+		innerDiv = container.firstChild;
+		checkDiv = innerDiv.firstChild;
+		td = innerDiv.nextSibling.firstChild.firstChild;
+
+		this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
+		this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
+
+		checkDiv.style.position = "fixed";
+		checkDiv.style.top = "20px";
+
+		// safari subtracts parent border width here which is 5px
+		this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
+		checkDiv.style.position = checkDiv.style.top = "";
+
+		innerDiv.style.overflow = "hidden";
+		innerDiv.style.position = "relative";
+
+		this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
+
+		this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
+
+		body.removeChild( container );
+		jQuery.offset.initialize = jQuery.noop;
+	},
+
+	bodyOffset: function( body ) {
+		var top = body.offsetTop,
+			left = body.offsetLeft;
+
+		jQuery.offset.initialize();
+
+		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
+			top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
+			left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
+		}
+
+		return { top: top, left: left };
+	},
+
+	setOffset: function( elem, options, i ) {
+		var position = jQuery.css( elem, "position" );
+
+		// set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		var curElem = jQuery( elem ),
+			curOffset = curElem.offset(),
+			curCSSTop = jQuery.css( elem, "top" ),
+			curCSSLeft = jQuery.css( elem, "left" ),
+			calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+			props = {}, curPosition = {}, curTop, curLeft;
+
+		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+			options = options.call( elem, i, curOffset );
+		}
+
+		if (options.top != null) {
+			props.top = (options.top - curOffset.top) + curTop;
+		}
+		if (options.left != null) {
+			props.left = (options.left - curOffset.left) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+
+jQuery.fn.extend({
+	position: function() {
+		if ( !this[0] ) {
+			return null;
+		}
+
+		var elem = this[0],
+
+		// Get *real* offsetParent
+		offsetParent = this.offsetParent(),
+
+		// Get correct offsets
+		offset       = this.offset(),
+		parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+
+		// Subtract element margins
+		// note: when an element has margin: auto the offsetLeft and marginLeft
+		// are the same in Safari causing offset.left to incorrectly be 0
+		offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
+		offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+
+		// Add offsetParent borders
+		parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
+		parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
+
+		// Subtract the two offsets
+		return {
+			top:  offset.top  - parentOffset.top,
+			left: offset.left - parentOffset.left
+		};
+	},
+
+	offsetParent: function() {
+		return this.map(function() {
+			var offsetParent = this.offsetParent || document.body;
+			while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+			return offsetParent;
+		});
+	}
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( ["Left", "Top"], function( i, name ) {
+	var method = "scroll" + name;
+
+	jQuery.fn[ method ] = function( val ) {
+		var elem, win;
+
+		if ( val === undefined ) {
+			elem = this[ 0 ];
+
+			if ( !elem ) {
+				return null;
+			}
+
+			win = getWindow( elem );
+
+			// Return the scroll offset
+			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
+				jQuery.support.boxModel && win.document.documentElement[ method ] ||
+					win.document.body[ method ] :
+				elem[ method ];
+		}
+
+		// Set the scroll offset
+		return this.each(function() {
+			win = getWindow( this );
+
+			if ( win ) {
+				win.scrollTo(
+					!i ? val : jQuery( win ).scrollLeft(),
+					 i ? val : jQuery( win ).scrollTop()
+				);
+
+			} else {
+				this[ method ] = val;
+			}
+		});
+	};
+});
+
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ?
+		elem :
+		elem.nodeType === 9 ?
+			elem.defaultView || elem.parentWindow :
+			false;
+}
+
+
+
+
+// Create innerHeight, innerWidth, outerHeight and outerWidth methods
+jQuery.each([ "Height", "Width" ], function( i, name ) {
+
+	var type = name.toLowerCase();
+
+	// innerHeight and innerWidth
+	jQuery.fn["inner" + name] = function() {
+		return this[0] ?
+			parseFloat( jQuery.css( this[0], type, "padding" ) ) :
+			null;
+	};
+
+	// outerHeight and outerWidth
+	jQuery.fn["outer" + name] = function( margin ) {
+		return this[0] ?
+			parseFloat( jQuery.css( this[0], type, margin ? "margin" : "border" ) ) :
+			null;
+	};
+
+	jQuery.fn[ type ] = function( size ) {
+		// Get window width or height
+		var elem = this[0];
+		if ( !elem ) {
+			return size == null ? null : this;
+		}
+
+		if ( jQuery.isFunction( size ) ) {
+			return this.each(function( i ) {
+				var self = jQuery( this );
+				self[ type ]( size.call( this, i, self[ type ]() ) );
+			});
+		}
+
+		if ( jQuery.isWindow( elem ) ) {
+			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
+			// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
+			var docElemProp = elem.document.documentElement[ "client" + name ];
+			return elem.document.compatMode === "CSS1Compat" && docElemProp ||
+				elem.document.body[ "client" + name ] || docElemProp;
+
+		// Get document width or height
+		} else if ( elem.nodeType === 9 ) {
+			// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
+			return Math.max(
+				elem.documentElement["client" + name],
+				elem.body["scroll" + name], elem.documentElement["scroll" + name],
+				elem.body["offset" + name], elem.documentElement["offset" + name]
+			);
+
+		// Get or set width or height on the element
+		} else if ( size === undefined ) {
+			var orig = jQuery.css( elem, type ),
+				ret = parseFloat( orig );
+
+			return jQuery.isNaN( ret ) ? orig : ret;
+
+		// Set the width or height on the element (default to pixels if value is unitless)
+		} else {
+			return this.css( type, typeof size === "string" ? size : size + "px" );
+		}
+	};
+
+});
+
+
+window.jQuery = window.$ = jQuery;
+})(window);
+(function() {
+
+	var joey = this.joey = function joey(elementDef, parentNode) {
+		return createNode( elementDef, parentNode, parentNode ? parentNode.ownerDocument : this.document );
+	};
+
+	var shortcuts = joey.shortcuts = {
+		"text" : "textContent",
+		"cls" : "className"
+	};
+
+	var plugins = joey.plugins = [
+		function( obj, context ) {
+			if( typeof obj === 'string' ) {
+				return context.createTextNode( obj );
+			}
+		},
+		function( obj, context ) {
+			if( "tag" in obj ) {
+				var el = context.createElement( obj.tag );
+				for( var attr in obj ) {
+					addAttr( el, attr, obj[ attr ], context );
+				}
+				return el;
+			}
+		}
+	];
+
+	function addAttr( el, attr, value, context ) {
+		attr = shortcuts[attr] || attr;
+		if( attr === 'children' ) {
+			for( var i = 0; i < value.length; i++) {
+				createNode( value[i], el, context );
+			}
+		} else if( attr === 'style' || attr === 'dataset' ) {
+			for( var prop in value ) {
+				el[ attr ][ prop ] = value[ prop ];
+			}
+		} else if( attr.indexOf("on") === 0 ) {
+			el.addEventListener( attr.substr(2), value, false );
+		} else if( value !== undefined ) {
+			el[ attr ] = value;
+		}
+	}
+
+	function createNode( obj, parent, context ) {
+		var el;
+		if( obj != null ) {
+			plugins.some( function( plug ) {
+				return ( el = plug( obj, context ) );
+			});
+			parent && parent.appendChild( el );
+			return el;
+		}
+	}
+
+}());
+
+(function($, document) {
+
+	var create = $.create = (function() {
+
+		function addAttrs( el, obj, context ) {
+			for( var attr in obj ){
+				switch( attr ) {
+				case 'tag' :
+					break;
+				case 'html' :
+					el.innerHTML = obj[ attr ];
+					break;
+				case 'css' :
+					for( var style in obj.css ) {
+						$.attr( el.style, style, obj.css[ style ] );
+					}
+					break;
+				case 'text' : case 'child' : case 'children' :
+					createNode( obj[attr], el, context );
+					break;
+				case 'cls' :
+					el.className = obj[attr];
+					break;
+				case 'data' :
+					for( var data in obj.data ) {
+						$.data( el, data, obj.data[data] );
+					}
+					break;
+				default :
+					if( attr.indexOf("on") === 0 && $.isFunction(obj[attr]) ) {
+						$.event.add( el, attr.substr(2).replace(/^[A-Z]/, function(a) { return a.toLowerCase(); }), obj[attr] );
+					} else {
+						$.attr( el, attr, obj[attr] );
+					}
+				}
+			}
+		}
+
+		function createNode(obj, parent, context) {
+			if(obj && ($.isArray(obj) || obj instanceof $)) {
+				for(var ret = [], i = 0; i < obj.length; i++) {
+					var newNode = createNode(obj[i], parent, context);
+					if(newNode) {
+						ret.push(newNode);
+					}
+				}
+				return ret;
+			}
+			var el;
+			if(typeof(obj) === 'string') {
+				el = context.createTextNode( obj );
+			} else if(!obj) {
+				return undefined;
+			} else if(obj.nodeType === 1) {
+				el = obj;
+			} else if( obj instanceof app.ui.AbstractWidget ) {
+				el = obj.el[0];
+			} else {
+				el = context.createElement( obj.tag || 'DIV' );
+				addAttrs(el, obj, context);
+			}
+			if(parent){ parent.appendChild(el); }
+			return el;
+		}
+
+		return function(elementDef, parentNode) {
+			return createNode(elementDef, parentNode, (parentNode && parentNode.ownerDocument) || document);
+		};
+		
+	})();
+	
+
+	// inject create into jquery internals so object definitions are treated as first class constructors (overrides non-public methods)
+	var clean = $.clean,
+		init = $.fn.init;
+
+	$.clean = function( elems, context, fragment, scripts ) {
+		for(var i = 0; i < elems.length; i++) {
+			if( elems[i].tag || elems[i] instanceof app.ui.AbstractWidget ) {
+				elems[i] = create( elems[i], null, context );
+			}
+		}
+		return clean( elems, context, fragment, scripts );
+	};
+
+	$.fn.init = function( selector, context, rootjQuery ) {
+		if ( selector && ( selector.tag || selector instanceof app.ui.AbstractWidget )) {
+			selector = create( selector, null, context );
+		}
+		return init.call( this, selector, context, rootjQuery );
+	};
+
+	$.fn.init.prototype = $.fn;
+
+})(jQuery, window.document);
+
+
+/*!
+ * Raphael 1.5.2 - JavaScript Vector Library
+ *
+ * Copyright (c) 2010 Dmitry Baranovskiy (http://raphaeljs.com)
+ * Licensed under the MIT (http://raphaeljs.com/license.html) license.
+ * from fork at git@github.com:mobz/g.raphael.git
+ */
+(function () {
+    function R() {
+        if (R.is(arguments[0], array)) {
+            var a = arguments[0],
+                cnv = create[apply](R, a.splice(0, 3 + R.is(a[0], nu))),
+                res = cnv.set();
+            for (var i = 0, ii = a[length]; i < ii; i++) {
+                var j = a[i] || {};
+                elements[has](j.type) && res[push](cnv[j.type]().attr(j));
+            }
+            return res;
+        }
+        return create[apply](R, arguments);
+    }
+    R.version = "1.5.2";
+    var separator = /[, ]+/,
+        elements = {circle: 1, rect: 1, path: 1, ellipse: 1, text: 1, image: 1},
+        formatrg = /\{(\d+)\}/g,
+        proto = "prototype",
+        has = "hasOwnProperty",
+        doc = document,
+        win = window,
+        oldRaphael = {
+            was: Object[proto][has].call(win, "Raphael"),
+            is: win.Raphael
+        },
+        Paper = function () {
+            this.customAttributes = {};
+        },
+        paperproto,
+        appendChild = "appendChild",
+        apply = "apply",
+        concat = "concat",
+        supportsTouch = "createTouch" in doc,
+        E = "",
+        S = " ",
+        Str = String,
+        split = "split",
+        events = "click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend orientationchange touchcancel gesturestart gesturechange gestureend"[split](S),
+        touchMap = {
+            mousedown: "touchstart",
+            mousemove: "touchmove",
+            mouseup: "touchend"
+        },
+        join = "join",
+        length = "length",
+        lowerCase = Str[proto].toLowerCase,
+        math = Math,
+        mmax = math.max,
+        mmin = math.min,
+        abs = math.abs,
+        pow = math.pow,
+        PI = math.PI,
+        nu = "number",
+        string = "string",
+        array = "array",
+        toString = "toString",
+        fillString = "fill",
+        objectToString = Object[proto][toString],
+        paper = {},
+        push = "push",
+        ISURL = /^url\(['"]?([^\)]+?)['"]?\)$/i,
+        colourRegExp = /^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i,
+        isnan = {"NaN": 1, "Infinity": 1, "-Infinity": 1},
+        bezierrg = /^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/,
+        round = math.round,
+        setAttribute = "setAttribute",
+        toFloat = parseFloat,
+        toInt = parseInt,
+        ms = " progid:DXImageTransform.Microsoft",
+        upperCase = Str[proto].toUpperCase,
+        availableAttrs = {blur: 0, "clip-rect": "0 0 1e9 1e9", cursor: "default", cx: 0, cy: 0, fill: "#fff", "fill-opacity": 1, font: '10px "Arial"', "font-family": '"Arial"', "font-size": "10", "font-style": "normal", "font-weight": 400, gradient: 0, height: 0, href: "http://raphaeljs.com/", opacity: 1, path: "M0,0", r: 0, rotation: 0, rx: 0, ry: 0, scale: "1 1", src: "", stroke: "#000", "stroke-dasharray": "", "stroke-linecap": "butt", "stroke-linejoin": "butt", "stroke-miterlimit": 0, "stroke-opacity": 1, "stroke-width": 1, target: "_blank", "text-anchor": "middle", title: "Raphael", translation: "0 0", width: 0, x: 0, y: 0},
+        availableAnimAttrs = {along: "along", blur: nu, "clip-rect": "csv", cx: nu, cy: nu, fill: "colour", "fill-opacity": nu, "font-size": nu, height: nu, opacity: nu, path: "path", r: nu, rotation: "csv", rx: nu, ry: nu, scale: "csv", stroke: "colour", "stroke-opacity": nu, "stroke-width": nu, translation: "csv", width: nu, x: nu, y: nu},
+        rp = "replace",
+        animKeyFrames= /^(from|to|\d+%?)$/,
+        commaSpaces = /\s*,\s*/,
+        hsrg = {hs: 1, rg: 1},
+        p2s = /,?([achlmqrstvxz]),?/gi,
+        pathCommand = /([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig,
+        pathValues = /(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig,
+        radial_gradient = /^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/,
+        sortByKey = function (a, b) {
+            return a.key - b.key;
+        };
+
+    R.type = (win.SVGAngle || doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") ? "SVG" : "VML");
+    if (R.type == "VML") {
+        var d = doc.createElement("div"),
+            b;
+        d.innerHTML = '<v:shape adj="1"/>';
+        b = d.firstChild;
+        b.style.behavior = "url(#default#VML)";
+        if (!(b && typeof b.adj == "object")) {
+            return R.type = null;
+        }
+        d = null;
+    }
+    R.svg = !(R.vml = R.type == "VML");
+    Paper[proto] = R[proto];
+    paperproto = Paper[proto];
+    R._id = 0;
+    R._oid = 0;
+    R.fn = {};
+    R.is = function (o, type) {
+        type = lowerCase.call(type);
+        if (type == "finite") {
+            return !isnan[has](+o);
+        }
+        return  (type == "null" && o === null) ||
+                (type == typeof o) ||
+                (type == "object" && o === Object(o)) ||
+                (type == "array" && Array.isArray && Array.isArray(o)) ||
+                objectToString.call(o).slice(8, -1).toLowerCase() == type;
+    };
+    R.angle = function (x1, y1, x2, y2, x3, y3) {
+        if (x3 == null) {
+            var x = x1 - x2,
+                y = y1 - y2;
+            if (!x && !y) {
+                return 0;
+            }
+            return ((x < 0) * 180 + math.atan(-y / -x) * 180 / PI + 360) % 360;
+        } else {
+            return R.angle(x1, y1, x3, y3) - R.angle(x2, y2, x3, y3);
+        }
+    };
+    R.rad = function (deg) {
+        return deg % 360 * PI / 180;
+    };
+    R.deg = function (rad) {
+        return rad * 180 / PI % 360;
+    };
+    R.snapTo = function (values, value, tolerance) {
+        tolerance = R.is(tolerance, "finite") ? tolerance : 10;
+        if (R.is(values, array)) {
+            var i = values.length;
+            while (i--) if (abs(values[i] - value) <= tolerance) {
+                return values[i];
+            }
+        } else {
+            values = +values;
+            var rem = value % values;
+            if (rem < tolerance) {
+                return value - rem;
+            }
+            if (rem > values - tolerance) {
+                return value - rem + values;
+            }
+        }
+        return value;
+    };
+    function createUUID() {
+        // http://www.ietf.org/rfc/rfc4122.txt
+        var s = [],
+            i = 0;
+        for (; i < 32; i++) {
+            s[i] = (~~(math.random() * 16))[toString](16);
+        }
+        s[12] = 4;  // bits 12-15 of the time_hi_and_version field to 0010
+        s[16] = ((s[16] & 3) | 8)[toString](16);  // bits 6-7 of the clock_seq_hi_and_reserved to 01
+        return "r-" + s[join]("");
+    }
+
+    R.setWindow = function (newwin) {
+        win = newwin;
+        doc = win.document;
+    };
+    // colour utilities
+    var toHex = function (color) {
+        if (R.vml) {
+            // http://dean.edwards.name/weblog/2009/10/convert-any-colour-value-to-hex-in-msie/
+            var trim = /^\s+|\s+$/g;
+            var bod;
+            try {
+                var docum = new ActiveXObject("htmlfile");
+                docum.write("<body>");
+                docum.close();
+                bod = docum.body;
+            } catch(e) {
+                bod = createPopup().document.body;
+            }
+            var range = bod.createTextRange();
+            toHex = cacher(function (color) {
+                try {
+                    bod.style.color = Str(color)[rp](trim, E);
+                    var value = range.queryCommandValue("ForeColor");
+                    value = ((value & 255) << 16) | (value & 65280) | ((value & 16711680) >>> 16);
+                    return "#" + ("000000" + value[toString](16)).slice(-6);
+                } catch(e) {
+                    return "none";
+                }
+            });
+        } else {
+            var i = doc.createElement("i");
+            i.title = "Rapha\xebl Colour Picker";
+            i.style.display = "none";
+            doc.body[appendChild](i);
+            toHex = cacher(function (color) {
+                i.style.color = color;
+                return doc.defaultView.getComputedStyle(i, E).getPropertyValue("color");
+            });
+        }
+        return toHex(color);
+    },
+    hsbtoString = function () {
+        return "hsb(" + [this.h, this.s, this.b] + ")";
+    },
+    hsltoString = function () {
+        return "hsl(" + [this.h, this.s, this.l] + ")";
+    },
+    rgbtoString = function () {
+        return this.hex;
+    };
+    R.hsb2rgb = function (h, s, b, o) {
+        if (R.is(h, "object") && "h" in h && "s" in h && "b" in h) {
+            b = h.b;
+            s = h.s;
+            h = h.h;
+            o = h.o;
+        }
+        return R.hsl2rgb(h, s, b / 2, o);
+    };
+    R.hsl2rgb = function (h, s, l, o) {
+        if (R.is(h, "object") && "h" in h && "s" in h && "l" in h) {
+            l = h.l;
+            s = h.s;
+            h = h.h;
+        }
+        if (h > 1 || s > 1 || l > 1) {
+            h /= 360;
+            s /= 100;
+            l /= 100;
+        }
+        var rgb = {},
+            channels = ["r", "g", "b"],
+            t2, t1, t3, r, g, b;
+        if (!s) {
+            rgb = {
+                r: l,
+                g: l,
+                b: l
+            };
+        } else {
+            if (l < .5) {
+                t2 = l * (1 + s);
+            } else {
+                t2 = l + s - l * s;
+            }
+            t1 = 2 * l - t2;
+            for (var i = 0; i < 3; i++) {
+                t3 = h + 1 / 3 * -(i - 1);
+                t3 < 0 && t3++;
+                t3 > 1 && t3--;
+                if (t3 * 6 < 1) {
+                    rgb[channels[i]] = t1 + (t2 - t1) * 6 * t3;
+                } else if (t3 * 2 < 1) {
+                    rgb[channels[i]] = t2;
+                } else if (t3 * 3 < 2) {
+                    rgb[channels[i]] = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
+                } else {
+                    rgb[channels[i]] = t1;
+                }
+            }
+        }
+        rgb.r *= 255;
+        rgb.g *= 255;
+        rgb.b *= 255;
+        rgb.hex = "#" + (16777216 | rgb.b | (rgb.g << 8) | (rgb.r << 16)).toString(16).slice(1);
+        R.is(o, "finite") && (rgb.opacity = o);
+        rgb.toString = rgbtoString;
+        return rgb;
+    };
+    R.rgb2hsb = function (red, green, blue) {
+        if (green == null && R.is(red, "object") && "r" in red && "g" in red && "b" in red) {
+            blue = red.b;
+            green = red.g;
+            red = red.r;
+        }
+        if (green == null && R.is(red, string)) {
+            var clr = R.getRGB(red);
+            red = clr.r;
+            green = clr.g;
+            blue = clr.b;
+        }
+        if (red > 1 || green > 1 || blue > 1) {
+            red /= 255;
+            green /= 255;
+            blue /= 255;
+        }
+        var max = mmax(red, green, blue),
+            min = mmin(red, green, blue),
+            hue,
+            saturation,
+            brightness = max;
+        if (min == max) {
+            return {h: 0, s: 0, b: max, toString: hsbtoString};
+        } else {
+            var delta = (max - min);
+            saturation = delta / max;
+            if (red == max) {
+                hue = (green - blue) / delta;
+            } else if (green == max) {
+                hue = 2 + ((blue - red) / delta);
+            } else {
+                hue = 4 + ((red - green) / delta);
+            }
+            hue /= 6;
+            hue < 0 && hue++;
+            hue > 1 && hue--;
+        }
+        return {h: hue, s: saturation, b: brightness, toString: hsbtoString};
+    };
+    R.rgb2hsl = function (red, green, blue) {
+        if (green == null && R.is(red, "object") && "r" in red && "g" in red && "b" in red) {
+            blue = red.b;
+            green = red.g;
+            red = red.r;
+        }
+        if (green == null && R.is(red, string)) {
+            var clr = R.getRGB(red);
+            red = clr.r;
+            green = clr.g;
+            blue = clr.b;
+        }
+        if (red > 1 || green > 1 || blue > 1) {
+            red /= 255;
+            green /= 255;
+            blue /= 255;
+        }
+        var max = mmax(red, green, blue),
+            min = mmin(red, green, blue),
+            h,
+            s,
+            l = (max + min) / 2,
+            hsl;
+        if (min == max) {
+            hsl =  {h: 0, s: 0, l: l};
+        } else {
+            var delta = max - min;
+            s = l < .5 ? delta / (max + min) : delta / (2 - max - min);
+            if (red == max) {
+                h = (green - blue) / delta;
+            } else if (green == max) {
+                h = 2 + (blue - red) / delta;
+            } else {
+                h = 4 + (red - green) / delta;
+            }
+            h /= 6;
+            h < 0 && h++;
+            h > 1 && h--;
+            hsl = {h: h, s: s, l: l};
+        }
+        hsl.toString = hsltoString;
+        return hsl;
+    };
+    R._path2string = function () {
+        return this.join(",")[rp](p2s, "$1");
+    };
+    function cacher(f, scope, postprocessor) {
+        function newf() {
+            var arg = Array[proto].slice.call(arguments, 0),
+                args = arg[join]("\u25ba"),
+                cache = newf.cache = newf.cache || {},
+                count = newf.count = newf.count || [];
+            if (cache[has](args)) {
+                return postprocessor ? postprocessor(cache[args]) : cache[args];
+            }
+            count[length] >= 1e3 && delete cache[count.shift()];
+            count[push](args);
+            cache[args] = f[apply](scope, arg);
+            return postprocessor ? postprocessor(cache[args]) : cache[args];
+        }
+        return newf;
+    }
+ 
+    R.getRGB = cacher(function (colour) {
+        if (!colour || !!((colour = Str(colour)).indexOf("-") + 1)) {
+            return {r: -1, g: -1, b: -1, hex: "none", error: 1};
+        }
+        if (colour == "none") {
+            return {r: -1, g: -1, b: -1, hex: "none"};
+        }
+        !(hsrg[has](colour.toLowerCase().substring(0, 2)) || colour.charAt() == "#") && (colour = toHex(colour));
+        var res,
+            red,
+            green,
+            blue,
+            opacity,
+            t,
+            values,
+            rgb = colour.match(colourRegExp);
+        if (rgb) {
+            if (rgb[2]) {
+                blue = toInt(rgb[2].substring(5), 16);
+                green = toInt(rgb[2].substring(3, 5), 16);
+                red = toInt(rgb[2].substring(1, 3), 16);
+            }
+            if (rgb[3]) {
+                blue = toInt((t = rgb[3].charAt(3)) + t, 16);
+                green = toInt((t = rgb[3].charAt(2)) + t, 16);
+                red = toInt((t = rgb[3].charAt(1)) + t, 16);
+            }
+            if (rgb[4]) {
+                values = rgb[4][split](commaSpaces);
+                red = toFloat(values[0]);
+                values[0].slice(-1) == "%" && (red *= 2.55);
+                green = toFloat(values[1]);
+                values[1].slice(-1) == "%" && (green *= 2.55);
+                blue = toFloat(values[2]);
+                values[2].slice(-1) == "%" && (blue *= 2.55);
+                rgb[1].toLowerCase().slice(0, 4) == "rgba" && (opacity = toFloat(values[3]));
+                values[3] && values[3].slice(-1) == "%" && (opacity /= 100);
+            }
+            if (rgb[5]) {
+                values = rgb[5][split](commaSpaces);
+                red = toFloat(values[0]);
+                values[0].slice(-1) == "%" && (red *= 2.55);
+                green = toFloat(values[1]);
+                values[1].slice(-1) == "%" && (green *= 2.55);
+                blue = toFloat(values[2]);
+                values[2].slice(-1) == "%" && (blue *= 2.55);
+                (values[0].slice(-3) == "deg" || values[0].slice(-1) == "\xb0") && (red /= 360);
+                rgb[1].toLowerCase().slice(0, 4) == "hsba" && (opacity = toFloat(values[3]));
+                values[3] && values[3].slice(-1) == "%" && (opacity /= 100);
+                return R.hsb2rgb(red, green, blue, opacity);
+            }
+            if (rgb[6]) {
+                values = rgb[6][split](commaSpaces);
+                red = toFloat(values[0]);
+                values[0].slice(-1) == "%" && (red *= 2.55);
+                green = toFloat(values[1]);
+                values[1].slice(-1) == "%" && (green *= 2.55);
+                blue = toFloat(values[2]);
+                values[2].slice(-1) == "%" && (blue *= 2.55);
+                (values[0].slice(-3) == "deg" || values[0].slice(-1) == "\xb0") && (red /= 360);
+                rgb[1].toLowerCase().slice(0, 4) == "hsla" && (opacity = toFloat(values[3]));
+                values[3] && values[3].slice(-1) == "%" && (opacity /= 100);
+                return R.hsl2rgb(red, green, blue, opacity);
+            }
+            rgb = {r: red, g: green, b: blue};
+            rgb.hex = "#" + (16777216 | blue | (green << 8) | (red << 16)).toString(16).slice(1);
+            R.is(opacity, "finite") && (rgb.opacity = opacity);
+            return rgb;
+        }
+        return {r: -1, g: -1, b: -1, hex: "none", error: 1};
+    }, R);
+    R.getColor = function (value) {
+        var start = this.getColor.start = this.getColor.start || {h: 0, s: 1, b: value || .75},
+            rgb = this.hsb2rgb(start.h, start.s, start.b);
+        start.h += .075;
+        if (start.h > 1) {
+            start.h = 0;
+            start.s -= .2;
+            start.s <= 0 && (this.getColor.start = {h: 0, s: 1, b: start.b});
+        }
+        return rgb.hex;
+    };
+    R.getColor.reset = function () {
+        delete this.start;
+    };
+    // path utilities
+    R.parsePathString = cacher(function (pathString) {
+        if (!pathString) {
+            return null;
+        }
+        var paramCounts = {a: 7, c: 6, h: 1, l: 2, m: 2, q: 4, s: 4, t: 2, v: 1, z: 0},
+            data = [];
+        if (R.is(pathString, array) && R.is(pathString[0], array)) { // rough assumption
+            data = pathClone(pathString);
+        }
+        if (!data[length]) {
+            Str(pathString)[rp](pathCommand, function (a, b, c) {
+                var params = [],
+                    name = lowerCase.call(b);
+                c[rp](pathValues, function (a, b) {
+                    b && params[push](+b);
+                });
+                if (name == "m" && params[length] > 2) {
+                    data[push]([b][concat](params.splice(0, 2)));
+                    name = "l";
+                    b = b == "m" ? "l" : "L";
+                }
+                while (params[length] >= paramCounts[name]) {
+                    data[push]([b][concat](params.splice(0, paramCounts[name])));
+                    if (!paramCounts[name]) {
+                        break;
+                    }
+                }
+            });
+        }
+        data[toString] = R._path2string;
+        return data;
+    });
+    R.findDotsAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {
+        var t1 = 1 - t,
+            x = pow(t1, 3) * p1x + pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + pow(t, 3) * p2x,
+            y = pow(t1, 3) * p1y + pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + pow(t, 3) * p2y,
+            mx = p1x + 2 * t * (c1x - p1x) + t * t * (c2x - 2 * c1x + p1x),
+            my = p1y + 2 * t * (c1y - p1y) + t * t * (c2y - 2 * c1y + p1y),
+            nx = c1x + 2 * t * (c2x - c1x) + t * t * (p2x - 2 * c2x + c1x),
+            ny = c1y + 2 * t * (c2y - c1y) + t * t * (p2y - 2 * c2y + c1y),
+            ax = (1 - t) * p1x + t * c1x,
+            ay = (1 - t) * p1y + t * c1y,
+            cx = (1 - t) * c2x + t * p2x,
+            cy = (1 - t) * c2y + t * p2y,
+            alpha = (90 - math.atan((mx - nx) / (my - ny)) * 180 / PI);
+        (mx > nx || my < ny) && (alpha += 180);
+        return {x: x, y: y, m: {x: mx, y: my}, n: {x: nx, y: ny}, start: {x: ax, y: ay}, end: {x: cx, y: cy}, alpha: alpha};
+    };
+    var pathDimensions = cacher(function (path) {
+        if (!path) {
+            return {x: 0, y: 0, width: 0, height: 0};
+        }
+        path = path2curve(path);
+        var x = 0, 
+            y = 0,
+            X = [],
+            Y = [],
+            p;
+        for (var i = 0, ii = path[length]; i < ii; i++) {
+            p = path[i];
+            if (p[0] == "M") {
+                x = p[1];
+                y = p[2];
+                X[push](x);
+                Y[push](y);
+            } else {
+                var dim = curveDim(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);
+                X = X[concat](dim.min.x, dim.max.x);
+                Y = Y[concat](dim.min.y, dim.max.y);
+                x = p[5];
+                y = p[6];
+            }
+        }
+        var xmin = mmin[apply](0, X),
+            ymin = mmin[apply](0, Y);
+        return {
+            x: xmin,
+            y: ymin,
+            width: mmax[apply](0, X) - xmin,
+            height: mmax[apply](0, Y) - ymin
+        };
+    }),
+        pathClone = function (pathArray) {
+            var res = [];
+            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption
+                pathArray = R.parsePathString(pathArray);
+            }
+            for (var i = 0, ii = pathArray[length]; i < ii; i++) {
+                res[i] = [];
+                for (var j = 0, jj = pathArray[i][length]; j < jj; j++) {
+                    res[i][j] = pathArray[i][j];
+                }
+            }
+            res[toString] = R._path2string;
+            return res;
+        },
+        pathToRelative = cacher(function (pathArray) {
+            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption
+                pathArray = R.parsePathString(pathArray);
+            }
+            var res = [],
+                x = 0,
+                y = 0,
+                mx = 0,
+                my = 0,
+                start = 0;
+            if (pathArray[0][0] == "M") {
+                x = pathArray[0][1];
+                y = pathArray[0][2];
+                mx = x;
+                my = y;
+                start++;
+                res[push](["M", x, y]);
+            }
+            for (var i = start, ii = pathArray[length]; i < ii; i++) {
+                var r = res[i] = [],
+                    pa = pathArray[i];
+                if (pa[0] != lowerCase.call(pa[0])) {
+                    r[0] = lowerCase.call(pa[0]);
+                    switch (r[0]) {
+                        case "a":
+                            r[1] = pa[1];
+                            r[2] = pa[2];
+                            r[3] = pa[3];
+                            r[4] = pa[4];
+                            r[5] = pa[5];
+                            r[6] = +(pa[6] - x).toFixed(3);
+                            r[7] = +(pa[7] - y).toFixed(3);
+                            break;
+                        case "v":
+                            r[1] = +(pa[1] - y).toFixed(3);
+                            break;
+                        case "m":
+                            mx = pa[1];
+                            my = pa[2];
+                        default:
+                            for (var j = 1, jj = pa[length]; j < jj; j++) {
+                                r[j] = +(pa[j] - ((j % 2) ? x : y)).toFixed(3);
+                            }
+                    }
+                } else {
+                    r = res[i] = [];
+                    if (pa[0] == "m") {
+                        mx = pa[1] + x;
+                        my = pa[2] + y;
+                    }
+                    for (var k = 0, kk = pa[length]; k < kk; k++) {
+                        res[i][k] = pa[k];
+                    }
+                }
+                var len = res[i][length];
+                switch (res[i][0]) {
+                    case "z":
+                        x = mx;
+                        y = my;
+                        break;
+                    case "h":
+                        x += +res[i][len - 1];
+                        break;
+                    case "v":
+                        y += +res[i][len - 1];
+                        break;
+                    default:
+                        x += +res[i][len - 2];
+                        y += +res[i][len - 1];
+                }
+            }
+            res[toString] = R._path2string;
+            return res;
+        }, 0, pathClone),
+        pathToAbsolute = cacher(function (pathArray) {
+            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption
+                pathArray = R.parsePathString(pathArray);
+            }
+            var res = [],
+                x = 0,
+                y = 0,
+                mx = 0,
+                my = 0,
+                start = 0;
+            if (pathArray[0][0] == "M") {
+                x = +pathArray[0][1];
+                y = +pathArray[0][2];
+                mx = x;
+                my = y;
+                start++;
+                res[0] = ["M", x, y];
+            }
+            for (var i = start, ii = pathArray[length]; i < ii; i++) {
+                var r = res[i] = [],
+                    pa = pathArray[i];
+                if (pa[0] != upperCase.call(pa[0])) {
+                    r[0] = upperCase.call(pa[0]);
+                    switch (r[0]) {
+                        case "A":
+                            r[1] = pa[1];
+                            r[2] = pa[2];
+                            r[3] = pa[3];
+                            r[4] = pa[4];
+                            r[5] = pa[5];
+                            r[6] = +(pa[6] + x);
+                            r[7] = +(pa[7] + y);
+                            break;
+                        case "V":
+                            r[1] = +pa[1] + y;
+                            break;
+                        case "H":
+                            r[1] = +pa[1] + x;
+                            break;
+                        case "M":
+                            mx = +pa[1] + x;
+                            my = +pa[2] + y;
+                        default:
+                            for (var j = 1, jj = pa[length]; j < jj; j++) {
+                                r[j] = +pa[j] + ((j % 2) ? x : y);
+                            }
+                    }
+                } else {
+                    for (var k = 0, kk = pa[length]; k < kk; k++) {
+                        res[i][k] = pa[k];
+                    }
+                }
+                switch (r[0]) {
+                    case "Z":
+                        x = mx;
+                        y = my;
+                        break;
+                    case "H":
+                        x = r[1];
+                        break;
+                    case "V":
+                        y = r[1];
+                        break;
+                    case "M":
+                        mx = res[i][res[i][length] - 2];
+                        my = res[i][res[i][length] - 1];
+                    default:
+                        x = res[i][res[i][length] - 2];
+                        y = res[i][res[i][length] - 1];
+                }
+            }
+            res[toString] = R._path2string;
+            return res;
+        }, null, pathClone),
+        l2c = function (x1, y1, x2, y2) {
+            return [x1, y1, x2, y2, x2, y2];
+        },
+        q2c = function (x1, y1, ax, ay, x2, y2) {
+            var _13 = 1 / 3,
+                _23 = 2 / 3;
+            return [
+                    _13 * x1 + _23 * ax,
+                    _13 * y1 + _23 * ay,
+                    _13 * x2 + _23 * ax,
+                    _13 * y2 + _23 * ay,
+                    x2,
+                    y2
+                ];
+        },
+        a2c = function (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {
+            // for more information of where this math came from visit:
+            // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes
+            var _120 = PI * 120 / 180,
+                rad = PI / 180 * (+angle || 0),
+                res = [],
+                xy,
+                rotate = cacher(function (x, y, rad) {
+                    var X = x * math.cos(rad) - y * math.sin(rad),
+                        Y = x * math.sin(rad) + y * math.cos(rad);
+                    return {x: X, y: Y};
+                });
+            if (!recursive) {
+                xy = rotate(x1, y1, -rad);
+                x1 = xy.x;
+                y1 = xy.y;
+                xy = rotate(x2, y2, -rad);
+                x2 = xy.x;
+                y2 = xy.y;
+                var cos = math.cos(PI / 180 * angle),
+                    sin = math.sin(PI / 180 * angle),
+                    x = (x1 - x2) / 2,
+                    y = (y1 - y2) / 2;
+                var h = (x * x) / (rx * rx) + (y * y) / (ry * ry);
+                if (h > 1) {
+                    h = math.sqrt(h);
+                    rx = h * rx;
+                    ry = h * ry;
+                }
+                var rx2 = rx * rx,
+                    ry2 = ry * ry,
+                    k = (large_arc_flag == sweep_flag ? -1 : 1) *
+                        math.sqrt(abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x))),
+                    cx = k * rx * y / ry + (x1 + x2) / 2,
+                    cy = k * -ry * x / rx + (y1 + y2) / 2,
+                    f1 = math.asin(((y1 - cy) / ry).toFixed(9)),
+                    f2 = math.asin(((y2 - cy) / ry).toFixed(9));
+
+                f1 = x1 < cx ? PI - f1 : f1;
+                f2 = x2 < cx ? PI - f2 : f2;
+                f1 < 0 && (f1 = PI * 2 + f1);
+                f2 < 0 && (f2 = PI * 2 + f2);
+                if (sweep_flag && f1 > f2) {
+                    f1 = f1 - PI * 2;
+                }
+                if (!sweep_flag && f2 > f1) {
+                    f2 = f2 - PI * 2;
+                }
+            } else {
+                f1 = recursive[0];
+                f2 = recursive[1];
+                cx = recursive[2];
+                cy = recursive[3];
+            }
+            var df = f2 - f1;
+            if (abs(df) > _120) {
+                var f2old = f2,
+                    x2old = x2,
+                    y2old = y2;
+                f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);
+                x2 = cx + rx * math.cos(f2);
+                y2 = cy + ry * math.sin(f2);
+                res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);
+            }
+            df = f2 - f1;
+            var c1 = math.cos(f1),
+                s1 = math.sin(f1),
+                c2 = math.cos(f2),
+                s2 = math.sin(f2),
+                t = math.tan(df / 4),
+                hx = 4 / 3 * rx * t,
+                hy = 4 / 3 * ry * t,
+                m1 = [x1, y1],
+                m2 = [x1 + hx * s1, y1 - hy * c1],
+                m3 = [x2 + hx * s2, y2 - hy * c2],
+                m4 = [x2, y2];
+            m2[0] = 2 * m1[0] - m2[0];
+            m2[1] = 2 * m1[1] - m2[1];
+            if (recursive) {
+                return [m2, m3, m4][concat](res);
+            } else {
+                res = [m2, m3, m4][concat](res)[join]()[split](",");
+                var newres = [];
+                for (var i = 0, ii = res[length]; i < ii; i++) {
+                    newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x;
+                }
+                return newres;
+            }
+        },
+        findDotAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {
+            var t1 = 1 - t;
+            return {
+                x: pow(t1, 3) * p1x + pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + pow(t, 3) * p2x,
+                y: pow(t1, 3) * p1y + pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + pow(t, 3) * p2y
+            };
+        },
+        curveDim = cacher(function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {
+            var a = (c2x - 2 * c1x + p1x) - (p2x - 2 * c2x + c1x),
+                b = 2 * (c1x - p1x) - 2 * (c2x - c1x),
+                c = p1x - c1x,
+                t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a,
+                t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a,
+                y = [p1y, p2y],
+                x = [p1x, p2x],
+                dot;
+            abs(t1) > "1e12" && (t1 = .5);
+            abs(t2) > "1e12" && (t2 = .5);
+            if (t1 > 0 && t1 < 1) {
+                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);
+                x[push](dot.x);
+                y[push](dot.y);
+            }
+            if (t2 > 0 && t2 < 1) {
+                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);
+                x[push](dot.x);
+                y[push](dot.y);
+            }
+            a = (c2y - 2 * c1y + p1y) - (p2y - 2 * c2y + c1y);
+            b = 2 * (c1y - p1y) - 2 * (c2y - c1y);
+            c = p1y - c1y;
+            t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a;
+            t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a;
+            abs(t1) > "1e12" && (t1 = .5);
+            abs(t2) > "1e12" && (t2 = .5);
+            if (t1 > 0 && t1 < 1) {
+                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);
+                x[push](dot.x);
+                y[push](dot.y);
+            }
+            if (t2 > 0 && t2 < 1) {
+                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);
+                x[push](dot.x);
+                y[push](dot.y);
+            }
+            return {
+                min: {x: mmin[apply](0, x), y: mmin[apply](0, y)},
+                max: {x: mmax[apply](0, x), y: mmax[apply](0, y)}
+            };
+        }),
+        path2curve = cacher(function (path, path2) {
+            var p = pathToAbsolute(path),
+                p2 = path2 && pathToAbsolute(path2),
+                attrs = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},
+                attrs2 = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},
+                processPath = function (path, d) {
+                    var nx, ny;
+                    if (!path) {
+                        return ["C", d.x, d.y, d.x, d.y, d.x, d.y];
+                    }
+                    !(path[0] in {T:1, Q:1}) && (d.qx = d.qy = null);
+                    switch (path[0]) {
+                        case "M":
+                            d.X = path[1];
+                            d.Y = path[2];
+                            break;
+                        case "A":
+                            path = ["C"][concat](a2c[apply](0, [d.x, d.y][concat](path.slice(1))));
+                            break;
+                        case "S":
+                            nx = d.x + (d.x - (d.bx || d.x));
+                            ny = d.y + (d.y - (d.by || d.y));
+                            path = ["C", nx, ny][concat](path.slice(1));
+                            break;
+                        case "T":
+                            d.qx = d.x + (d.x - (d.qx || d.x));
+                            d.qy = d.y + (d.y - (d.qy || d.y));
+                            path = ["C"][concat](q2c(d.x, d.y, d.qx, d.qy, path[1], path[2]));
+                            break;
+                        case "Q":
+                            d.qx = path[1];
+                            d.qy = path[2];
+                            path = ["C"][concat](q2c(d.x, d.y, path[1], path[2], path[3], path[4]));
+                            break;
+                        case "L":
+                            path = ["C"][concat](l2c(d.x, d.y, path[1], path[2]));
+                            break;
+                        case "H":
+                            path = ["C"][concat](l2c(d.x, d.y, path[1], d.y));
+                            break;
+                        case "V":
+                            path = ["C"][concat](l2c(d.x, d.y, d.x, path[1]));
+                            break;
+                        case "Z":
+                            path = ["C"][concat](l2c(d.x, d.y, d.X, d.Y));
+                            break;
+                    }
+                    return path;
+                },
+                fixArc = function (pp, i) {
+                    if (pp[i][length] > 7) {
+                        pp[i].shift();
+                        var pi = pp[i];
+                        while (pi[length]) {
+                            pp.splice(i++, 0, ["C"][concat](pi.splice(0, 6)));
+                        }
+                        pp.splice(i, 1);
+                        ii = mmax(p[length], p2 && p2[length] || 0);
+                    }
+                },
+                fixM = function (path1, path2, a1, a2, i) {
+                    if (path1 && path2 && path1[i][0] == "M" && path2[i][0] != "M") {
+                        path2.splice(i, 0, ["M", a2.x, a2.y]);
+                        a1.bx = 0;
+                        a1.by = 0;
+                        a1.x = path1[i][1];
+                        a1.y = path1[i][2];
+                        ii = mmax(p[length], p2 && p2[length] || 0);
+                    }
+                };
+            for (var i = 0, ii = mmax(p[length], p2 && p2[length] || 0); i < ii; i++) {
+                p[i] = processPath(p[i], attrs);
+                fixArc(p, i);
+                p2 && (p2[i] = processPath(p2[i], attrs2));
+                p2 && fixArc(p2, i);
+                fixM(p, p2, attrs, attrs2, i);
+                fixM(p2, p, attrs2, attrs, i);
+                var seg = p[i],
+                    seg2 = p2 && p2[i],
+                    seglen = seg[length],
+                    seg2len = p2 && seg2[length];
+                attrs.x = seg[seglen - 2];
+                attrs.y = seg[seglen - 1];
+                attrs.bx = toFloat(seg[seglen - 4]) || attrs.x;
+                attrs.by = toFloat(seg[seglen - 3]) || attrs.y;
+                attrs2.bx = p2 && (toFloat(seg2[seg2len - 4]) || attrs2.x);
+                attrs2.by = p2 && (toFloat(seg2[seg2len - 3]) || attrs2.y);
+                attrs2.x = p2 && seg2[seg2len - 2];
+                attrs2.y = p2 && seg2[seg2len - 1];
+            }
+            return p2 ? [p, p2] : p;
+        }, null, pathClone),
+        parseDots = cacher(function (gradient) {
+            var dots = [];
+            for (var i = 0, ii = gradient[length]; i < ii; i++) {
+                var dot = {},
+                    par = gradient[i].match(/^([^:]*):?([\d\.]*)/);
+                dot.color = R.getRGB(par[1]);
+                if (dot.color.error) {
+                    return null;
+                }
+                dot.color = dot.color.hex;
+                par[2] && (dot.offset = par[2] + "%");
+                dots[push](dot);
+            }
+            for (i = 1, ii = dots[length] - 1; i < ii; i++) {
+                if (!dots[i].offset) {
+                    var start = toFloat(dots[i - 1].offset || 0),
+                        end = 0;
+                    for (var j = i + 1; j < ii; j++) {
+                        if (dots[j].offset) {
+                            end = dots[j].offset;
+                            break;
+                        }
+                    }
+                    if (!end) {
+                        end = 100;
+                        j = ii;
+                    }
+                    end = toFloat(end);
+                    var d = (end - start) / (j - i + 1);
+                    for (; i < j; i++) {
+                        start += d;
+                        dots[i].offset = start + "%";
+                    }
+                }
+            }
+            return dots;
+        }),
+        getContainer = function (x, y, w, h) {
+            var container;
+            if (R.is(x, string) || R.is(x, "object")) {
+                container = R.is(x, string) ? doc.getElementById(x) : x;
+                if (container.tagName) {
+                    if (y == null) {
+                        return {
+                            container: container,
+                            width: container.style.pixelWidth || container.offsetWidth,
+                            height: container.style.pixelHeight || container.offsetHeight
+                        };
+                    } else {
+                        return {container: container, width: y, height: w};
+                    }
+                }
+            } else {
+                return {container: 1, x: x, y: y, width: w, height: h};
+            }
+        },
+        plugins = function (con, add) {
+            var that = this;
+            for (var prop in add) {
+                if (add[has](prop) && !(prop in con)) {
+                    switch (typeof add[prop]) {
+                        case "function":
+                            (function (f) {
+                                con[prop] = con === that ? f : function () { return f[apply](that, arguments); };
+                            })(add[prop]);
+                        break;
+                        case "object":
+                            con[prop] = con[prop] || {};
+                            plugins.call(this, con[prop], add[prop]);
+                        break;
+                        default:
+                            con[prop] = add[prop];
+                        break;
+                    }
+                }
+            }
+        },
+        tear = function (el, paper) {
+            el == paper.top && (paper.top = el.prev);
+            el == paper.bottom && (paper.bottom = el.next);
+            el.next && (el.next.prev = el.prev);
+            el.prev && (el.prev.next = el.next);
+        },
+        tofront = function (el, paper) {
+            if (paper.top === el) {
+                return;
+            }
+            tear(el, paper);
+            el.next = null;
+            el.prev = paper.top;
+            paper.top.next = el;
+            paper.top = el;
+        },
+        toback = function (el, paper) {
+            if (paper.bottom === el) {
+                return;
+            }
+            tear(el, paper);
+            el.next = paper.bottom;
+            el.prev = null;
+            paper.bottom.prev = el;
+            paper.bottom = el;
+        },
+        insertafter = function (el, el2, paper) {
+            tear(el, paper);
+            el2 == paper.top && (paper.top = el);
+            el2.next && (el2.next.prev = el);
+            el.next = el2.next;
+            el.prev = el2;
+            el2.next = el;
+        },
+        insertbefore = function (el, el2, paper) {
+            tear(el, paper);
+            el2 == paper.bottom && (paper.bottom = el);
+            el2.prev && (el2.prev.next = el);
+            el.prev = el2.prev;
+            el2.prev = el;
+            el.next = el2;
+        },
+        removed = function (methodname) {
+            return function () {
+                throw new Error("Rapha\xebl: you are calling to method \u201c" + methodname + "\u201d of removed object");
+            };
+        };
+    R.pathToRelative = pathToRelative;
+    // SVG
+    if (R.svg) {
+        paperproto.svgns = "http://www.w3.org/2000/svg";
+        paperproto.xlink = "http://www.w3.org/1999/xlink";
+        round = function (num) {
+            return +num + (~~num === num) * .5;
+        };
+        var $ = function (el, attr) {
+            if (attr) {
+                for (var key in attr) {
+                    if (attr[has](key)) {
+                        el[setAttribute](key, Str(attr[key]));
+                    }
+                }
+            } else {
+                el = doc.createElementNS(paperproto.svgns, el);
+                el.style.webkitTapHighlightColor = "rgba(0,0,0,0)";
+                return el;
+            }
+        };
+        R[toString] = function () {
+            return  "Your browser supports SVG.\nYou are running Rapha\xebl " + this.version;
+        };
+        var thePath = function (pathString, SVG) {
+            var el = $("path");
+            SVG.canvas && SVG.canvas[appendChild](el);
+            var p = new Element(el, SVG);
+            p.type = "path";
+            setFillAndStroke(p, {fill: "none", stroke: "#000", path: pathString});
+            return p;
+        };
+        var addGradientFill = function (o, gradient, SVG) {
+            var type = "linear",
+                fx = .5, fy = .5,
+                s = o.style;
+            gradient = Str(gradient)[rp](radial_gradient, function (all, _fx, _fy) {
+                type = "radial";
+                if (_fx && _fy) {
+                    fx = toFloat(_fx);
+                    fy = toFloat(_fy);
+                    var dir = ((fy > .5) * 2 - 1);
+                    pow(fx - .5, 2) + pow(fy - .5, 2) > .25 &&
+                        (fy = math.sqrt(.25 - pow(fx - .5, 2)) * dir + .5) &&
+                        fy != .5 &&
+                        (fy = fy.toFixed(5) - 1e-5 * dir);
+                }
+                return E;
+            });
+            gradient = gradient[split](/\s*\-\s*/);
+            if (type == "linear") {
+                var angle = gradient.shift();
+                angle = -toFloat(angle);
+                if (isNaN(angle)) {
+                    return null;
+                }
+                var vector = [0, 0, math.cos(angle * PI / 180), math.sin(angle * PI / 180)],
+                    max = 1 / (mmax(abs(vector[2]), abs(vector[3])) || 1);
+                vector[2] *= max;
+                vector[3] *= max;
+                if (vector[2] < 0) {
+                    vector[0] = -vector[2];
+                    vector[2] = 0;
+                }
+                if (vector[3] < 0) {
+                    vector[1] = -vector[3];
+                    vector[3] = 0;
+                }
+            }
+            var dots = parseDots(gradient);
+            if (!dots) {
+                return null;
+            }
+            var id = o.getAttribute(fillString);
+            id = id.match(/^url\(#(.*)\)$/);
+            id && SVG.defs.removeChild(doc.getElementById(id[1]));
+
+            var el = $(type + "Gradient");
+            el.id = createUUID();
+            $(el, type == "radial" ? {fx: fx, fy: fy} : {x1: vector[0], y1: vector[1], x2: vector[2], y2: vector[3]});
+            SVG.defs[appendChild](el);
+            for (var i = 0, ii = dots[length]; i < ii; i++) {
+                var stop = $("stop");
+                $(stop, {
+                    offset: dots[i].offset ? dots[i].offset : !i ? "0%" : "100%",
+                    "stop-color": dots[i].color || "#fff"
+                });
+                el[appendChild](stop);
+            }
+            $(o, {
+                fill: "url(#" + el.id + ")",
+                opacity: 1,
+                "fill-opacity": 1
+            });
+            s.fill = E;
+            s.opacity = 1;
+            s.fillOpacity = 1;
+            return 1;
+        };
+        var updatePosition = function (o) {
+            var bbox = o.getBBox();
+            $(o.pattern, {patternTransform: R.format("translate({0},{1})", bbox.x, bbox.y)});
+        };
+        var setFillAndStroke = function (o, params) {
+            var dasharray = {
+                    "": [0],
+                    "none": [0],
+                    "-": [3, 1],
+                    ".": [1, 1],
+                    "-.": [3, 1, 1, 1],
+                    "-..": [3, 1, 1, 1, 1, 1],
+                    ". ": [1, 3],
+                    "- ": [4, 3],
+                    "--": [8, 3],
+                    "- .": [4, 3, 1, 3],
+                    "--.": [8, 3, 1, 3],
+                    "--..": [8, 3, 1, 3, 1, 3]
+                },
+                node = o.node,
+                attrs = o.attrs,
+                rot = o.rotate(),
+                addDashes = function (o, value) {
+                    value = dasharray[lowerCase.call(value)];
+                    if (value) {
+                        var width = o.attrs["stroke-width"] || "1",
+                            butt = {round: width, square: width, butt: 0}[o.attrs["stroke-linecap"] || params["stroke-linecap"]] || 0,
+                            dashes = [];
+                        var i = value[length];
+                        while (i--) {
+                            dashes[i] = value[i] * width + ((i % 2) ? 1 : -1) * butt;
+                        }
+                        $(node, {"stroke-dasharray": dashes[join](",")});
+                    }
+                };
+            params[has]("rotation") && (rot = params.rotation);
+            var rotxy = Str(rot)[split](separator);
+            if (!(rotxy.length - 1)) {
+                rotxy = null;
+            } else {
+                rotxy[1] = +rotxy[1];
+                rotxy[2] = +rotxy[2];
+            }
+            toFloat(rot) && o.rotate(0, true);
+            for (var att in params) {
+                if (params[has](att)) {
+                    if (!availableAttrs[has](att)) {
+                        continue;
+                    }
+                    var value = params[att];
+                    attrs[att] = value;
+                    switch (att) {
+                        case "blur":
+                            o.blur(value);
+                            break;
+                        case "rotation":
+                            o.rotate(value, true);
+                            break;
+                        case "href":
+                        case "title":
+                        case "target":
+                            var pn = node.parentNode;
+                            if (lowerCase.call(pn.tagName) != "a") {
+                                var hl = $("a");
+                                pn.insertBefore(hl, node);
+                                hl[appendChild](node);
+                                pn = hl;
+                            }
+                            if (att == "target" && value == "blank") {
+                                pn.setAttributeNS(o.paper.xlink, "show", "new");
+                            } else {
+                                pn.setAttributeNS(o.paper.xlink, att, value);
+                            }
+                            break;
+                        case "cursor":
+                            node.style.cursor = value;
+                            break;
+                        case "clip-rect":
+                            var rect = Str(value)[split](separator);
+                            if (rect[length] == 4) {
+                                o.clip && o.clip.parentNode.parentNode.removeChild(o.clip.parentNode);
+                                var el = $("clipPath"),
+                                    rc = $("rect");
+                                el.id = createUUID();
+                                $(rc, {
+                                    x: rect[0],
+                                    y: rect[1],
+                                    width: rect[2],
+                                    height: rect[3]
+                                });
+                                el[appendChild](rc);
+                                o.paper.defs[appendChild](el);
+                                $(node, {"clip-path": "url(#" + el.id + ")"});
+                                o.clip = rc;
+                            }
+                            if (!value) {
+                                var clip = doc.getElementById(node.getAttribute("clip-path")[rp](/(^url\(#|\)$)/g, E));
+                                clip && clip.parentNode.removeChild(clip);
+                                $(node, {"clip-path": E});
+                                delete o.clip;
+                            }
+                        break;
+                        case "path":
+                            if (o.type == "path") {
+                                $(node, {d: value ? attrs.path = pathToAbsolute(value) : "M0,0"});
+                            }
+                            break;
+                        case "width":
+                            node[setAttribute](att, value);
+                            if (attrs.fx) {
+                                att = "x";
+                                value = attrs.x;
+                            } else {
+                                break;
+                            }
+                        case "x":
+                            if (attrs.fx) {
+                                value = -attrs.x - (attrs.width || 0);
+                            }
+                        case "rx":
+                            if (att == "rx" && o.type == "rect") {
+                                break;
+                            }
+                        case "cx":
+                            rotxy && (att == "x" || att == "cx") && (rotxy[1] += value - attrs[att]);
+                            node[setAttribute](att, value);
+                            o.pattern && updatePosition(o);
+                            break;
+                        case "height":
+                            node[setAttribute](att, value);
+                            if (attrs.fy) {
+                                att = "y";
+                                value = attrs.y;
+                            } else {
+                                break;
+                            }
+                        case "y":
+                            if (attrs.fy) {
+                                value = -attrs.y - (attrs.height || 0);
+                            }
+                        case "ry":
+                            if (att == "ry" && o.type == "rect") {
+                                break;
+                            }
+                        case "cy":
+                            rotxy && (att == "y" || att == "cy") && (rotxy[2] += value - attrs[att]);
+                            node[setAttribute](att, value);
+                            o.pattern && updatePosition(o);
+                            break;
+                        case "r":
+                            if (o.type == "rect") {
+                                $(node, {rx: value, ry: value});
+                            } else {
+                                node[setAttribute](att, value);
+                            }
+                            break;
+                        case "src":
+                            if (o.type == "image") {
+                                node.setAttributeNS(o.paper.xlink, "href", value);
+                            }
+                            break;
+                        case "stroke-width":
+                            node.style.strokeWidth = value;
+                            // Need following line for Firefox
+                            node[setAttribute](att, value);
+                            if (attrs["stroke-dasharray"]) {
+                                addDashes(o, attrs["stroke-dasharray"]);
+                            }
+                            break;
+                        case "stroke-dasharray":
+                            addDashes(o, value);
+                            break;
+                        case "translation":
+                            var xy = Str(value)[split](separator);
+                            xy[0] = +xy[0] || 0;
+                            xy[1] = +xy[1] || 0;
+                            if (rotxy) {
+                                rotxy[1] += xy[0];
+                                rotxy[2] += xy[1];
+                            }
+                            translate.call(o, xy[0], xy[1]);
+                            break;
+                        case "scale":
+                            xy = Str(value)[split](separator);
+                            o.scale(+xy[0] || 1, +xy[1] || +xy[0] || 1, isNaN(toFloat(xy[2])) ? null : +xy[2], isNaN(toFloat(xy[3])) ? null : +xy[3]);
+                            break;
+                        case fillString:
+                            var isURL = Str(value).match(ISURL);
+                            if (isURL) {
+                                el = $("pattern");
+                                var ig = $("image");
+                                el.id = createUUID();
+                                $(el, {x: 0, y: 0, patternUnits: "userSpaceOnUse", height: 1, width: 1});
+                                $(ig, {x: 0, y: 0});
+                                ig.setAttributeNS(o.paper.xlink, "href", isURL[1]);
+                                el[appendChild](ig);
+ 
+                                var img = doc.createElement("img");
+                                img.style.cssText = "position:absolute;left:-9999em;top-9999em";
+                                img.onload = function () {
+                                    $(el, {width: this.offsetWidth, height: this.offsetHeight});
+                                    $(ig, {width: this.offsetWidth, height: this.offsetHeight});
+                                    doc.body.removeChild(this);
+                                    o.paper.safari();
+                                };
+                                doc.body[appendChild](img);
+                                img.src = isURL[1];
+                                o.paper.defs[appendChild](el);
+                                node.style.fill = "url(#" + el.id + ")";
+                                $(node, {fill: "url(#" + el.id + ")"});
+                                o.pattern = el;
+                                o.pattern && updatePosition(o);
+                                break;
+                            }
+                            var clr = R.getRGB(value);
+                            if (!clr.error) {
+                                delete params.gradient;
+                                delete attrs.gradient;
+                                !R.is(attrs.opacity, "undefined") &&
+                                    R.is(params.opacity, "undefined") &&
+                                    $(node, {opacity: attrs.opacity});
+                                !R.is(attrs["fill-opacity"], "undefined") &&
+                                    R.is(params["fill-opacity"], "undefined") &&
+                                    $(node, {"fill-opacity": attrs["fill-opacity"]});
+                            } else if ((({circle: 1, ellipse: 1})[has](o.type) || Str(value).charAt() != "r") && addGradientFill(node, value, o.paper)) {
+                                attrs.gradient = value;
+                                attrs.fill = "none";
+                                break;
+                            }
+                            clr[has]("opacity") && $(node, {"fill-opacity": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});
+                        case "stroke":
+                            clr = R.getRGB(value);
+                            node[setAttribute](att, clr.hex);
+                            att == "stroke" && clr[has]("opacity") && $(node, {"stroke-opacity": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});
+                            break;
+                        case "gradient":
+                            (({circle: 1, ellipse: 1})[has](o.type) || Str(value).charAt() != "r") && addGradientFill(node, value, o.paper);
+                            break;
+                        case "opacity":
+                            if (attrs.gradient && !attrs[has]("stroke-opacity")) {
+                                $(node, {"stroke-opacity": value > 1 ? value / 100 : value});
+                            }
+                            // fall
+                        case "fill-opacity":
+                            if (attrs.gradient) {
+                                var gradient = doc.getElementById(node.getAttribute(fillString)[rp](/^url\(#|\)$/g, E));
+                                if (gradient) {
+                                    var stops = gradient.getElementsByTagName("stop");
+                                    stops[stops[length] - 1][setAttribute]("stop-opacity", value);
+                                }
+                                break;
+                            }
+                        default:
+                            att == "font-size" && (value = toInt(value, 10) + "px");
+                            var cssrule = att[rp](/(\-.)/g, function (w) {
+                                return upperCase.call(w.substring(1));
+                            });
+                            node.style[cssrule] = value;
+                            // Need following line for Firefox
+                            node[setAttribute](att, value);
+                            break;
+                    }
+                }
+            }
+            
+            tuneText(o, params);
+            if (rotxy) {
+                o.rotate(rotxy.join(S));
+            } else {
+                toFloat(rot) && o.rotate(rot, true);
+            }
+        };
+        var leading = 1.2,
+        tuneText = function (el, params) {
+            if (el.type != "text" || !(params[has]("text") || params[has]("font") || params[has]("font-size") || params[has]("x") || params[has]("y"))) {
+                return;
+            }
+            var a = el.attrs,
+                node = el.node,
+                fontSize = node.firstChild ? toInt(doc.defaultView.getComputedStyle(node.firstChild, E).getPropertyValue("font-size"), 10) : 10;
+ 
+            if (params[has]("text")) {
+                a.text = params.text;
+                while (node.firstChild) {
+                    node.removeChild(node.firstChild);
+                }
+                var texts = Str(params.text)[split]("\n");
+                for (var i = 0, ii = texts[length]; i < ii; i++) if (texts[i]) {
+                    var tspan = $("tspan");
+                    i && $(tspan, {dy: fontSize * leading, x: a.x});
+                    tspan[appendChild](doc.createTextNode(texts[i]));
+                    node[appendChild](tspan);
+                }
+            } else {
+                texts = node.getElementsByTagName("tspan");
+                for (i = 0, ii = texts[length]; i < ii; i++) {
+                    i && $(texts[i], {dy: fontSize * leading, x: a.x});
+                }
+            }
+            $(node, {y: a.y});
+            var bb = el.getBBox(),
+                dif = a.y - (bb.y + bb.height / 2);
+            dif && R.is(dif, "finite") && $(node, {y: a.y + dif});
+        },
+        Element = function (node, svg) {
+            var X = 0,
+                Y = 0;
+            this[0] = node;
+            this.id = R._oid++;
+            this.node = node;
+            node.raphael = this;
+            this.paper = svg;
+            this.attrs = this.attrs || {};
+            this.transformations = []; // rotate, translate, scale
+            this._ = {
+                tx: 0,
+                ty: 0,
+                rt: {deg: 0, cx: 0, cy: 0},
+                sx: 1,
+                sy: 1
+            };
+            !svg.bottom && (svg.bottom = this);
+            this.prev = svg.top;
+            svg.top && (svg.top.next = this);
+            svg.top = this;
+            this.next = null;
+        };
+        var elproto = Element[proto];
+        Element[proto].rotate = function (deg, cx, cy) {
+            if (this.removed) {
+                return this;
+            }
+            if (deg == null) {
+                if (this._.rt.cx) {
+                    return [this._.rt.deg, this._.rt.cx, this._.rt.cy][join](S);
+                }
+                return this._.rt.deg;
+            }
+            var bbox = this.getBBox();
+            deg = Str(deg)[split](separator);
+            if (deg[length] - 1) {
+                cx = toFloat(deg[1]);
+                cy = toFloat(deg[2]);
+            }
+            deg = toFloat(deg[0]);
+            if (cx != null && cx !== false) {
+                this._.rt.deg = deg;
+            } else {
+                this._.rt.deg += deg;
+            }
+            (cy == null) && (cx = null);
+            this._.rt.cx = cx;
+            this._.rt.cy = cy;
+            cx = cx == null ? bbox.x + bbox.width / 2 : cx;
+            cy = cy == null ? bbox.y + bbox.height / 2 : cy;
+            if (this._.rt.deg) {
+                this.transformations[0] = R.format("rotate({0} {1} {2})", this._.rt.deg, cx, cy);
+                this.clip && $(this.clip, {transform: R.format("rotate({0} {1} {2})", -this._.rt.deg, cx, cy)});
+            } else {
+                this.transformations[0] = E;
+                this.clip && $(this.clip, {transform: E});
+            }
+            $(this.node, {transform: this.transformations[join](S)});
+            return this;
+        };
+        Element[proto].hide = function () {
+            !this.removed && (this.node.style.display = "none");
+            return this;
+        };
+        Element[proto].show = function () {
+            !this.removed && (this.node.style.display = "");
+            return this;
+        };
+        Element[proto].remove = function () {
+            if (this.removed) {
+                return;
+            }
+            tear(this, this.paper);
+            this.node.parentNode.removeChild(this.node);
+            for (var i in this) {
+                delete this[i];
+            }
+            this.removed = true;
+        };
+        Element[proto].getBBox = function () {
+            if (this.removed) {
+                return this;
+            }
+            if (this.type == "path") {
+                return pathDimensions(this.attrs.path);
+            }
+            if (this.node.style.display == "none") {
+                this.show();
+                var hide = true;
+            }
+            var bbox = {};
+            try {
+                bbox = this.node.getBBox();
+            } catch(e) {
+                // Firefox 3.0.x plays badly here
+            } finally {
+                bbox = bbox || {};
+            }
+            if (this.type == "text") {
+                bbox = {x: bbox.x, y: Infinity, width: 0, height: 0};
+                for (var i = 0, ii = this.node.getNumberOfChars(); i < ii; i++) {
+                    var bb = this.node.getExtentOfChar(i);
+                    (bb.y < bbox.y) && (bbox.y = bb.y);
+                    (bb.y + bb.height - bbox.y > bbox.height) && (bbox.height = bb.y + bb.height - bbox.y);
+                    (bb.x + bb.width - bbox.x > bbox.width) && (bbox.width = bb.x + bb.width - bbox.x);
+                }
+            }
+            hide && this.hide();
+            return bbox;
+        };
+        Element[proto].attr = function (name, value) {
+            if (this.removed) {
+                return this;
+            }
+            if (name == null) {
+                var res = {};
+                for (var i in this.attrs) if (this.attrs[has](i)) {
+                    res[i] = this.attrs[i];
+                }
+                this._.rt.deg && (res.rotation = this.rotate());
+                (this._.sx != 1 || this._.sy != 1) && (res.scale = this.scale());
+                res.gradient && res.fill == "none" && (res.fill = res.gradient) && delete res.gradient;
+                return res;
+            }
+            if (value == null && R.is(name, string)) {
+                if (name == "translation") {
+                    return translate.call(this);
+                }
+                if (name == "rotation") {
+                    return this.rotate();
+                }
+                if (name == "scale") {
+                    return this.scale();
+                }
+                if (name == fillString && this.attrs.fill == "none" && this.attrs.gradient) {
+                    return this.attrs.gradient;
+                }
+                return this.attrs[name];
+            }
+            if (value == null && R.is(name, array)) {
+                var values = {};
+                for (var j = 0, jj = name.length; j < jj; j++) {
+                    values[name[j]] = this.attr(name[j]);
+                }
+                return values;
+            }
+            if (value != null) {
+                var params = {};
+                params[name] = value;
+            } else if (name != null && R.is(name, "object")) {
+                params = name;
+            }
+            for (var key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], "function")) {
+                var par = this.paper.customAttributes[key].apply(this, [][concat](params[key]));
+                this.attrs[key] = params[key];
+                for (var subkey in par) if (par[has](subkey)) {
+                    params[subkey] = par[subkey];
+                }
+            }
+            setFillAndStroke(this, params);
+            return this;
+        };
+        Element[proto].toFront = function () {
+            if (this.removed) {
+                return this;
+            }
+            this.node.parentNode[appendChild](this.node);
+            var svg = this.paper;
+            svg.top != this && tofront(this, svg);
+            return this;
+        };
+        Element[proto].toBack = function () {
+            if (this.removed) {
+                return this;
+            }
+            if (this.node.parentNode.firstChild != this.node) {
+                this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild);
+                toback(this, this.paper);
+                var svg = this.paper;
+            }
+            return this;
+        };
+        Element[proto].insertAfter = function (element) {
+            if (this.removed) {
+                return this;
+            }
+            var node = element.node || element[element.length - 1].node;
+            if (node.nextSibling) {
+                node.parentNode.insertBefore(this.node, node.nextSibling);
+            } else {
+                node.parentNode[appendChild](this.node);
+            }
+            insertafter(this, element, this.paper);
+            return this;
+        };
+        Element[proto].insertBefore = function (element) {
+            if (this.removed) {
+                return this;
+            }
+            var node = element.node || element[0].node;
+            node.parentNode.insertBefore(this.node, node);
+            insertbefore(this, element, this.paper);
+            return this;
+        };
+        Element[proto].blur = function (size) {
+            // Experimental. No Safari support. Use it on your own risk.
+            var t = this;
+            if (+size !== 0) {
+                var fltr = $("filter"),
+                    blur = $("feGaussianBlur");
+                t.attrs.blur = size;
+                fltr.id = createUUID();
+                $(blur, {stdDeviation: +size || 1.5});
+                fltr.appendChild(blur);
+                t.paper.defs.appendChild(fltr);
+                t._blur = fltr;
+                $(t.node, {filter: "url(#" + fltr.id + ")"});
+            } else {
+                if (t._blur) {
+                    t._blur.parentNode.removeChild(t._blur);
+                    delete t._blur;
+                    delete t.attrs.blur;
+                }
+                t.node.removeAttribute("filter");
+            }
+        };
+        var theCircle = function (svg, x, y, r) {
+            var el = $("circle");
+            svg.canvas && svg.canvas[appendChild](el);
+            var res = new Element(el, svg);
+            res.attrs = {cx: x, cy: y, r: r, fill: "none", stroke: "#000"};
+            res.type = "circle";
+            $(el, res.attrs);
+            return res;
+        },
+        theRect = function (svg, x, y, w, h, r) {
+            var el = $("rect");
+            svg.canvas && svg.canvas[appendChild](el);
+            var res = new Element(el, svg);
+            res.attrs = {x: x, y: y, width: w, height: h, r: r || 0, rx: r || 0, ry: r || 0, fill: "none", stroke: "#000"};
+            res.type = "rect";
+            $(el, res.attrs);
+            return res;
+        },
+        theEllipse = function (svg, x, y, rx, ry) {
+            var el = $("ellipse");
+            svg.canvas && svg.canvas[appendChild](el);
+            var res = new Element(el, svg);
+            res.attrs = {cx: x, cy: y, rx: rx, ry: ry, fill: "none", stroke: "#000"};
+            res.type = "ellipse";
+            $(el, res.attrs);
+            return res;
+        },
+        theImage = function (svg, src, x, y, w, h) {
+            var el = $("image");
+            $(el, {x: x, y: y, width: w, height: h, preserveAspectRatio: "none"});
+            el.setAttributeNS(svg.xlink, "href", src);
+            svg.canvas && svg.canvas[appendChild](el);
+            var res = new Element(el, svg);
+            res.attrs = {x: x, y: y, width: w, height: h, src: src};
+            res.type = "image";
+            return res;
+        },
+        theText = function (svg, x, y, text) {
+            var el = $("text");
+            $(el, {x: x, y: y, "text-anchor": "middle"});
+            svg.canvas && svg.canvas[appendChild](el);
+            var res = new Element(el, svg);
+            res.attrs = {x: x, y: y, "text-anchor": "middle", text: text, font: availableAttrs.font, stroke: "none", fill: "#000"};
+            res.type = "text";
+            setFillAndStroke(res, res.attrs);
+            return res;
+        },
+        setSize = function (width, height) {
+            this.width = width || this.width;
+            this.height = height || this.height;
+            this.canvas[setAttribute]("width", this.width);
+            this.canvas[setAttribute]("height", this.height);
+            return this;
+        },
+        create = function () {
+            var con = getContainer[apply](0, arguments),
+                container = con && con.container,
+                x = con.x,
+                y = con.y,
+                width = con.width,
+                height = con.height;
+            if (!container) {
+                throw new Error("SVG container not found.");
+            }
+            var cnvs = $("svg");
+            x = x || 0;
+            y = y || 0;
+            width = width || 512;
+            height = height || 342;
+            $(cnvs, {
+                xmlns: "http://www.w3.org/2000/svg",
+                version: 1.1,
+                width: width,
+                height: height
+            });
+            if (container == 1) {
+                cnvs.style.cssText = "position:absolute;left:" + x + "px;top:" + y + "px";
+                doc.body[appendChild](cnvs);
+            } else {
+                if (container.firstChild) {
+                    container.insertBefore(cnvs, container.firstChild);
+                } else {
+                    container[appendChild](cnvs);
+                }
+            }
+            container = new Paper;
+            container.width = width;
+            container.height = height;
+            container.canvas = cnvs;
+            plugins.call(container, container, R.fn);
+            container.clear();
+            return container;
+        };
+        paperproto.clear = function () {
+            var c = this.canvas;
+            while (c.firstChild) {
+                c.removeChild(c.firstChild);
+            }
+            this.bottom = this.top = null;
+            (this.desc = $("desc"))[appendChild](doc.createTextNode("Created with Rapha\xebl"));
+            c[appendChild](this.desc);
+            c[appendChild](this.defs = $("defs"));
+        };
+        paperproto.remove = function () {
+            this.canvas.parentNode && this.canvas.parentNode.removeChild(this.canvas);
+            for (var i in this) {
+                this[i] = removed(i);
+            }
+        };
+    }
+
+    // VML
+    if (R.vml) {
+        var map = {M: "m", L: "l", C: "c", Z: "x", m: "t", l: "r", c: "v", z: "x"},
+            bites = /([clmz]),?([^clmz]*)/gi,
+            blurregexp = / progid:\S+Blur\([^\)]+\)/g,
+            val = /-?[^,\s-]+/g,
+            coordsize = 1e3 + S + 1e3,
+            zoom = 10,
+            pathlike = {path: 1, rect: 1},
+            path2vml = function (path) {
+                var total =  /[ahqstv]/ig,
+                    command = pathToAbsolute;
+                Str(path).match(total) && (command = path2curve);
+                total = /[clmz]/g;
+                if (command == pathToAbsolute && !Str(path).match(total)) {
+                    var res = Str(path)[rp](bites, function (all, command, args) {
+                        var vals = [],
+                            isMove = lowerCase.call(command) == "m",
+                            res = map[command];
+                        args[rp](val, function (value) {
+                            if (isMove && vals[length] == 2) {
+                                res += vals + map[command == "m" ? "l" : "L"];
+                                vals = [];
+                            }
+                            vals[push](round(value * zoom));
+                        });
+                        return res + vals;
+                    });
+                    return res;
+                }
+                var pa = command(path), p, r;
+                res = [];
+                for (var i = 0, ii = pa[length]; i < ii; i++) {
+                    p = pa[i];
+                    r = lowerCase.call(pa[i][0]);
+                    r == "z" && (r = "x");
+                    for (var j = 1, jj = p[length]; j < jj; j++) {
+                        r += round(p[j] * zoom) + (j != jj - 1 ? "," : E);
+                    }
+                    res[push](r);
+                }
+                return res[join](S);
+            };
+        
+        R[toString] = function () {
+            return  "Your browser doesn\u2019t support SVG. Falling down to VML.\nYou are running Rapha\xebl " + this.version;
+        };
+        thePath = function (pathString, vml) {
+            var g = createNode("group");
+            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
+            g.coordsize = vml.coordsize;
+            g.coordorigin = vml.coordorigin;
+            var el = createNode("shape"), ol = el.style;
+            ol.width = vml.width + "px";
+            ol.height = vml.height + "px";
+            el.coordsize = coordsize;
+            el.coordorigin = vml.coordorigin;
+            g[appendChild](el);
+            var p = new Element(el, g, vml),
+                attr = {fill: "none", stroke: "#000"};
+            pathString && (attr.path = pathString);
+            p.type = "path";
+            p.path = [];
+            p.Path = E;
+            setFillAndStroke(p, attr);
+            vml.canvas[appendChild](g);
+            return p;
+        };
+        setFillAndStroke = function (o, params) {
+            o.attrs = o.attrs || {};
+            var node = o.node,
+                a = o.attrs,
+                s = node.style,
+                xy,
+                newpath = (params.x != a.x || params.y != a.y || params.width != a.width || params.height != a.height || params.r != a.r) && o.type == "rect",
+                res = o;
+
+            for (var par in params) if (params[has](par)) {
+                a[par] = params[par];
+            }
+            if (newpath) {
+                a.path = rectPath(a.x, a.y, a.width, a.height, a.r);
+                o.X = a.x;
+                o.Y = a.y;
+                o.W = a.width;
+                o.H = a.height;
+            }
+            params.href && (node.href = params.href);
+            params.title && (node.title = params.title);
+            params.target && (node.target = params.target);
+            params.cursor && (s.cursor = params.cursor);
+            "blur" in params && o.blur(params.blur);
+            if (params.path && o.type == "path" || newpath) {
+                node.path = path2vml(a.path);
+            }
+            if (params.rotation != null) {
+                o.rotate(params.rotation, true);
+            }
+            if (params.translation) {
+                xy = Str(params.translation)[split](separator);
+                translate.call(o, xy[0], xy[1]);
+                if (o._.rt.cx != null) {
+                    o._.rt.cx +=+ xy[0];
+                    o._.rt.cy +=+ xy[1];
+                    o.setBox(o.attrs, xy[0], xy[1]);
+                }
+            }
+            if (params.scale) {
+                xy = Str(params.scale)[split](separator);
+                o.scale(+xy[0] || 1, +xy[1] || +xy[0] || 1, +xy[2] || null, +xy[3] || null);
+            }
+            if ("clip-rect" in params) {
+                var rect = Str(params["clip-rect"])[split](separator);
+                if (rect[length] == 4) {
+                    rect[2] = +rect[2] + (+rect[0]);
+                    rect[3] = +rect[3] + (+rect[1]);
+                    var div = node.clipRect || doc.createElement("div"),
+                        dstyle = div.style,
+                        group = node.parentNode;
+                    dstyle.clip = R.format("rect({1}px {2}px {3}px {0}px)", rect);
+                    if (!node.clipRect) {
+                        dstyle.position = "absolute";
+                        dstyle.top = 0;
+                        dstyle.left = 0;
+                        dstyle.width = o.paper.width + "px";
+                        dstyle.height = o.paper.height + "px";
+                        group.parentNode.insertBefore(div, group);
+                        div[appendChild](group);
+                        node.clipRect = div;
+                    }
+                }
+                if (!params["clip-rect"]) {
+                    node.clipRect && (node.clipRect.style.clip = E);
+                }
+            }
+            if (o.type == "image" && params.src) {
+                node.src = params.src;
+            }
+            if (o.type == "image" && params.opacity) {
+                node.filterOpacity = ms + ".Alpha(opacity=" + (params.opacity * 100) + ")";
+                s.filter = (node.filterMatrix || E) + (node.filterOpacity || E);
+            }
+            params.font && (s.font = params.font);
+            params["font-family"] && (s.fontFamily = '"' + params["font-family"][split](",")[0][rp](/^['"]+|['"]+$/g, E) + '"');
+            params["font-size"] && (s.fontSize = params["font-size"]);
+            params["font-weight"] && (s.fontWeight = params["font-weight"]);
+            params["font-style"] && (s.fontStyle = params["font-style"]);
+            if (params.opacity != null || 
+                params["stroke-width"] != null ||
+                params.fill != null ||
+                params.stroke != null ||
+                params["stroke-width"] != null ||
+                params["stroke-opacity"] != null ||
+                params["fill-opacity"] != null ||
+                params["stroke-dasharray"] != null ||
+                params["stroke-miterlimit"] != null ||
+                params["stroke-linejoin"] != null ||
+                params["stroke-linecap"] != null) {
+                node = o.shape || node;
+                var fill = (node.getElementsByTagName(fillString) && node.getElementsByTagName(fillString)[0]),
+                    newfill = false;
+                !fill && (newfill = fill = createNode(fillString));
+                if ("fill-opacity" in params || "opacity" in params) {
+                    var opacity = ((+a["fill-opacity"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+R.getRGB(params.fill).o + 1 || 2) - 1);
+                    opacity = mmin(mmax(opacity, 0), 1);
+                    fill.opacity = opacity;
+                }
+                params.fill && (fill.on = true);
+                if (fill.on == null || params.fill == "none") {
+                    fill.on = false;
+                }
+                if (fill.on && params.fill) {
+                    var isURL = params.fill.match(ISURL);
+                    if (isURL) {
+                        fill.src = isURL[1];
+                        fill.type = "tile";
+                    } else {
+                        fill.color = R.getRGB(params.fill).hex;
+                        fill.src = E;
+                        fill.type = "solid";
+                        if (R.getRGB(params.fill).error && (res.type in {circle: 1, ellipse: 1} || Str(params.fill).charAt() != "r") && addGradientFill(res, params.fill)) {
+                            a.fill = "none";
+                            a.gradient = params.fill;
+                        }
+                    }
+                }
+                newfill && node[appendChild](fill);
+                var stroke = (node.getElementsByTagName("stroke") && node.getElementsByTagName("stroke")[0]),
+                newstroke = false;
+                !stroke && (newstroke = stroke = createNode("stroke"));
+                if ((params.stroke && params.stroke != "none") ||
+                    params["stroke-width"] ||
+                    params["stroke-opacity"] != null ||
+                    params["stroke-dasharray"] ||
+                    params["stroke-miterlimit"] ||
+                    params["stroke-linejoin"] ||
+                    params["stroke-linecap"]) {
+                    stroke.on = true;
+                }
+                (params.stroke == "none" || stroke.on == null || params.stroke == 0 || params["stroke-width"] == 0) && (stroke.on = false);
+                var strokeColor = R.getRGB(params.stroke);
+                stroke.on && params.stroke && (stroke.color = strokeColor.hex);
+                opacity = ((+a["stroke-opacity"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+strokeColor.o + 1 || 2) - 1);
+                var width = (toFloat(params["stroke-width"]) || 1) * .75;
+                opacity = mmin(mmax(opacity, 0), 1);
+                params["stroke-width"] == null && (width = a["stroke-width"]);
+                params["stroke-width"] && (stroke.weight = width);
+                width && width < 1 && (opacity *= width) && (stroke.weight = 1);
+                stroke.opacity = opacity;
+                
+                params["stroke-linejoin"] && (stroke.joinstyle = params["stroke-linejoin"] || "miter");
+                stroke.miterlimit = params["stroke-miterlimit"] || 8;
+                params["stroke-linecap"] && (stroke.endcap = params["stroke-linecap"] == "butt" ? "flat" : params["stroke-linecap"] == "square" ? "square" : "round");
+                if (params["stroke-dasharray"]) {
+                    var dasharray = {
+                        "-": "shortdash",
+                        ".": "shortdot",
+                        "-.": "shortdashdot",
+                        "-..": "shortdashdotdot",
+                        ". ": "dot",
+                        "- ": "dash",
+                        "--": "longdash",
+                        "- .": "dashdot",
+                        "--.": "longdashdot",
+                        "--..": "longdashdotdot"
+                    };
+                    stroke.dashstyle = dasharray[has](params["stroke-dasharray"]) ? dasharray[params["stroke-dasharray"]] : E;
+                }
+                newstroke && node[appendChild](stroke);
+            }
+            if (res.type == "text") {
+                s = res.paper.span.style;
+                a.font && (s.font = a.font);
+                a["font-family"] && (s.fontFamily = a["font-family"]);
+                a["font-size"] && (s.fontSize = a["font-size"]);
+                a["font-weight"] && (s.fontWeight = a["font-weight"]);
+                a["font-style"] && (s.fontStyle = a["font-style"]);
+                res.node.string && (res.paper.span.innerHTML = Str(res.node.string)[rp](/</g, "&#60;")[rp](/&/g, "&#38;")[rp](/\n/g, "<br>"));
+                res.W = a.w = res.paper.span.offsetWidth;
+                res.H = a.h = res.paper.span.offsetHeight;
+                res.X = a.x;
+                res.Y = a.y + round(res.H / 2);
+ 
+                // text-anchor emulationm
+                switch (a["text-anchor"]) {
+                    case "start":
+                        res.node.style["v-text-align"] = "left";
+                        res.bbx = round(res.W / 2);
+                    break;
+                    case "end":
+                        res.node.style["v-text-align"] = "right";
+                        res.bbx = -round(res.W / 2);
+                    break;
+                    default:
+                        res.node.style["v-text-align"] = "center";
+                    break;
+                }
+            }
+        };
+        addGradientFill = function (o, gradient) {
+            o.attrs = o.attrs || {};
+            var attrs = o.attrs,
+                fill,
+                type = "linear",
+                fxfy = ".5 .5";
+            o.attrs.gradient = gradient;
+            gradient = Str(gradient)[rp](radial_gradient, function (all, fx, fy) {
+                type = "radial";
+                if (fx && fy) {
+                    fx = toFloat(fx);
+                    fy = toFloat(fy);
+                    pow(fx - .5, 2) + pow(fy - .5, 2) > .25 && (fy = math.sqrt(.25 - pow(fx - .5, 2)) * ((fy > .5) * 2 - 1) + .5);
+                    fxfy = fx + S + fy;
+                }
+                return E;
+            });
+            gradient = gradient[split](/\s*\-\s*/);
+            if (type == "linear") {
+                var angle = gradient.shift();
+                angle = -toFloat(angle);
+                if (isNaN(angle)) {
+                    return null;
+                }
+            }
+            var dots = parseDots(gradient);
+            if (!dots) {
+                return null;
+            }
+            o = o.shape || o.node;
+            fill = o.getElementsByTagName(fillString)[0] || createNode(fillString);
+            !fill.parentNode && o.appendChild(fill);
+            if (dots[length]) {
+                fill.on = true;
+                fill.method = "none";
+                fill.color = dots[0].color;
+                fill.color2 = dots[dots[length] - 1].color;
+                var clrs = [];
+                for (var i = 0, ii = dots[length]; i < ii; i++) {
+                    dots[i].offset && clrs[push](dots[i].offset + S + dots[i].color);
+                }
+                fill.colors && (fill.colors.value = clrs[length] ? clrs[join]() : "0% " + fill.color);
+                if (type == "radial") {
+                    fill.type = "gradientradial";
+                    fill.focus = "100%";
+                    fill.focussize = fxfy;
+                    fill.focusposition = fxfy;
+                } else {
+                    fill.type = "gradient";
+                    fill.angle = (270 - angle) % 360;
+                }
+            }
+            return 1;
+        };
+        Element = function (node, group, vml) {
+            var Rotation = 0,
+                RotX = 0,
+                RotY = 0,
+                Scale = 1;
+            this[0] = node;
+            this.id = R._oid++;
+            this.node = node;
+            node.raphael = this;
+            this.X = 0;
+            this.Y = 0;
+            this.attrs = {};
+            this.Group = group;
+            this.paper = vml;
+            this._ = {
+                tx: 0,
+                ty: 0,
+                rt: {deg:0},
+                sx: 1,
+                sy: 1
+            };
+            !vml.bottom && (vml.bottom = this);
+            this.prev = vml.top;
+            vml.top && (vml.top.next = this);
+            vml.top = this;
+            this.next = null;
+        };
+        elproto = Element[proto];
+        elproto.rotate = function (deg, cx, cy) {
+            if (this.removed) {
+                return this;
+            }
+            if (deg == null) {
+                if (this._.rt.cx) {
+                    return [this._.rt.deg, this._.rt.cx, this._.rt.cy][join](S);
+                }
+                return this._.rt.deg;
+            }
+            deg = Str(deg)[split](separator);
+            if (deg[length] - 1) {
+                cx = toFloat(deg[1]);
+                cy = toFloat(deg[2]);
+            }
+            deg = toFloat(deg[0]);
+            if (cx != null) {
+                this._.rt.deg = deg;
+            } else {
+                this._.rt.deg += deg;
+            }
+            cy == null && (cx = null);
+            this._.rt.cx = cx;
+            this._.rt.cy = cy;
+            this.setBox(this.attrs, cx, cy);
+            this.Group.style.rotation = this._.rt.deg;
+            // gradient fix for rotation. TODO
+            // var fill = (this.shape || this.node).getElementsByTagName(fillString);
+            // fill = fill[0] || {};
+            // var b = ((360 - this._.rt.deg) - 270) % 360;
+            // !R.is(fill.angle, "undefined") && (fill.angle = b);
+            return this;
+        };
+        elproto.setBox = function (params, cx, cy) {
+            if (this.removed) {
+                return this;
+            }
+            var gs = this.Group.style,
+                os = (this.shape && this.shape.style) || this.node.style;
+            params = params || {};
+            for (var i in params) if (params[has](i)) {
+                this.attrs[i] = params[i];
+            }
+            cx = cx || this._.rt.cx;
+            cy = cy || this._.rt.cy;
+            var attr = this.attrs,
+                x,
+                y,
+                w,
+                h;
+            switch (this.type) {
+                case "circle":
+                    x = attr.cx - attr.r;
+                    y = attr.cy - attr.r;
+                    w = h = attr.r * 2;
+                    break;
+                case "ellipse":
+                    x = attr.cx - attr.rx;
+                    y = attr.cy - attr.ry;
+                    w = attr.rx * 2;
+                    h = attr.ry * 2;
+                    break;
+                case "image":
+                    x = +attr.x;
+                    y = +attr.y;
+                    w = attr.width || 0;
+                    h = attr.height || 0;
+                    break;
+                case "text":
+                    this.textpath.v = ["m", round(attr.x), ", ", round(attr.y - 2), "l", round(attr.x) + 1, ", ", round(attr.y - 2)][join](E);
+                    x = attr.x - round(this.W / 2);
+                    y = attr.y - this.H / 2;
+                    w = this.W;
+                    h = this.H;
+                    break;
+                case "rect":
+                case "path":
+                    if (!this.attrs.path) {
+                        x = 0;
+                        y = 0;
+                        w = this.paper.width;
+                        h = this.paper.height;
+                    } else {
+                        var dim = pathDimensions(this.attrs.path);
+                        x = dim.x;
+                        y = dim.y;
+                        w = dim.width;
+                        h = dim.height;
+                    }
+                    break;
+                default:
+                    x = 0;
+                    y = 0;
+                    w = this.paper.width;
+                    h = this.paper.height;
+                    break;
+            }
+            cx = (cx == null) ? x + w / 2 : cx;
+            cy = (cy == null) ? y + h / 2 : cy;
+            var left = cx - this.paper.width / 2,
+                top = cy - this.paper.height / 2, t;
+            gs.left != (t = left + "px") && (gs.left = t);
+            gs.top != (t = top + "px") && (gs.top = t);
+            this.X = pathlike[has](this.type) ? -left : x;
+            this.Y = pathlike[has](this.type) ? -top : y;
+            this.W = w;
+            this.H = h;
+            if (pathlike[has](this.type)) {
+                os.left != (t = -left * zoom + "px") && (os.left = t);
+                os.top != (t = -top * zoom + "px") && (os.top = t);
+            } else if (this.type == "text") {
+                os.left != (t = -left + "px") && (os.left = t);
+                os.top != (t = -top + "px") && (os.top = t);
+            } else {
+                gs.width != (t = this.paper.width + "px") && (gs.width = t);
+                gs.height != (t = this.paper.height + "px") && (gs.height = t);
+                os.left != (t = x - left + "px") && (os.left = t);
+                os.top != (t = y - top + "px") && (os.top = t);
+                os.width != (t = w + "px") && (os.width = t);
+                os.height != (t = h + "px") && (os.height = t);
+            }
+        };
+        elproto.hide = function () {
+            !this.removed && (this.Group.style.display = "none");
+            return this;
+        };
+        elproto.show = function () {
+            !this.removed && (this.Group.style.display = "block");
+            return this;
+        };
+        elproto.getBBox = function () {
+            if (this.removed) {
+                return this;
+            }
+            if (pathlike[has](this.type)) {
+                return pathDimensions(this.attrs.path);
+            }
+            return {
+                x: this.X + (this.bbx || 0),
+                y: this.Y,
+                width: this.W,
+                height: this.H
+            };
+        };
+        elproto.remove = function () {
+            if (this.removed) {
+                return;
+            }
+            tear(this, this.paper);
+            this.node.parentNode.removeChild(this.node);
+            this.Group.parentNode.removeChild(this.Group);
+            this.shape && this.shape.parentNode.removeChild(this.shape);
+            for (var i in this) {
+                delete this[i];
+            }
+            this.removed = true;
+        };
+        elproto.attr = function (name, value) {
+            if (this.removed) {
+                return this;
+            }
+            if (name == null) {
+                var res = {};
+                for (var i in this.attrs) if (this.attrs[has](i)) {
+                    res[i] = this.attrs[i];
+                }
+                this._.rt.deg && (res.rotation = this.rotate());
+                (this._.sx != 1 || this._.sy != 1) && (res.scale = this.scale());
+                res.gradient && res.fill == "none" && (res.fill = res.gradient) && delete res.gradient;
+                return res;
+            }
+            if (value == null && R.is(name, "string")) {
+                if (name == "translation") {
+                    return translate.call(this);
+                }
+                if (name == "rotation") {
+                    return this.rotate();
+                }
+                if (name == "scale") {
+                    return this.scale();
+                }
+                if (name == fillString && this.attrs.fill == "none" && this.attrs.gradient) {
+                    return this.attrs.gradient;
+                }
+                return this.attrs[name];
+            }
+            if (this.attrs && value == null && R.is(name, array)) {
+                var ii, values = {};
+                for (i = 0, ii = name[length]; i < ii; i++) {
+                    values[name[i]] = this.attr(name[i]);
+                }
+                return values;
+            }
+            var params;
+            if (value != null) {
+                params = {};
+                params[name] = value;
+            }
+            value == null && R.is(name, "object") && (params = name);
+            if (params) {
+                for (var key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], "function")) {
+                    var par = this.paper.customAttributes[key].apply(this, [][concat](params[key]));
+                    this.attrs[key] = params[key];
+                    for (var subkey in par) if (par[has](subkey)) {
+                        params[subkey] = par[subkey];
+                    }
+                }
+                if (params.text && this.type == "text") {
+                    this.node.string = params.text;
+                }
+                setFillAndStroke(this, params);
+                if (params.gradient && (({circle: 1, ellipse: 1})[has](this.type) || Str(params.gradient).charAt() != "r")) {
+                    addGradientFill(this, params.gradient);
+                }
+                (!pathlike[has](this.type) || this._.rt.deg) && this.setBox(this.attrs);
+            }
+            return this;
+        };
+        elproto.toFront = function () {
+            !this.removed && this.Group.parentNode[appendChild](this.Group);
+            this.paper.top != this && tofront(this, this.paper);
+            return this;
+        };
+        elproto.toBack = function () {
+            if (this.removed) {
+                return this;
+            }
+            if (this.Group.parentNode.firstChild != this.Group) {
+                this.Group.parentNode.insertBefore(this.Group, this.Group.parentNode.firstChild);
+                toback(this, this.paper);
+            }
+            return this;
+        };
+        elproto.insertAfter = function (element) {
+            if (this.removed) {
+                return this;
+            }
+            if (element.constructor == Set) {
+                element = element[element.length - 1];
+            }
+            if (element.Group.nextSibling) {
+                element.Group.parentNode.insertBefore(this.Group, element.Group.nextSibling);
+            } else {
+                element.Group.parentNode[appendChild](this.Group);
+            }
+            insertafter(this, element, this.paper);
+            return this;
+        };
+        elproto.insertBefore = function (element) {
+            if (this.removed) {
+                return this;
+            }
+            if (element.constructor == Set) {
+                element = element[0];
+            }
+            element.Group.parentNode.insertBefore(this.Group, element.Group);
+            insertbefore(this, element, this.paper);
+            return this;
+        };
+        elproto.blur = function (size) {
+            var s = this.node.runtimeStyle,
+                f = s.filter;
+            f = f.replace(blurregexp, E);
+            if (+size !== 0) {
+                this.attrs.blur = size;
+                s.filter = f + S + ms + ".Blur(pixelradius=" + (+size || 1.5) + ")";
+                s.margin = R.format("-{0}px 0 0 -{0}px", round(+size || 1.5));
+            } else {
+                s.filter = f;
+                s.margin = 0;
+                delete this.attrs.blur;
+            }
+        };
+ 
+        theCircle = function (vml, x, y, r) {
+            var g = createNode("group"),
+                o = createNode("oval"),
+                ol = o.style;
+            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
+            g.coordsize = coordsize;
+            g.coordorigin = vml.coordorigin;
+            g[appendChild](o);
+            var res = new Element(o, g, vml);
+            res.type = "circle";
+            setFillAndStroke(res, {stroke: "#000", fill: "none"});
+            res.attrs.cx = x;
+            res.attrs.cy = y;
+            res.attrs.r = r;
+            res.setBox({x: x - r, y: y - r, width: r * 2, height: r * 2});
+            vml.canvas[appendChild](g);
+            return res;
+        };
+        function rectPath(x, y, w, h, r) {
+            if (r) {
+                return R.format("M{0},{1}l{2},0a{3},{3},0,0,1,{3},{3}l0,{5}a{3},{3},0,0,1,{4},{3}l{6},0a{3},{3},0,0,1,{4},{4}l0,{7}a{3},{3},0,0,1,{3},{4}z", x + r, y, w - r * 2, r, -r, h - r * 2, r * 2 - w, r * 2 - h);
+            } else {
+                return R.format("M{0},{1}l{2},0,0,{3},{4},0z", x, y, w, h, -w);
+            }
+        }
+        theRect = function (vml, x, y, w, h, r) {
+            var path = rectPath(x, y, w, h, r),
+                res = vml.path(path),
+                a = res.attrs;
+            res.X = a.x = x;
+            res.Y = a.y = y;
+            res.W = a.width = w;
+            res.H = a.height = h;
+            a.r = r;
+            a.path = path;
+            res.type = "rect";
+            return res;
+        };
+        theEllipse = function (vml, x, y, rx, ry) {
+            var g = createNode("group"),
+                o = createNode("oval"),
+                ol = o.style;
+            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
+            g.coordsize = coordsize;
+            g.coordorigin = vml.coordorigin;
+            g[appendChild](o);
+            var res = new Element(o, g, vml);
+            res.type = "ellipse";
+            setFillAndStroke(res, {stroke: "#000"});
+            res.attrs.cx = x;
+            res.attrs.cy = y;
+            res.attrs.rx = rx;
+            res.attrs.ry = ry;
+            res.setBox({x: x - rx, y: y - ry, width: rx * 2, height: ry * 2});
+            vml.canvas[appendChild](g);
+            return res;
+        };
+        theImage = function (vml, src, x, y, w, h) {
+            var g = createNode("group"),
+                o = createNode("image");
+            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
+            g.coordsize = coordsize;
+            g.coordorigin = vml.coordorigin;
+            o.src = src;
+            g[appendChild](o);
+            var res = new Element(o, g, vml);
+            res.type = "image";
+            res.attrs.src = src;
+            res.attrs.x = x;
+            res.attrs.y = y;
+            res.attrs.w = w;
+            res.attrs.h = h;
+            res.setBox({x: x, y: y, width: w, height: h});
+            vml.canvas[appendChild](g);
+            return res;
+        };
+        theText = function (vml, x, y, text) {
+            var g = createNode("group"),
+                el = createNode("shape"),
+                ol = el.style,
+                path = createNode("path"),
+                ps = path.style,
+                o = createNode("textpath");
+            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
+            g.coordsize = coordsize;
+            g.coordorigin = vml.coordorigin;
+            path.v = R.format("m{0},{1}l{2},{1}", round(x * 10), round(y * 10), round(x * 10) + 1);
+            path.textpathok = true;
+            ol.width = vml.width;
+            ol.height = vml.height;
+            o.string = Str(text);
+            o.on = true;
+            el[appendChild](o);
+            el[appendChild](path);
+            g[appendChild](el);
+            var res = new Element(o, g, vml);
+            res.shape = el;
+            res.textpath = path;
+            res.type = "text";
+            res.attrs.text = text;
+            res.attrs.x = x;
+            res.attrs.y = y;
+            res.attrs.w = 1;
+            res.attrs.h = 1;
+            setFillAndStroke(res, {font: availableAttrs.font, stroke: "none", fill: "#000"});
+            res.setBox();
+            vml.canvas[appendChild](g);
+            return res;
+        };
+        setSize = function (width, height) {
+            var cs = this.canvas.style;
+            width == +width && (width += "px");
+            height == +height && (height += "px");
+            cs.width = width;
+            cs.height = height;
+            cs.clip = "rect(0 " + width + " " + height + " 0)";
+            return this;
+        };
+        var createNode;
+        doc.createStyleSheet().addRule(".rvml", "behavior:url(#default#VML)");
+        try {
+            !doc.namespaces.rvml && doc.namespaces.add("rvml", "urn:schemas-microsoft-com:vml");
+            createNode = function (tagName) {
+                return doc.createElement('<rvml:' + tagName + ' class="rvml">');
+            };
+        } catch (e) {
+            createNode = function (tagName) {
+                return doc.createElement('<' + tagName + ' xmlns="urn:schemas-microsoft.com:vml" class="rvml">');
+            };
+        }
+        create = function () {
+            var con = getContainer[apply](0, arguments),
+                container = con.container,
+                height = con.height,
+                s,
+                width = con.width,
+                x = con.x,
+                y = con.y;
+            if (!container) {
+                throw new Error("VML container not found.");
+            }
+            var res = new Paper,
+                c = res.canvas = doc.createElement("div"),
+                cs = c.style;
+            x = x || 0;
+            y = y || 0;
+            width = width || 512;
+            height = height || 342;
+            width == +width && (width += "px");
+            height == +height && (height += "px");
+            res.width = 1e3;
+            res.height = 1e3;
+            res.coordsize = zoom * 1e3 + S + zoom * 1e3;
+            res.coordorigin = "0 0";
+            res.span = doc.createElement("span");
+            res.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";
+            c[appendChild](res.span);
+            cs.cssText = R.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden", width, height);
+            if (container == 1) {
+                doc.body[appendChild](c);
+                cs.left = x + "px";
+                cs.top = y + "px";
+                cs.position = "absolute";
+            } else {
+                if (container.firstChild) {
+                    container.insertBefore(c, container.firstChild);
+                } else {
+                    container[appendChild](c);
+                }
+            }
+            plugins.call(res, res, R.fn);
+            return res;
+        };
+        paperproto.clear = function () {
+            this.canvas.innerHTML = E;
+            this.span = doc.createElement("span");
+            this.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";
+            this.canvas[appendChild](this.span);
+            this.bottom = this.top = null;
+        };
+        paperproto.remove = function () {
+            this.canvas.parentNode.removeChild(this.canvas);
+            for (var i in this) {
+                this[i] = removed(i);
+            }
+            return true;
+        };
+    }
+ 
+    // rest
+    // WebKit rendering bug workaround method
+    var version = navigator.userAgent.match(/Version\/(.*?)\s/);
+    if ((navigator.vendor == "Apple Computer, Inc.") && (version && version[1] < 4 || navigator.platform.slice(0, 2) == "iP")) {
+        paperproto.safari = function () {
+            var rect = this.rect(-99, -99, this.width + 99, this.height + 99).attr({stroke: "none"});
+            win.setTimeout(function () {rect.remove();});
+        };
+    } else {
+        paperproto.safari = function () {};
+    }
+ 
+    // Events
+    var preventDefault = function () {
+        this.returnValue = false;
+    },
+    preventTouch = function () {
+        return this.originalEvent.preventDefault();
+    },
+    stopPropagation = function () {
+        this.cancelBubble = true;
+    },
+    stopTouch = function () {
+        return this.originalEvent.stopPropagation();
+    },
+    addEvent = (function () {
+        if (doc.addEventListener) {
+            return function (obj, type, fn, element) {
+                var realName = supportsTouch && touchMap[type] ? touchMap[type] : type;
+                var f = function (e) {
+                    if (supportsTouch && touchMap[has](type)) {
+                        for (var i = 0, ii = e.targetTouches && e.targetTouches.length; i < ii; i++) {
+                            if (e.targetTouches[i].target == obj) {
+                                var olde = e;
+                                e = e.targetTouches[i];
+                                e.originalEvent = olde;
+                                e.preventDefault = preventTouch;
+                                e.stopPropagation = stopTouch;
+                                break;
+                            }
+                        }
+                    }
+                    return fn.call(element, e);
+                };
+                obj.addEventListener(realName, f, false);
+                return function () {
+                    obj.removeEventListener(realName, f, false);
+                    return true;
+                };
+            };
+        } else if (doc.attachEvent) {
+            return function (obj, type, fn, element) {
+                var f = function (e) {
+                    e = e || win.event;
+                    e.preventDefault = e.preventDefault || preventDefault;
+                    e.stopPropagation = e.stopPropagation || stopPropagation;
+                    return fn.call(element, e);
+                };
+                obj.attachEvent("on" + type, f);
+                var detacher = function () {
+                    obj.detachEvent("on" + type, f);
+                    return true;
+                };
+                return detacher;
+            };
+        }
+    })(),
+    drag = [],
+    dragMove = function (e) {
+        var x = e.clientX,
+            y = e.clientY,
+            scrollY = doc.documentElement.scrollTop || doc.body.scrollTop,
+            scrollX = doc.documentElement.scrollLeft || doc.body.scrollLeft,
+            dragi,
+            j = drag.length;
+        while (j--) {
+            dragi = drag[j];
+            if (supportsTouch) {
+                var i = e.touches.length,
+                    touch;
+                while (i--) {
+                    touch = e.touches[i];
+                    if (touch.identifier == dragi.el._drag.id) {
+                        x = touch.clientX;
+                        y = touch.clientY;
+                        (e.originalEvent ? e.originalEvent : e).preventDefault();
+                        break;
+                    }
+                }
+            } else {
+                e.preventDefault();
+            }
+            x += scrollX;
+            y += scrollY;
+            dragi.move && dragi.move.call(dragi.move_scope || dragi.el, x - dragi.el._drag.x, y - dragi.el._drag.y, x, y, e);
+        }
+    },
+    dragUp = function (e) {
+        R.unmousemove(dragMove).unmouseup(dragUp);
+        var i = drag.length,
+            dragi;
+        while (i--) {
+            dragi = drag[i];
+            dragi.el._drag = {};
+            dragi.end && dragi.end.call(dragi.end_scope || dragi.start_scope || dragi.move_scope || dragi.el, e);
+        }
+        drag = [];
+    };
+    for (var i = events[length]; i--;) {
+        (function (eventName) {
+            R[eventName] = Element[proto][eventName] = function (fn, scope) {
+                if (R.is(fn, "function")) {
+                    this.events = this.events || [];
+                    this.events.push({name: eventName, f: fn, unbind: addEvent(this.shape || this.node || doc, eventName, fn, scope || this)});
+                }
+                return this;
+            };
+            R["un" + eventName] = Element[proto]["un" + eventName] = function (fn) {
+                var events = this.events,
+                    l = events[length];
+                while (l--) if (events[l].name == eventName && events[l].f == fn) {
+                    events[l].unbind();
+                    events.splice(l, 1);
+                    !events.length && delete this.events;
+                    return this;
+                }
+                return this;
+            };
+        })(events[i]);
+    }
+    elproto.hover = function (f_in, f_out, scope_in, scope_out) {
+        return this.mouseover(f_in, scope_in).mouseout(f_out, scope_out || scope_in);
+    };
+    elproto.unhover = function (f_in, f_out) {
+        return this.unmouseover(f_in).unmouseout(f_out);
+    };
+    elproto.drag = function (onmove, onstart, onend, move_scope, start_scope, end_scope) {
+        this._drag = {};
+        this.mousedown(function (e) {
+            (e.originalEvent || e).preventDefault();
+            var scrollY = doc.documentElement.scrollTop || doc.body.scrollTop,
+                scrollX = doc.documentElement.scrollLeft || doc.body.scrollLeft;
+            this._drag.x = e.clientX + scrollX;
+            this._drag.y = e.clientY + scrollY;
+            this._drag.id = e.identifier;
+            onstart && onstart.call(start_scope || move_scope || this, e.clientX + scrollX, e.clientY + scrollY, e);
+            !drag.length && R.mousemove(dragMove).mouseup(dragUp);
+            drag.push({el: this, move: onmove, end: onend, move_scope: move_scope, start_scope: start_scope, end_scope: end_scope});
+        });
+        return this;
+    };
+    elproto.undrag = function (onmove, onstart, onend) {
+        var i = drag.length;
+        while (i--) {
+            drag[i].el == this && (drag[i].move == onmove && drag[i].end == onend) && drag.splice(i++, 1);
+        }
+        !drag.length && R.unmousemove(dragMove).unmouseup(dragUp);
+    };
+    paperproto.circle = function (x, y, r) {
+        return theCircle(this, x || 0, y || 0, r || 0);
+    };
+    paperproto.rect = function (x, y, w, h, r) {
+        return theRect(this, x || 0, y || 0, w || 0, h || 0, r || 0);
+    };
+    paperproto.ellipse = function (x, y, rx, ry) {
+        return theEllipse(this, x || 0, y || 0, rx || 0, ry || 0);
+    };
+    paperproto.path = function (pathString) {
+        pathString && !R.is(pathString, string) && !R.is(pathString[0], array) && (pathString += E);
+        return thePath(R.format[apply](R, arguments), this);
+    };
+    paperproto.image = function (src, x, y, w, h) {
+        return theImage(this, src || "about:blank", x || 0, y || 0, w || 0, h || 0);
+    };
+    paperproto.text = function (x, y, text) {
+        return theText(this, x || 0, y || 0, Str(text));
+    };
+    paperproto.set = function (itemsArray) {
+        arguments[length] > 1 && (itemsArray = Array[proto].splice.call(arguments, 0, arguments[length]));
+        return new Set(itemsArray);
+    };
+    paperproto.setSize = setSize;
+    paperproto.top = paperproto.bottom = null;
+    paperproto.raphael = R;
+    function x_y() {
+        return this.x + S + this.y;
+    }
+    elproto.resetScale = function () {
+        if (this.removed) {
+            return this;
+        }
+        this._.sx = 1;
+        this._.sy = 1;
+        this.attrs.scale = "1 1";
+    };
+    elproto.scale = function (x, y, cx, cy) {
+        if (this.removed) {
+            return this;
+        }
+        if (x == null && y == null) {
+            return {
+                x: this._.sx,
+                y: this._.sy,
+                toString: x_y
+            };
+        }
+        y = y || x;
+        !+y && (y = x);
+        var dx,
+            dy,
+            dcx,
+            dcy,
+            a = this.attrs;
+        if (x != 0) {
+            var bb = this.getBBox(),
+                rcx = bb.x + bb.width / 2,
+                rcy = bb.y + bb.height / 2,
+                kx = abs(x / this._.sx),
+                ky = abs(y / this._.sy);
+            cx = (+cx || cx == 0) ? cx : rcx;
+            cy = (+cy || cy == 0) ? cy : rcy;
+            var posx = this._.sx > 0,
+                posy = this._.sy > 0,
+                dirx = ~~(x / abs(x)),
+                diry = ~~(y / abs(y)),
+                dkx = kx * dirx,
+                dky = ky * diry,
+                s = this.node.style,
+                ncx = cx + abs(rcx - cx) * dkx * (rcx > cx == posx ? 1 : -1),
+                ncy = cy + abs(rcy - cy) * dky * (rcy > cy == posy ? 1 : -1),
+                fr = (x * dirx > y * diry ? ky : kx);
+            switch (this.type) {
+                case "rect":
+                case "image":
+                    var neww = a.width * kx,
+                        newh = a.height * ky;
+                    this.attr({
+                        height: newh,
+                        r: a.r * fr,
+                        width: neww,
+                        x: ncx - neww / 2,
+                        y: ncy - newh / 2
+                    });
+                    break;
+                case "circle":
+                case "ellipse":
+                    this.attr({
+                        rx: a.rx * kx,
+                        ry: a.ry * ky,
+                        r: a.r * fr,
+                        cx: ncx,
+                        cy: ncy
+                    });
+                    break;
+                case "text":
+                    this.attr({
+                        x: ncx,
+                        y: ncy
+                    });
+                    break;
+                case "path":
+                    var path = pathToRelative(a.path),
+                        skip = true,
+                        fx = posx ? dkx : kx,
+                        fy = posy ? dky : ky;
+                    for (var i = 0, ii = path[length]; i < ii; i++) {
+                        var p = path[i],
+                            P0 = upperCase.call(p[0]);
+                        if (P0 == "M" && skip) {
+                            continue;
+                        } else {
+                            skip = false;
+                        }
+                        if (P0 == "A") {
+                            p[path[i][length] - 2] *= fx;
+                            p[path[i][length] - 1] *= fy;
+                            p[1] *= kx;
+                            p[2] *= ky;
+                            p[5] = +(dirx + diry ? !!+p[5] : !+p[5]);
+                        } else if (P0 == "H") {
+                            for (var j = 1, jj = p[length]; j < jj; j++) {
+                                p[j] *= fx;
+                            }
+                        } else if (P0 == "V") {
+                            for (j = 1, jj = p[length]; j < jj; j++) {
+                                p[j] *= fy;
+                            }
+                         } else {
+                            for (j = 1, jj = p[length]; j < jj; j++) {
+                                p[j] *= (j % 2) ? fx : fy;
+                            }
+                        }
+                    }
+                    var dim2 = pathDimensions(path);
+                    dx = ncx - dim2.x - dim2.width / 2;
+                    dy = ncy - dim2.y - dim2.height / 2;
+                    path[0][1] += dx;
+                    path[0][2] += dy;
+                    this.attr({path: path});
+                break;
+            }
+            if (this.type in {text: 1, image:1} && (dirx != 1 || diry != 1)) {
+                if (this.transformations) {
+                    this.transformations[2] = "scale("[concat](dirx, ",", diry, ")");
+                    this.node[setAttribute]("transform", this.transformations[join](S));
+                    dx = (dirx == -1) ? -a.x - (neww || 0) : a.x;
+                    dy = (diry == -1) ? -a.y - (newh || 0) : a.y;
+                    this.attr({x: dx, y: dy});
+                    a.fx = dirx - 1;
+                    a.fy = diry - 1;
+                } else {
+                    this.node.filterMatrix = ms + ".Matrix(M11="[concat](dirx,
+                        ", M12=0, M21=0, M22=", diry,
+                        ", Dx=0, Dy=0, sizingmethod='auto expand', filtertype='bilinear')");
+                    s.filter = (this.node.filterMatrix || E) + (this.node.filterOpacity || E);
+                }
+            } else {
+                if (this.transformations) {
+                    this.transformations[2] = E;
+                    this.node[setAttribute]("transform", this.transformations[join](S));
+                    a.fx = 0;
+                    a.fy = 0;
+                } else {
+                    this.node.filterMatrix = E;
+                    s.filter = (this.node.filterMatrix || E) + (this.node.filterOpacity || E);
+                }
+            }
+            a.scale = [x, y, cx, cy][join](S);
+            this._.sx = x;
+            this._.sy = y;
+        }
+        return this;
+    };
+    elproto.clone = function () {
+        if (this.removed) {
+            return null;
+        }
+        var attr = this.attr();
+        delete attr.scale;
+        delete attr.translation;
+        return this.paper[this.type]().attr(attr);
+    };
+    var curveslengths = {},
+    getPointAtSegmentLength = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length) {
+        var len = 0,
+            precision = 100,
+            name = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y].join(),
+            cache = curveslengths[name],
+            old, dot;
+        !cache && (curveslengths[name] = cache = {data: []});
+        cache.timer && clearTimeout(cache.timer);
+        cache.timer = setTimeout(function () {delete curveslengths[name];}, 2000);
+        if (length != null) {
+            var total = getPointAtSegmentLength(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y);
+            precision = ~~total * 10;
+        }
+        for (var i = 0; i < precision + 1; i++) {
+            if (cache.data[length] > i) {
+                dot = cache.data[i * precision];
+            } else {
+                dot = R.findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, i / precision);
+                cache.data[i] = dot;
+            }
+            i && (len += pow(pow(old.x - dot.x, 2) + pow(old.y - dot.y, 2), .5));
+            if (length != null && len >= length) {
+                return dot;
+            }
+            old = dot;
+        }
+        if (length == null) {
+            return len;
+        }
+    },
+    getLengthFactory = function (istotal, subpath) {
+        return function (path, length, onlystart) {
+            path = path2curve(path);
+            var x, y, p, l, sp = "", subpaths = {}, point,
+                len = 0;
+            for (var i = 0, ii = path.length; i < ii; i++) {
+                p = path[i];
+                if (p[0] == "M") {
+                    x = +p[1];
+                    y = +p[2];
+                } else {
+                    l = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);
+                    if (len + l > length) {
+                        if (subpath && !subpaths.start) {
+                            point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);
+                            sp += ["C", point.start.x, point.start.y, point.m.x, point.m.y, point.x, point.y];
+                            if (onlystart) {return sp;}
+                            subpaths.start = sp;
+                            sp = ["M", point.x, point.y + "C", point.n.x, point.n.y, point.end.x, point.end.y, p[5], p[6]][join]();
+                            len += l;
+                            x = +p[5];
+                            y = +p[6];
+                            continue;
+                        }
+                        if (!istotal && !subpath) {
+                            point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);
+                            return {x: point.x, y: point.y, alpha: point.alpha};
+                        }
+                    }
+                    len += l;
+                    x = +p[5];
+                    y = +p[6];
+                }
+                sp += p;
+            }
+            subpaths.end = sp;
+            point = istotal ? len : subpath ? subpaths : R.findDotsAtSegment(x, y, p[1], p[2], p[3], p[4], p[5], p[6], 1);
+            point.alpha && (point = {x: point.x, y: point.y, alpha: point.alpha});
+            return point;
+        };
+    };
+    var getTotalLength = getLengthFactory(1),
+        getPointAtLength = getLengthFactory(),
+        getSubpathsAtLength = getLengthFactory(0, 1);
+    elproto.getTotalLength = function () {
+        if (this.type != "path") {return;}
+        if (this.node.getTotalLength) {
+            return this.node.getTotalLength();
+        }
+        return getTotalLength(this.attrs.path);
+    };
+    elproto.getPointAtLength = function (length) {
+        if (this.type != "path") {return;}
+        return getPointAtLength(this.attrs.path, length);
+    };
+    elproto.getSubpath = function (from, to) {
+        if (this.type != "path") {return;}
+        if (abs(this.getTotalLength() - to) < "1e-6") {
+            return getSubpathsAtLength(this.attrs.path, from).end;
+        }
+        var a = getSubpathsAtLength(this.attrs.path, to, 1);
+        return from ? getSubpathsAtLength(a, from).end : a;
+    };
+
+    // animation easing formulas
+    R.easing_formulas = {
+        linear: function (n) {
+            return n;
+        },
+        "<": function (n) {
+            return pow(n, 3);
+        },
+        ">": function (n) {
+            return pow(n - 1, 3) + 1;
+        },
+        "<>": function (n) {
+            n = n * 2;
+            if (n < 1) {
+                return pow(n, 3) / 2;
+            }
+            n -= 2;
+            return (pow(n, 3) + 2) / 2;
+        },
+        backIn: function (n) {
+            var s = 1.70158;
+            return n * n * ((s + 1) * n - s);
+        },
+        backOut: function (n) {
+            n = n - 1;
+            var s = 1.70158;
+            return n * n * ((s + 1) * n + s) + 1;
+        },
+        elastic: function (n) {
+            if (n == 0 || n == 1) {
+                return n;
+            }
+            var p = .3,
+                s = p / 4;
+            return pow(2, -10 * n) * math.sin((n - s) * (2 * PI) / p) + 1;
+        },
+        bounce: function (n) {
+            var s = 7.5625,
+                p = 2.75,
+                l;
+            if (n < (1 / p)) {
+                l = s * n * n;
+            } else {
+                if (n < (2 / p)) {
+                    n -= (1.5 / p);
+                    l = s * n * n + .75;
+                } else {
+                    if (n < (2.5 / p)) {
+                        n -= (2.25 / p);
+                        l = s * n * n + .9375;
+                    } else {
+                        n -= (2.625 / p);
+                        l = s * n * n + .984375;
+                    }
+                }
+            }
+            return l;
+        }
+    };
+
+    var animationElements = [],
+        animation = function () {
+            var Now = +new Date;
+            for (var l = 0; l < animationElements[length]; l++) {
+                var e = animationElements[l];
+                if (e.stop || e.el.removed) {
+                    continue;
+                }
+                var time = Now - e.start,
+                    ms = e.ms,
+                    easing = e.easing,
+                    from = e.from,
+                    diff = e.diff,
+                    to = e.to,
+                    t = e.t,
+                    that = e.el,
+                    set = {},
+                    now;
+                if (time < ms) {
+                    var pos = easing(time / ms);
+                    for (var attr in from) if (from[has](attr)) {
+                        switch (availableAnimAttrs[attr]) {
+                            case "along":
+                                now = pos * ms * diff[attr];
+                                to.back && (now = to.len - now);
+                                var point = getPointAtLength(to[attr], now);
+                                that.translate(diff.sx - diff.x || 0, diff.sy - diff.y || 0);
+                                diff.x = point.x;
+                                diff.y = point.y;
+                                that.translate(point.x - diff.sx, point.y - diff.sy);
+                                to.rot && that.rotate(diff.r + point.alpha, point.x, point.y);
+                                break;
+                            case nu:
+                                now = +from[attr] + pos * ms * diff[attr];
+                                break;
+                            case "colour":
+                                now = "rgb(" + [
+                                    upto255(round(from[attr].r + pos * ms * diff[attr].r)),
+                                    upto255(round(from[attr].g + pos * ms * diff[attr].g)),
+                                    upto255(round(from[attr].b + pos * ms * diff[attr].b))
+                                ][join](",") + ")";
+                                break;
+                            case "path":
+                                now = [];
+                                for (var i = 0, ii = from[attr][length]; i < ii; i++) {
+                                    now[i] = [from[attr][i][0]];
+                                    for (var j = 1, jj = from[attr][i][length]; j < jj; j++) {
+                                        now[i][j] = +from[attr][i][j] + pos * ms * diff[attr][i][j];
+                                    }
+                                    now[i] = now[i][join](S);
+                                }
+                                now = now[join](S);
+                                break;
+                            case "csv":
+                                switch (attr) {
+                                    case "translation":
+                                        var x = pos * ms * diff[attr][0] - t.x,
+                                            y = pos * ms * diff[attr][1] - t.y;
+                                        t.x += x;
+                                        t.y += y;
+                                        now = x + S + y;
+                                    break;
+                                    case "rotation":
+                                        now = +from[attr][0] + pos * ms * diff[attr][0];
+                                        from[attr][1] && (now += "," + from[attr][1] + "," + from[attr][2]);
+                                    break;
+                                    case "scale":
+                                        now = [+from[attr][0] + pos * ms * diff[attr][0], +from[attr][1] + pos * ms * diff[attr][1], (2 in to[attr] ? to[attr][2] : E), (3 in to[attr] ? to[attr][3] : E)][join](S);
+                                    break;
+                                    case "clip-rect":
+                                        now = [];
+                                        i = 4;
+                                        while (i--) {
+                                            now[i] = +from[attr][i] + pos * ms * diff[attr][i];
+                                        }
+                                    break;
+                                }
+                                break;
+                            default:
+                              var from2 = [].concat(from[attr]);
+                                now = [];
+                                i = that.paper.customAttributes[attr].length;
+                                while (i--) {
+                                    now[i] = +from2[i] + pos * ms * diff[attr][i];
+                                }
+                                break;
+                        }
+                        set[attr] = now;
+                    }
+                    that.attr(set);
+                    that._run && that._run.call(that);
+                } else {
+                    if (to.along) {
+                        point = getPointAtLength(to.along, to.len * !to.back);
+                        that.translate(diff.sx - (diff.x || 0) + point.x - diff.sx, diff.sy - (diff.y || 0) + point.y - diff.sy);
+                        to.rot && that.rotate(diff.r + point.alpha, point.x, point.y);
+                    }
+                    (t.x || t.y) && that.translate(-t.x, -t.y);
+                    to.scale && (to.scale += E);
+                    that.attr(to);
+                    animationElements.splice(l--, 1);
+                }
+            }
+            R.svg && that && that.paper && that.paper.safari();
+            animationElements[length] && setTimeout(animation);
+        },
+        keyframesRun = function (attr, element, time, prev, prevcallback) {
+            var dif = time - prev;
+            element.timeouts.push(setTimeout(function () {
+                R.is(prevcallback, "function") && prevcallback.call(element);
+                element.animate(attr, dif, attr.easing);
+            }, prev));
+        },
+        upto255 = function (color) {
+            return mmax(mmin(color, 255), 0);
+        },
+        translate = function (x, y) {
+            if (x == null) {
+                return {x: this._.tx, y: this._.ty, toString: x_y};
+            }
+            this._.tx += +x;
+            this._.ty += +y;
+            switch (this.type) {
+                case "circle":
+                case "ellipse":
+                    this.attr({cx: +x + this.attrs.cx, cy: +y + this.attrs.cy});
+                    break;
+                case "rect":
+                case "image":
+                case "text":
+                    this.attr({x: +x + this.attrs.x, y: +y + this.attrs.y});
+                    break;
+                case "path":
+                    var path = pathToRelative(this.attrs.path);
+                    path[0][1] += +x;
+                    path[0][2] += +y;
+                    this.attr({path: path});
+                break;
+            }
+            return this;
+        };
+    elproto.animateWith = function (element, params, ms, easing, callback) {
+        for (var i = 0, ii = animationElements.length; i < ii; i++) {
+            if (animationElements[i].el.id == element.id) {
+                params.start = animationElements[i].start;
+            }
+        }
+        return this.animate(params, ms, easing, callback);
+    };
+    elproto.animateAlong = along();
+    elproto.animateAlongBack = along(1);
+    function along(isBack) {
+        return function (path, ms, rotate, callback) {
+            var params = {back: isBack};
+            R.is(rotate, "function") ? (callback = rotate) : (params.rot = rotate);
+            path && path.constructor == Element && (path = path.attrs.path);
+            path && (params.along = path);
+            return this.animate(params, ms, callback);
+        };
+    }
+    function CubicBezierAtTime(t, p1x, p1y, p2x, p2y, duration) {
+        var cx = 3 * p1x,
+            bx = 3 * (p2x - p1x) - cx,
+            ax = 1 - cx - bx,
+            cy = 3 * p1y,
+            by = 3 * (p2y - p1y) - cy,
+            ay = 1 - cy - by;
+        function sampleCurveX(t) {
+            return ((ax * t + bx) * t + cx) * t;
+        }
+        function solve(x, epsilon) {
+            var t = solveCurveX(x, epsilon);
+            return ((ay * t + by) * t + cy) * t;
+        }
+        function solveCurveX(x, epsilon) {
+            var t0, t1, t2, x2, d2, i;
+            for(t2 = x, i = 0; i < 8; i++) {
+                x2 = sampleCurveX(t2) - x;
+                if (abs(x2) < epsilon) {
+                    return t2;
+                }
+                d2 = (3 * ax * t2 + 2 * bx) * t2 + cx;
+                if (abs(d2) < 1e-6) {
+                    break;
+                }
+                t2 = t2 - x2 / d2;
+            }
+            t0 = 0;
+            t1 = 1;
+            t2 = x;
+            if (t2 < t0) {
+                return t0;
+            }
+            if (t2 > t1) {
+                return t1;
+            }
+            while (t0 < t1) {
+                x2 = sampleCurveX(t2);
+                if (abs(x2 - x) < epsilon) {
+                    return t2;
+                }
+                if (x > x2) {
+                    t0 = t2;
+                } else {
+                    t1 = t2;
+                }
+                t2 = (t1 - t0) / 2 + t0;
+            }
+            return t2;
+        }
+        return solve(t, 1 / (200 * duration));
+    }
+    elproto.onAnimation = function (f) {
+        this._run = f || 0;
+        return this;
+    };
+    elproto.animate = function (params, ms, easing, callback) {
+        var element = this;
+        element.timeouts = element.timeouts || [];
+        if (R.is(easing, "function") || !easing) {
+            callback = easing || null;
+        }
+        if (element.removed) {
+            callback && callback.call(element);
+            return element;
+        }
+        var from = {},
+            to = {},
+            animateable = false,
+            diff = {};
+        for (var attr in params) if (params[has](attr)) {
+            if (availableAnimAttrs[has](attr) || element.paper.customAttributes[has](attr)) {
+                animateable = true;
+                from[attr] = element.attr(attr);
+                (from[attr] == null) && (from[attr] = availableAttrs[attr]);
+                to[attr] = params[attr];
+                switch (availableAnimAttrs[attr]) {
+                    case "along":
+                        var len = getTotalLength(params[attr]);
+                        var point = getPointAtLength(params[attr], len * !!params.back);
+                        var bb = element.getBBox();
+                        diff[attr] = len / ms;
+                        diff.tx = bb.x;
+                        diff.ty = bb.y;
+                        diff.sx = point.x;
+                        diff.sy = point.y;
+                        to.rot = params.rot;
+                        to.back = params.back;
+                        to.len = len;
+                        params.rot && (diff.r = toFloat(element.rotate()) || 0);
+                        break;
+                    case nu:
+                        diff[attr] = (to[attr] - from[attr]) / ms;
+                        break;
+                    case "colour":
+                        from[attr] = R.getRGB(from[attr]);
+                        var toColour = R.getRGB(to[attr]);
+                        diff[attr] = {
+                            r: (toColour.r - from[attr].r) / ms,
+                            g: (toColour.g - from[attr].g) / ms,
+                            b: (toColour.b - from[attr].b) / ms
+                        };
+                        break;
+                    case "path":
+                        var pathes = path2curve(from[attr], to[attr]);
+                        from[attr] = pathes[0];
+                        var toPath = pathes[1];
+                        diff[attr] = [];
+                        for (var i = 0, ii = from[attr][length]; i < ii; i++) {
+                            diff[attr][i] = [0];
+                            for (var j = 1, jj = from[attr][i][length]; j < jj; j++) {
+                                diff[attr][i][j] = (toPath[i][j] - from[attr][i][j]) / ms;
+                            }
+                        }
+                        break;
+                    case "csv":
+                        var values = Str(params[attr])[split](separator),
+                            from2 = Str(from[attr])[split](separator);
+                        switch (attr) {
+                            case "translation":
+                                from[attr] = [0, 0];
+                                diff[attr] = [values[0] / ms, values[1] / ms];
+                            break;
+                            case "rotation":
+                                from[attr] = (from2[1] == values[1] && from2[2] == values[2]) ? from2 : [0, values[1], values[2]];
+                                diff[attr] = [(values[0] - from[attr][0]) / ms, 0, 0];
+                            break;
+                            case "scale":
+                                params[attr] = values;
+                                from[attr] = Str(from[attr])[split](separator);
+                                diff[attr] = [(values[0] - from[attr][0]) / ms, (values[1] - from[attr][1]) / ms, 0, 0];
+                            break;
+                            case "clip-rect":
+                                from[attr] = Str(from[attr])[split](separator);
+                                diff[attr] = [];
+                                i = 4;
+                                while (i--) {
+                                    diff[attr][i] = (values[i] - from[attr][i]) / ms;
+                                }
+                            break;
+                        }
+                        to[attr] = values;
+                        break;
+                    default:
+                        values = [].concat(params[attr]);
+                        from2 = [].concat(from[attr]);
+                        diff[attr] = [];
+                        i = element.paper.customAttributes[attr][length];
+                        while (i--) {
+                            diff[attr][i] = ((values[i] || 0) - (from2[i] || 0)) / ms;
+                        }
+                        break;
+                }
+            }
+        }
+        if (!animateable) {
+            var attrs = [],
+                lastcall;
+            for (var key in params) if (params[has](key) && animKeyFrames.test(key)) {
+                attr = {value: params[key]};
+                key == "from" && (key = 0);
+                key == "to" && (key = 100);
+                attr.key = toInt(key, 10);
+                attrs.push(attr);
+            }
+            attrs.sort(sortByKey);
+            if (attrs[0].key) {
+                attrs.unshift({key: 0, value: element.attrs});
+            }
+            for (i = 0, ii = attrs[length]; i < ii; i++) {
+                keyframesRun(attrs[i].value, element, ms / 100 * attrs[i].key, ms / 100 * (attrs[i - 1] && attrs[i - 1].key || 0), attrs[i - 1] && attrs[i - 1].value.callback);
+            }
+            lastcall = attrs[attrs[length] - 1].value.callback;
+            if (lastcall) {
+                element.timeouts.push(setTimeout(function () {lastcall.call(element);}, ms));
+            }
+        } else {
+            var easyeasy = R.easing_formulas[easing];
+            if (!easyeasy) {
+                easyeasy = Str(easing).match(bezierrg);
+                if (easyeasy && easyeasy[length] == 5) {
+                    var curve = easyeasy;
+                    easyeasy = function (t) {
+                        return CubicBezierAtTime(t, +curve[1], +curve[2], +curve[3], +curve[4], ms);
+                    };
+                } else {
+                    easyeasy = function (t) {
+                        return t;
+                    };
+                }
+            }
+            animationElements.push({
+                start: params.start || +new Date,
+                ms: ms,
+                easing: easyeasy,
+                from: from,
+                diff: diff,
+                to: to,
+                el: element,
+                t: {x: 0, y: 0}
+            });
+            R.is(callback, "function") && (element._ac = setTimeout(function () {
+                callback.call(element);
+            }, ms));
+            animationElements[length] == 1 && setTimeout(animation);
+        }
+        return this;
+    };
+    elproto.stop = function () {
+        for (var i = 0; i < animationElements.length; i++) {
+            animationElements[i].el.id == this.id && animationElements.splice(i--, 1);
+        }
+        for (i = 0, ii = this.timeouts && this.timeouts.length; i < ii; i++) {
+            clearTimeout(this.timeouts[i]);
+        }
+        this.timeouts = [];
+        clearTimeout(this._ac);
+        delete this._ac;
+        return this;
+    };
+    elproto.translate = function (x, y) {
+        return this.attr({translation: x + " " + y});
+    };
+    elproto[toString] = function () {
+        return "Rapha\xebl\u2019s object";
+    };
+    R.ae = animationElements;
+ 
+    // Set
+    var Set = function (items) {
+        this.items = [];
+        this[length] = 0;
+        this.type = "set";
+        if (items) {
+            for (var i = 0, ii = items[length]; i < ii; i++) {
+                if (items[i] && (items[i].constructor == Element || items[i].constructor == Set)) {
+                    this[this.items[length]] = this.items[this.items[length]] = items[i];
+                    this[length]++;
+                }
+            }
+        }
+    };
+    Set[proto][push] = function () {
+        var item,
+            len;
+        for (var i = 0, ii = arguments[length]; i < ii; i++) {
+            item = arguments[i];
+            if (item && (item.constructor == Element || item.constructor == Set)) {
+                len = this.items[length];
+                this[len] = this.items[len] = item;
+                this[length]++;
+            }
+        }
+        return this;
+    };
+    Set[proto].pop = function () {
+        delete this[this[length]--];
+        return this.items.pop();
+    };
+    for (var method in elproto) if (elproto[has](method)) {
+        Set[proto][method] = (function (methodname) {
+            return function () {
+                for (var i = 0, ii = this.items[length]; i < ii; i++) {
+                    this.items[i][methodname][apply](this.items[i], arguments);
+                }
+                return this;
+            };
+        })(method);
+    }
+    Set[proto].attr = function (name, value) {
+        if (name && R.is(name, array) && R.is(name[0], "object")) {
+            for (var j = 0, jj = name[length]; j < jj; j++) {
+                this.items[j].attr(name[j]);
+            }
+        } else {
+            for (var i = 0, ii = this.items[length]; i < ii; i++) {
+                this.items[i].attr(name, value);
+            }
+        }
+        return this;
+    };
+    Set[proto].animate = function (params, ms, easing, callback) {
+        (R.is(easing, "function") || !easing) && (callback = easing || null);
+        var len = this.items[length],
+            i = len,
+            item,
+            set = this,
+            collector;
+        callback && (collector = function () {
+            !--len && callback.call(set);
+        });
+        easing = R.is(easing, string) ? easing : collector;
+        item = this.items[--i].animate(params, ms, easing, collector);
+        while (i--) {
+            this.items[i] && !this.items[i].removed && this.items[i].animateWith(item, params, ms, easing, collector);
+        }
+        return this;
+    };
+    Set[proto].insertAfter = function (el) {
+        var i = this.items[length];
+        while (i--) {
+            this.items[i].insertAfter(el);
+        }
+        return this;
+    };
+    Set[proto].getBBox = function () {
+        var x = [],
+            y = [],
+            w = [],
+            h = [];
+        for (var i = this.items[length]; i--;) {
+            var box = this.items[i].getBBox();
+            x[push](box.x);
+            y[push](box.y);
+            w[push](box.x + box.width);
+            h[push](box.y + box.height);
+        }
+        x = mmin[apply](0, x);
+        y = mmin[apply](0, y);
+        return {
+            x: x,
+            y: y,
+            width: mmax[apply](0, w) - x,
+            height: mmax[apply](0, h) - y
+        };
+    };
+    Set[proto].clone = function (s) {
+        s = new Set;
+        for (var i = 0, ii = this.items[length]; i < ii; i++) {
+            s[push](this.items[i].clone());
+        }
+        return s;
+    };
+
+    R.registerFont = function (font) {
+        if (!font.face) {
+            return font;
+        }
+        this.fonts = this.fonts || {};
+        var fontcopy = {
+                w: font.w,
+                face: {},
+                glyphs: {}
+            },
+            family = font.face["font-family"];
+        for (var prop in font.face) if (font.face[has](prop)) {
+            fontcopy.face[prop] = font.face[prop];
+        }
+        if (this.fonts[family]) {
+            this.fonts[family][push](fontcopy);
+        } else {
+            this.fonts[family] = [fontcopy];
+        }
+        if (!font.svg) {
+            fontcopy.face["units-per-em"] = toInt(font.face["units-per-em"], 10);
+            for (var glyph in font.glyphs) if (font.glyphs[has](glyph)) {
+                var path = font.glyphs[glyph];
+                fontcopy.glyphs[glyph] = {
+                    w: path.w,
+                    k: {},
+                    d: path.d && "M" + path.d[rp](/[mlcxtrv]/g, function (command) {
+                            return {l: "L", c: "C", x: "z", t: "m", r: "l", v: "c"}[command] || "M";
+                        }) + "z"
+                };
+                if (path.k) {
+                    for (var k in path.k) if (path[has](k)) {
+                        fontcopy.glyphs[glyph].k[k] = path.k[k];
+                    }
+                }
+            }
+        }
+        return font;
+    };
+    paperproto.getFont = function (family, weight, style, stretch) {
+        stretch = stretch || "normal";
+        style = style || "normal";
+        weight = +weight || {normal: 400, bold: 700, lighter: 300, bolder: 800}[weight] || 400;
+        if (!R.fonts) {
+            return;
+        }
+        var font = R.fonts[family];
+        if (!font) {
+            var name = new RegExp("(^|\\s)" + family[rp](/[^\w\d\s+!~.:_-]/g, E) + "(\\s|$)", "i");
+            for (var fontName in R.fonts) if (R.fonts[has](fontName)) {
+                if (name.test(fontName)) {
+                    font = R.fonts[fontName];
+                    break;
+                }
+            }
+        }
+        var thefont;
+        if (font) {
+            for (var i = 0, ii = font[length]; i < ii; i++) {
+                thefont = font[i];
+                if (thefont.face["font-weight"] == weight && (thefont.face["font-style"] == style || !thefont.face["font-style"]) && thefont.face["font-stretch"] == stretch) {
+                    break;
+                }
+            }
+        }
+        return thefont;
+    };
+    paperproto.print = function (x, y, string, font, size, origin, letter_spacing) {
+        origin = origin || "middle"; // baseline|middle
+        letter_spacing = mmax(mmin(letter_spacing || 0, 1), -1);
+        var out = this.set(),
+            letters = Str(string)[split](E),
+            shift = 0,
+            path = E,
+            scale;
+        R.is(font, string) && (font = this.getFont(font));
+        if (font) {
+            scale = (size || 16) / font.face["units-per-em"];
+            var bb = font.face.bbox.split(separator),
+                top = +bb[0],
+                height = +bb[1] + (origin == "baseline" ? bb[3] - bb[1] + (+font.face.descent) : (bb[3] - bb[1]) / 2);
+            for (var i = 0, ii = letters[length]; i < ii; i++) {
+                var prev = i && font.glyphs[letters[i - 1]] || {},
+                    curr = font.glyphs[letters[i]];
+                shift += i ? (prev.w || font.w) + (prev.k && prev.k[letters[i]] || 0) + (font.w * letter_spacing) : 0;
+                curr && curr.d && out[push](this.path(curr.d).attr({fill: "#000", stroke: "none", translation: [shift, 0]}));
+            }
+            out.scale(scale, scale, top, height).translate(x - top, y - height);
+        }
+        return out;
+    };
+
+    R.format = function (token, params) {
+        var args = R.is(params, array) ? [0][concat](params) : arguments;
+        token && R.is(token, string) && args[length] - 1 && (token = token[rp](formatrg, function (str, i) {
+            return args[++i] == null ? E : args[i];
+        }));
+        return token || E;
+    };
+    R.ninja = function () {
+        oldRaphael.was ? (win.Raphael = oldRaphael.is) : delete Raphael;
+        return R;
+    };
+    R.el = elproto;
+    R.st = Set[proto];
+
+    oldRaphael.was ? (win.Raphael = R) : (Raphael = R);
+})();/*!
+ * g.Raphael 0.4.1 - Charting library, based on Raphaël
+ *
+ * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
+ * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
+ */
+ 
+ 
+(function () {
+    var mmax = Math.max,
+        mmin = Math.min;
+    Raphael.fn.g = Raphael.fn.g || {};
+    Raphael.fn.g.markers = {
+        disc: "disc",
+        o: "disc",
+        flower: "flower",
+        f: "flower",
+        diamond: "diamond",
+        d: "diamond",
+        square: "square",
+        s: "square",
+        triangle: "triangle",
+        t: "triangle",
+        star: "star",
+        "*": "star",
+        cross: "cross",
+        x: "cross",
+        plus: "plus",
+        "+": "plus",
+        arrow: "arrow",
+        "->": "arrow"
+    };
+    Raphael.fn.g.shim = {stroke: "none", fill: "#000", "fill-opacity": 0};
+    Raphael.fn.g.txtattr = {font: "12px Arial, sans-serif"};
+    Raphael.fn.g.colors = [];
+    var hues = [.6, .2, .05, .1333, .75, 0];
+    for (var i = 0; i < 10; i++) {
+        if (i < hues.length) {
+            Raphael.fn.g.colors.push("hsb(" + hues[i] + ", .75, .75)");
+        } else {
+            Raphael.fn.g.colors.push("hsb(" + hues[i - hues.length] + ", 1, .5)");
+        }
+    }
+    Raphael.fn.g.text = function (x, y, text) {
+        return this.text(x, y, text).attr(this.g.txtattr);
+    };
+    Raphael.fn.g.labelise = function (label, val, total) {
+        if (label) {
+            return (label + "").replace(/(##+(?:\.#+)?)|(%%+(?:\.%+)?)/g, function (all, value, percent) {
+                if (value) {
+                    return (+val).toFixed(value.replace(/^#+\.?/g, "").length);
+                }
+                if (percent) {
+                    return (val * 100 / total).toFixed(percent.replace(/^%+\.?/g, "").length) + "%";
+                }
+            });
+        } else {
+            return (+val).toFixed(0);
+        }
+    };
+
+    Raphael.fn.g.finger = function (x, y, width, height, dir, ending, isPath) {
+        // dir 0 for horisontal and 1 for vertical
+        if ((dir && !height) || (!dir && !width)) {
+            return isPath ? "" : this.path();
+        }
+        ending = {square: "square", sharp: "sharp", soft: "soft"}[ending] || "round";
+        var path;
+        height = Math.round(height);
+        width = Math.round(width);
+        x = Math.round(x);
+        y = Math.round(y);
+        switch (ending) {
+            case "round":
+            if (!dir) {
+                var r = ~~(height / 2);
+                if (width < r) {
+                    r = width;
+                    path = ["M", x + .5, y + .5 - ~~(height / 2), "l", 0, 0, "a", r, ~~(height / 2), 0, 0, 1, 0, height, "l", 0, 0, "z"];
+                } else {
+                    path = ["M", x + .5, y + .5 - r, "l", width - r, 0, "a", r, r, 0, 1, 1, 0, height, "l", r - width, 0, "z"];
+                }
+            } else {
+                r = ~~(width / 2);
+                if (height < r) {
+                    r = height;
+                    path = ["M", x - ~~(width / 2), y, "l", 0, 0, "a", ~~(width / 2), r, 0, 0, 1, width, 0, "l", 0, 0, "z"];
+                } else {
+                    path = ["M", x - r, y, "l", 0, r - height, "a", r, r, 0, 1, 1, width, 0, "l", 0, height - r, "z"];
+                }
+            }
+            break;
+            case "sharp":
+            if (!dir) {
+                var half = ~~(height / 2);
+                path = ["M", x, y + half, "l", 0, -height, mmax(width - half, 0), 0, mmin(half, width), half, -mmin(half, width), half + (half * 2 < height), "z"];
+            } else {
+                half = ~~(width / 2);
+                path = ["M", x + half, y, "l", -width, 0, 0, -mmax(height - half, 0), half, -mmin(half, height), half, mmin(half, height), half, "z"];
+            }
+            break;
+            case "square":
+            if (!dir) {
+                path = ["M", x, y + ~~(height / 2), "l", 0, -height, width, 0, 0, height, "z"];
+            } else {
+                path = ["M", x + ~~(width / 2), y, "l", 1 - width, 0, 0, -height, width - 1, 0, "z"];
+            }
+            break;
+            case "soft":
+            if (!dir) {
+                r = mmin(width, Math.round(height / 5));
+                path = ["M", x + .5, y + .5 - ~~(height / 2), "l", width - r, 0, "a", r, r, 0, 0, 1, r, r, "l", 0, height - r * 2, "a", r, r, 0, 0, 1, -r, r, "l", r - width, 0, "z"];
+            } else {
+                r = mmin(Math.round(width / 5), height);
+                path = ["M", x - ~~(width / 2), y, "l", 0, r - height, "a", r, r, 0, 0, 1, r, -r, "l", width - 2 * r, 0, "a", r, r, 0, 0, 1, r, r, "l", 0, height - r, "z"];
+            }
+        }
+        if (isPath) {
+            return path.join(",");
+        } else {
+            return this.path(path);
+        }
+    };
+
+    // Symbols
+    Raphael.fn.g.disc = function (cx, cy, r) {
+        return this.circle(cx, cy, r);
+    };
+    Raphael.fn.g.line = function (cx, cy, r) {
+        return this.rect(cx - r, cy - r / 5, 2 * r, 2 * r / 5);
+    };
+    Raphael.fn.g.square = function (cx, cy, r) {
+        r = r * .7;
+        return this.rect(cx - r, cy - r, 2 * r, 2 * r);
+    };
+    Raphael.fn.g.triangle = function (cx, cy, r) {
+        r *= 1.75;
+        return this.path("M".concat(cx, ",", cy, "m0-", r * .58, "l", r * .5, ",", r * .87, "-", r, ",0z"));
+    };
+    Raphael.fn.g.diamond = function (cx, cy, r) {
+        return this.path(["M", cx, cy - r, "l", r, r, -r, r, -r, -r, r, -r, "z"]);
+    };
+    Raphael.fn.g.flower = function (cx, cy, r, n) {
+        r = r * 1.25;
+        var rout = r,
+            rin = rout * .5;
+        n = +n < 3 || !n ? 5 : n;
+        var points = ["M", cx, cy + rin, "Q"],
+            R;
+        for (var i = 1; i < n * 2 + 1; i++) {
+            R = i % 2 ? rout : rin;
+            points = points.concat([+(cx + R * Math.sin(i * Math.PI / n)).toFixed(3), +(cy + R * Math.cos(i * Math.PI / n)).toFixed(3)]);
+        }
+        points.push("z");
+        return this.path(points.join(","));
+    };
+    Raphael.fn.g.star = function (cx, cy, r, r2, rays) {
+        r2 = r2 || r * .382;
+        rays = rays || 5;
+        var points = ["M", cx, cy + r2, "L"],
+            R;
+        for (var i = 1; i < rays * 2; i++) {
+            R = i % 2 ? r : r2;
+            points = points.concat([(cx + R * Math.sin(i * Math.PI / rays)), (cy + R * Math.cos(i * Math.PI / rays))]);
+        }
+        points.push("z");
+        return this.path(points.join(","));
+    };
+    Raphael.fn.g.cross = function (cx, cy, r) {
+        r = r / 2.5;
+        return this.path("M".concat(cx - r, ",", cy, "l", [-r, -r, r, -r, r, r, r, -r, r, r, -r, r, r, r, -r, r, -r, -r, -r, r, -r, -r, "z"]));
+    };
+    Raphael.fn.g.plus = function (cx, cy, r) {
+        r = r / 2;
+        return this.path("M".concat(cx - r / 2, ",", cy - r / 2, "l", [0, -r, r, 0, 0, r, r, 0, 0, r, -r, 0, 0, r, -r, 0, 0, -r, -r, 0, 0, -r, "z"]));
+    };
+    Raphael.fn.g.arrow = function (cx, cy, r) {
+        return this.path("M".concat(cx - r * .7, ",", cy - r * .4, "l", [r * .6, 0, 0, -r * .4, r, r * .8, -r, r * .8, 0, -r * .4, -r * .6, 0], "z"));
+    };
+
+    // Tooltips
+    Raphael.fn.g.tag = function (x, y, text, angle, r) {
+        angle = angle || 0;
+        r = r == null ? 5 : r;
+        text = text == null ? "$9.99" : text;
+        var R = .5522 * r,
+            res = this.set(),
+            d = 3;
+        res.push(this.path().attr({fill: "#000", stroke: "#000"}));
+        res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff", "font-family": "Helvetica, Arial"}));
+        res.update = function () {
+            this.rotate(0, x, y);
+            var bb = this[1].getBBox();
+            if (bb.height >= r * 2) {
+                this[0].attr({path: ["M", x, y + r, "a", r, r, 0, 1, 1, 0, -r * 2, r, r, 0, 1, 1, 0, r * 2, "m", 0, -r * 2 -d, "a", r + d, r + d, 0, 1, 0, 0, (r + d) * 2, "L", x + r + d, y + bb.height / 2 + d, "l", bb.width + 2 * d, 0, 0, -bb.height - 2 * d, -bb.width - 2 * d, 0, "L", x, y - r - d].join(",")});
+            } else {
+                var dx = Math.sqrt(Math.pow(r + d, 2) - Math.pow(bb.height / 2 + d, 2));
+                this[0].attr({path: ["M", x, y + r, "c", -R, 0, -r, R - r, -r, -r, 0, -R, r - R, -r, r, -r, R, 0, r, r - R, r, r, 0, R, R - r, r, -r, r, "M", x + dx, y - bb.height / 2 - d, "a", r + d, r + d, 0, 1, 0, 0, bb.height + 2 * d, "l", r + d - dx + bb.width + 2 * d, 0, 0, -bb.height - 2 * d, "L", x + dx, y - bb.height / 2 - d].join(",")});
+            }
+            this[1].attr({x: x + r + d + bb.width / 2, y: y});
+            angle = (360 - angle) % 360;
+            this.rotate(angle, x, y);
+            angle > 90 && angle < 270 && this[1].attr({x: x - r - d - bb.width / 2, y: y, rotation: [180 + angle, x, y]});
+            return this;
+        };
+        res.update();
+        return res;
+    };
+    Raphael.fn.g.popupit = function (x, y, set, dir, size) {
+        dir = dir == null ? 2 : dir;
+        size = size || 5;
+        x = Math.round(x);
+        y = Math.round(y);
+        var bb = set.getBBox(),
+            w = Math.round(bb.width / 2),
+            h = Math.round(bb.height / 2),
+            dx = [0, w + size * 2, 0, -w - size * 2],
+            dy = [-h * 2 - size * 3, -h - size, 0, -h - size],
+            p = ["M", x - dx[dir], y - dy[dir], "l", -size, (dir == 2) * -size, -mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, -size, -size,
+                "l", 0, -mmax(h - size, 0), (dir == 3) * -size, -size, (dir == 3) * size, -size, 0, -mmax(h - size, 0), "a", size, size, 0, 0, 1, size, -size,
+                "l", mmax(w - size, 0), 0, size, !dir * -size, size, !dir * size, mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, size, size,
+                "l", 0, mmax(h - size, 0), (dir == 1) * size, size, (dir == 1) * -size, size, 0, mmax(h - size, 0), "a", size, size, 0, 0, 1, -size, size,
+                "l", -mmax(w - size, 0), 0, "z"].join(","),
+            xy = [{x: x, y: y + size * 2 + h}, {x: x - size * 2 - w, y: y}, {x: x, y: y - size * 2 - h}, {x: x + size * 2 + w, y: y}][dir];
+        set.translate(xy.x - w - bb.x, xy.y - h - bb.y);
+        return this.path(p).attr({fill: "#000", stroke: "none"}).insertBefore(set.node ? set : set[0]);
+    };
+    Raphael.fn.g.popup = function (x, y, text, dir, size) {
+        dir = dir == null ? 2 : dir > 3 ? 3 : dir;
+        size = size || 5;
+        text = text || "$9.99";
+        var res = this.set(),
+            d = 3;
+        res.push(this.path().attr({fill: "#000", stroke: "#000"}));
+        res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff", "font-family": "Helvetica, Arial"}));
+        res.update = function (X, Y, withAnimation) {
+            X = X || x;
+            Y = Y || y;
+            var bb = this[1].getBBox(),
+                w = bb.width / 2,
+                h = bb.height / 2,
+                dx = [0, w + size * 2, 0, -w - size * 2],
+                dy = [-h * 2 - size * 3, -h - size, 0, -h - size],
+                p = ["M", X - dx[dir], Y - dy[dir], "l", -size, (dir == 2) * -size, -mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, -size, -size,
+                    "l", 0, -mmax(h - size, 0), (dir == 3) * -size, -size, (dir == 3) * size, -size, 0, -mmax(h - size, 0), "a", size, size, 0, 0, 1, size, -size,
+                    "l", mmax(w - size, 0), 0, size, !dir * -size, size, !dir * size, mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, size, size,
+                    "l", 0, mmax(h - size, 0), (dir == 1) * size, size, (dir == 1) * -size, size, 0, mmax(h - size, 0), "a", size, size, 0, 0, 1, -size, size,
+                    "l", -mmax(w - size, 0), 0, "z"].join(","),
+                xy = [{x: X, y: Y + size * 2 + h}, {x: X - size * 2 - w, y: Y}, {x: X, y: Y - size * 2 - h}, {x: X + size * 2 + w, y: Y}][dir];
+            xy.path = p;
+            if (withAnimation) {
+                this.animate(xy, 500, ">");
+            } else {
+                this.attr(xy);
+            }
+            return this;
+        };
+        return res.update(x, y);
+    };
+    Raphael.fn.g.flag = function (x, y, text, angle) {
+        angle = angle || 0;
+        text = text || "$9.99";
+        var res = this.set(),
+            d = 3;
+        res.push(this.path().attr({fill: "#000", stroke: "#000"}));
+        res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff", "font-family": "Helvetica, Arial"}));
+        res.update = function (x, y) {
+            this.rotate(0, x, y);
+            var bb = this[1].getBBox(),
+                h = bb.height / 2;
+            this[0].attr({path: ["M", x, y, "l", h + d, -h - d, bb.width + 2 * d, 0, 0, bb.height + 2 * d, -bb.width - 2 * d, 0, "z"].join(",")});
+            this[1].attr({x: x + h + d + bb.width / 2, y: y});
+            angle = 360 - angle;
+            this.rotate(angle, x, y);
+            angle > 90 && angle < 270 && this[1].attr({x: x - r - d - bb.width / 2, y: y, rotation: [180 + angle, x, y]});
+            return this;
+        };
+        return res.update(x, y);
+    };
+    Raphael.fn.g.label = function (x, y, text) {
+        var res = this.set();
+        res.push(this.rect(x, y, 10, 10).attr({stroke: "none", fill: "#000"}));
+        res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff"}));
+        res.update = function () {
+            var bb = this[1].getBBox(),
+                r = mmin(bb.width + 10, bb.height + 10) / 2;
+            this[0].attr({x: bb.x - r / 2, y: bb.y - r / 2, width: bb.width + r, height: bb.height + r, r: r});
+        };
+        res.update();
+        return res;
+    };
+    Raphael.fn.g.labelit = function (set) {
+        var bb = set.getBBox(),
+            r = mmin(20, bb.width + 10, bb.height + 10) / 2;
+        return this.rect(bb.x - r / 2, bb.y - r / 2, bb.width + r, bb.height + r, r).attr({stroke: "none", fill: "#000"}).insertBefore(set.node ? set : set[0]);
+    };
+    Raphael.fn.g.drop = function (x, y, text, size, angle) {
+        size = size || 30;
+        angle = angle || 0;
+        var res = this.set();
+        res.push(this.path(["M", x, y, "l", size, 0, "A", size * .4, size * .4, 0, 1, 0, x + size * .7, y - size * .7, "z"]).attr({fill: "#000", stroke: "none", rotation: [22.5 - angle, x, y]}));
+        angle = (angle + 90) * Math.PI / 180;
+        res.push(this.text(x + size * Math.sin(angle), y + size * Math.cos(angle), text).attr(this.g.txtattr).attr({"font-size": size * 12 / 30, fill: "#fff"}));
+        res.drop = res[0];
+        res.text = res[1];
+        return res;
+    };
+    Raphael.fn.g.blob = function (x, y, text, angle, size) {
+        angle = (+angle + 1 ? angle : 45) + 90;
+        size = size || 12;
+        var rad = Math.PI / 180,
+            fontSize = size * 12 / 12;
+        var res = this.set();
+        res.push(this.path().attr({fill: "#000", stroke: "none"}));
+        res.push(this.text(x + size * Math.sin((angle) * rad), y + size * Math.cos((angle) * rad) - fontSize / 2, text).attr(this.g.txtattr).attr({"font-size": fontSize, fill: "#fff"}));
+        res.update = function (X, Y, withAnimation) {
+            X = X || x;
+            Y = Y || y;
+            var bb = this[1].getBBox(),
+                w = mmax(bb.width + fontSize, size * 25 / 12),
+                h = mmax(bb.height + fontSize, size * 25 / 12),
+                x2 = X + size * Math.sin((angle - 22.5) * rad),
+                y2 = Y + size * Math.cos((angle - 22.5) * rad),
+                x1 = X + size * Math.sin((angle + 22.5) * rad),
+                y1 = Y + size * Math.cos((angle + 22.5) * rad),
+                dx = (x1 - x2) / 2,
+                dy = (y1 - y2) / 2,
+                rx = w / 2,
+                ry = h / 2,
+                k = -Math.sqrt(Math.abs(rx * rx * ry * ry - rx * rx * dy * dy - ry * ry * dx * dx) / (rx * rx * dy * dy + ry * ry * dx * dx)),
+                cx = k * rx * dy / ry + (x1 + x2) / 2,
+                cy = k * -ry * dx / rx + (y1 + y2) / 2;
+            if (withAnimation) {
+                this.animate({x: cx, y: cy, path: ["M", x, y, "L", x1, y1, "A", rx, ry, 0, 1, 1, x2, y2, "z"].join(",")}, 500, ">");
+            } else {
+                this.attr({x: cx, y: cy, path: ["M", x, y, "L", x1, y1, "A", rx, ry, 0, 1, 1, x2, y2, "z"].join(",")});
+            }
+            return this;
+        };
+        res.update(x, y);
+        return res;
+    };
+
+    Raphael.fn.g.colorValue = function (value, total, s, b) {
+        return "hsb(" + [mmin((1 - value / total) * .4, 1), s || .75, b || .75] + ")";
+    };
+
+    Raphael.fn.g.snapEnds = function (from, to, steps) {
+        var f = from,
+            t = to;
+        if (f == t) {
+            return {from: f, to: t, power: 0};
+        }
+        function round(a) {
+            return Math.abs(a - .5) < .25 ? ~~(a) + .5 : Math.round(a);
+        }
+        var d = (t - f) / steps,
+            r = ~~(d),
+            R = r,
+            i = 0;
+        if (r) {
+            while (R) {
+                i--;
+                R = ~~(d * Math.pow(10, i)) / Math.pow(10, i);
+            }
+            i ++;
+        } else {
+            while (!r) {
+                i = i || 1;
+                r = ~~(d * Math.pow(10, i)) / Math.pow(10, i);
+                i++;
+            }
+            i && i--;
+        }
+        t = round(to * Math.pow(10, i)) / Math.pow(10, i);
+        if (t < to) {
+            t = round((to + .5) * Math.pow(10, i)) / Math.pow(10, i);
+        }
+        f = round((from - (i > 0 ? 0 : .5)) * Math.pow(10, i)) / Math.pow(10, i);
+        return {from: f, to: t, power: i};
+    };
+    Raphael.fn.g.axis = function (x, y, length, from, to, steps, orientation, labels, type, dashsize) {
+        dashsize = dashsize == null ? 2 : dashsize;
+        type = type || "t";
+        steps = steps || 10;
+        var path = type == "|" || type == " " ? ["M", x + .5, y, "l", 0, .001] : orientation == 1 || orientation == 3 ? ["M", x + .5, y, "l", 0, -length] : ["M", x, y + .5, "l", length, 0],
+            ends = this.g.snapEnds(from, to, steps),
+            f = ends.from,
+            t = ends.to,
+            i = ends.power,
+            j = 0,
+            text = this.set();
+        d = (t - f) / steps;
+        var label = f,
+            rnd = i > 0 ? i : 0;
+            dx = length / steps;
+        if (+orientation == 1 || +orientation == 3) {
+            var Y = y,
+                addon = (orientation - 1 ? 1 : -1) * (dashsize + 3 + !!(orientation - 1));
+            while (Y >= y - length) {
+                type != "-" && type != " " && (path = path.concat(["M", x - (type == "+" || type == "|" ? dashsize : !(orientation - 1) * dashsize * 2), Y + .5, "l", dashsize * 2 + 1, 0]));
+                text.push(this.text(x + addon, Y, (labels && labels[j++]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr).attr({"text-anchor": orientation - 1 ? "start" : "end"}));
+                label += d;
+                Y -= dx;
+            }
+            if (Math.round(Y + dx - (y - length))) {
+                type != "-" && type != " " && (path = path.concat(["M", x - (type == "+" || type == "|" ? dashsize : !(orientation - 1) * dashsize * 2), y - length + .5, "l", dashsize * 2 + 1, 0]));
+                text.push(this.text(x + addon, y - length, (labels && labels[j]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr).attr({"text-anchor": orientation - 1 ? "start" : "end"}));
+            }
+        } else {
+            label = f;
+            rnd = (i > 0) * i;
+            addon = (orientation ? -1 : 1) * (dashsize + 9 + !orientation);
+            var X = x,
+                dx = length / steps,
+                txt = 0,
+                prev = 0;
+            while (X <= x + length) {
+                type != "-" && type != " " && (path = path.concat(["M", X + .5, y - (type == "+" ? dashsize : !!orientation * dashsize * 2), "l", 0, dashsize * 2 + 1]));
+                text.push(txt = this.text(X, y + addon, (labels && labels[j++]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr));
+                var bb = txt.getBBox();
+                if (prev >= bb.x - 5) {
+                    text.pop(text.length - 1).remove();
+                } else {
+                    prev = bb.x + bb.width;
+                }
+                label += d;
+                X += dx;
+            }
+            if (Math.round(X - dx - x - length)) {
+                type != "-" && type != " " && (path = path.concat(["M", x + length + .5, y - (type == "+" ? dashsize : !!orientation * dashsize * 2), "l", 0, dashsize * 2 + 1]));
+                text.push(this.text(x + length, y + addon, (labels && labels[j]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr));
+            }
+        }
+        var res = this.path(path);
+        res.text = text;
+        res.all = this.set([res, text]);
+        res.remove = function () {
+            this.text.remove();
+            this.constructor.prototype.remove.call(this);
+        };
+        return res;
+    };
+
+    Raphael.el.lighter = function (times) {
+        times = times || 2;
+        var fs = [this.attrs.fill, this.attrs.stroke];
+        this.fs = this.fs || [fs[0], fs[1]];
+        fs[0] = Raphael.rgb2hsb(Raphael.getRGB(fs[0]).hex);
+        fs[1] = Raphael.rgb2hsb(Raphael.getRGB(fs[1]).hex);
+        fs[0].b = mmin(fs[0].b * times, 1);
+        fs[0].s = fs[0].s / times;
+        fs[1].b = mmin(fs[1].b * times, 1);
+        fs[1].s = fs[1].s / times;
+        this.attr({fill: "hsb(" + [fs[0].h, fs[0].s, fs[0].b] + ")", stroke: "hsb(" + [fs[1].h, fs[1].s, fs[1].b] + ")"});
+    };
+    Raphael.el.darker = function (times) {
+        times = times || 2;
+        var fs = [this.attrs.fill, this.attrs.stroke];
+        this.fs = this.fs || [fs[0], fs[1]];
+        fs[0] = Raphael.rgb2hsb(Raphael.getRGB(fs[0]).hex);
+        fs[1] = Raphael.rgb2hsb(Raphael.getRGB(fs[1]).hex);
+        fs[0].s = mmin(fs[0].s * times, 1);
+        fs[0].b = fs[0].b / times;
+        fs[1].s = mmin(fs[1].s * times, 1);
+        fs[1].b = fs[1].b / times;
+        this.attr({fill: "hsb(" + [fs[0].h, fs[0].s, fs[0].b] + ")", stroke: "hsb(" + [fs[1].h, fs[1].s, fs[1].b] + ")"});
+    };
+    Raphael.el.original = function () {
+        if (this.fs) {
+            this.attr({fill: this.fs[0], stroke: this.fs[1]});
+            delete this.fs;
+        }
+    };
+})();/*!
+ * g.Raphael 0.4.1 - Charting library, based on Raphaël
+ *
+ * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
+ * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
+ */
+Raphael.fn.g.barchart = function (x, y, width, height, values, opts) {
+    opts = opts || {};
+    var type = {round: "round", sharp: "sharp", soft: "soft"}[opts.type] || "square",
+        gutter = parseFloat(opts.gutter || "20%"),
+        chart = this.set(),
+        bars = this.set(),
+        covers = this.set(),
+        covers2 = this.set(),
+        total = Math.max.apply(Math, values),
+        stacktotal = [],
+        paper = this,
+        multi = 0,
+        colors = opts.colors || this.g.colors,
+        len = values.length;
+    if (this.raphael.is(values[0], "array")) {
+        total = [];
+        multi = len;
+        len = 0;
+        for (var i = values.length; i--;) {
+            bars.push(this.set());
+            total.push(Math.max.apply(Math, values[i]));
+            len = Math.max(len, values[i].length);
+        }
+        if (opts.stacked) {
+            for (var i = len; i--;) {
+                var tot = 0;
+                for (var j = values.length; j--;) {
+                    tot +=+ values[j][i] || 0;
+                }
+                stacktotal.push(tot);
+            }
+        }
+        for (var i = values.length; i--;) {
+            if (values[i].length < len) {
+                for (var j = len; j--;) {
+                    values[i].push(0);
+                }
+            }
+        }
+        total = Math.max.apply(Math, opts.stacked ? stacktotal : total);
+    }
+    
+    total = (opts.to) || total;
+    var barwidth = width / (len * (100 + gutter) + gutter) * 100,
+        barhgutter = barwidth * gutter / 100,
+        barvgutter = opts.vgutter == null ? 20 : opts.vgutter,
+        stack = [],
+        X = x + barhgutter,
+        Y = (height - 2 * barvgutter) / total;
+    if (!opts.stretch) {
+        barhgutter = Math.round(barhgutter);
+        barwidth = Math.floor(barwidth);
+    }
+    !opts.stacked && (barwidth /= multi || 1);
+    for (var i = 0; i < len; i++) {
+        stack = [];
+        for (var j = 0; j < (multi || 1); j++) {
+            var h = Math.round((multi ? values[j][i] : values[i]) * Y),
+                top = y + height - barvgutter - h,
+                bar = this.g.finger(Math.round(X + barwidth / 2), top + h, barwidth, h, true, type).attr({stroke: "none", fill: colors[multi ? j : i]});
+            if (multi) {
+                bars[j].push(bar);
+            } else {
+                bars.push(bar);
+            }
+            bar.y = top;
+            bar.x = Math.round(X + barwidth / 2);
+            bar.w = barwidth;
+            bar.h = h;
+						bar.index = i;
+            bar.value = multi ? values[j][i] : values[i];
+            if (!opts.stacked) {
+                X += barwidth;
+            } else {
+                stack.push(bar);
+            }
+        }
+        if (opts.stacked) {
+            var cvr;
+            covers2.push(cvr = this.rect(stack[0].x - stack[0].w / 2, y, barwidth, height).attr(this.g.shim));
+            cvr.bars = this.set();
+            var size = 0;
+            for (var s = stack.length; s--;) {
+                stack[s].toFront();
+            }
+            for (var s = 0, ss = stack.length; s < ss; s++) {
+                var bar = stack[s],
+                    cover,
+                    h = (size + bar.value) * Y,
+                    path = this.g.finger(bar.x, y + height - barvgutter - !!size * .5, barwidth, h, true, type, 1);
+                cvr.bars.push(bar);
+                size && bar.attr({path: path});
+                bar.h = h;
+                bar.y = y + height - barvgutter - !!size * .5 - h;
+                covers.push(cover = this.rect(bar.x - bar.w / 2, bar.y, barwidth, bar.value * Y).attr(this.g.shim));
+                cover.bar = bar;
+                cover.value = bar.value;
+                size += bar.value;
+            }
+            X += barwidth;
+        }
+        X += barhgutter;
+    }
+    covers2.toFront();
+    X = x + barhgutter;
+    if (!opts.stacked) {
+        for (var i = 0; i < len; i++) {
+            for (var j = 0; j < (multi || 1); j++) {
+                var cover;
+                covers.push(cover = this.rect(Math.round(X), y + barvgutter, barwidth, height - barvgutter).attr(this.g.shim));
+                cover.bar = multi ? bars[j][i] : bars[i];
+                cover.value = cover.bar.value;
+                X += barwidth;
+            }
+            X += barhgutter;
+        }
+    }
+    chart.label = function (labels, isBottom, rotate) {
+        labels = labels || [];
+        isBottom = isBottom == undefined ? true : isBottom;
+	rotate = rotate == undefined ? false : rotate;
+        this.labels = paper.set();
+        var L, l = -Infinity;
+        if (opts.stacked) {
+            for (var i = 0; i < len; i++) {
+                var tot = 0;
+                for (var j = 0; j < (multi || 1); j++) {
+                    tot += multi ? values[j][i] : values[i];
+                    if (j == 0) {
+                        var label = paper.g.labelise(labels[j][i], tot, total);
+                        L = paper.g.text(bars[j][i].x, isBottom ? y + height - barvgutter / 2 : bars[j][i].y - 10, label);
+			if (rotate) {
+				L.rotate(90);
+			}
+                        var bb = L.getBBox();
+                        if (bb.x - 7 < l) {
+                            L.remove();
+                        } else {
+                            this.labels.push(L);
+                            l = bb.x + (rotate ? bb.height : bb.width);
+                        }
+                    }
+                }
+            }
+        } else {
+            for (var i = 0; i < len; i++) {
+                for (var j = 0; j < (multi || 1); j++) {
+                    // did not remove the loop because don't yet know whether to accept multi array input for arrays
+                    var label = paper.g.labelise(multi ? labels[0] && labels[0][i] : labels[i], multi ? values[0][i] : values[i], total);
+                     L = paper.g.text(bars[0][i].x, isBottom ? y + 5 + height - barvgutter / 2 : bars[0][i].y - 10, label);
+			if (rotate) {
+				L.rotate(90);
+				// If we rotated it, we need to move it as well. Still have to use the width
+				// to get the "length" of the label, divided it in two and shift down.
+				L.translate(0, (L.getBBox().width / 2));
+			}
+                    var bb = L.getBBox();
+//                    if (bb.x - 7 < l) {
+                    if (bb.x - (this.getBBox().width) < l) {
+                        L.remove();
+                    } else {
+                        this.labels.push(L);
+                        l = bb.x + (rotate ? bb.height : bb.width);
+                    }
+                }
+            }
+        }
+        return this;
+    };
+    chart.hover = function (fin, fout) {
+        covers2.hide();
+        covers.show();
+        covers.mouseover(fin).mouseout(fout);
+        return this;
+    };
+    chart.hoverColumn = function (fin, fout) {
+        covers.hide();
+        covers2.show();
+        fout = fout || function () {};
+        covers2.mouseover(fin).mouseout(fout);
+        return this;
+    };
+    chart.click = function (f) {
+        covers2.hide();
+        covers.show();
+        covers.click(f);
+        return this;
+    };
+    chart.each = function (f) {
+        if (!Raphael.is(f, "function")) {
+            return this;
+        }
+        for (var i = covers.length; i--;) {
+            f.call(covers[i]);
+        }
+        return this;
+    };
+    chart.eachColumn = function (f) {
+        if (!Raphael.is(f, "function")) {
+            return this;
+        }
+        for (var i = covers2.length; i--;) {
+            f.call(covers2[i]);
+        }
+        return this;
+    };
+    chart.clickColumn = function (f) {
+        covers.hide();
+        covers2.show();
+        covers2.click(f);
+        return this;
+    };
+    chart.push(bars, covers, covers2);
+    chart.bars = bars;
+    chart.covers = covers;
+    return chart;
+};
+Raphael.fn.g.hbarchart = function (x, y, width, height, values, opts) {
+    opts = opts || {};
+    var type = {round: "round", sharp: "sharp", soft: "soft"}[opts.type] || "square",
+        gutter = parseFloat(opts.gutter || "20%"),
+        chart = this.set(),
+        bars = this.set(),
+        covers = this.set(),
+        covers2 = this.set(),
+        total = Math.max.apply(Math, values),
+        stacktotal = [],
+        paper = this,
+        multi = 0,
+        colors = opts.colors || this.g.colors,
+        len = values.length;
+    if (this.raphael.is(values[0], "array")) {
+        total = [];
+        multi = len;
+        len = 0;
+        for (var i = values.length; i--;) {
+            bars.push(this.set());
+            total.push(Math.max.apply(Math, values[i]));
+            len = Math.max(len, values[i].length);
+        }
+        if (opts.stacked) {
+            for (var i = len; i--;) {
+                var tot = 0;
+                for (var j = values.length; j--;) {
+                    tot +=+ values[j][i] || 0;
+                }
+                stacktotal.push(tot);
+            }
+        }
+        for (var i = values.length; i--;) {
+            if (values[i].length < len) {
+                for (var j = len; j--;) {
+                    values[i].push(0);
+                }
+            }
+        }
+        total = Math.max.apply(Math, opts.stacked ? stacktotal : total);
+    }
+    
+    total = (opts.to) || total;
+    var barheight = Math.floor(height / (len * (100 + gutter) + gutter) * 100),
+        bargutter = Math.floor(barheight * gutter / 100),
+        stack = [],
+        Y = y + bargutter,
+        X = (width - 1) / total;
+    !opts.stacked && (barheight /= multi || 1);
+    for (var i = 0; i < len; i++) {
+        stack = [];
+        for (var j = 0; j < (multi || 1); j++) {
+            var val = multi ? values[j][i] : values[i],
+                bar = this.g.finger(x, Y + barheight / 2, Math.round(val * X), barheight - 1, false, type).attr({stroke: "none", fill: colors[multi ? j : i]});
+            if (multi) {
+                bars[j].push(bar);
+            } else {
+                bars.push(bar);
+            }
+            bar.x = x + Math.round(val * X);
+            bar.y = Y + barheight / 2;
+            bar.w = Math.round(val * X);
+            bar.h = barheight;
+            bar.value = +val;
+            if (!opts.stacked) {
+                Y += barheight;
+            } else {
+                stack.push(bar);
+            }
+        }
+        if (opts.stacked) {
+            var cvr = this.rect(x, stack[0].y - stack[0].h / 2, width, barheight).attr(this.g.shim);
+            covers2.push(cvr);
+            cvr.bars = this.set();
+            var size = 0;
+            for (var s = stack.length; s--;) {
+                stack[s].toFront();
+            }
+            for (var s = 0, ss = stack.length; s < ss; s++) {
+                var bar = stack[s],
+                    cover,
+                    val = Math.round((size + bar.value) * X),
+                    path = this.g.finger(x, bar.y, val, barheight - 1, false, type, 1);
+                cvr.bars.push(bar);
+                size && bar.attr({path: path});
+                bar.w = val;
+                bar.x = x + val;
+                covers.push(cover = this.rect(x + size * X, bar.y - bar.h / 2, bar.value * X, barheight).attr(this.g.shim));
+                cover.bar = bar;
+                size += bar.value;
+            }
+            Y += barheight;
+        }
+        Y += bargutter;
+    }
+    covers2.toFront();
+    Y = y + bargutter;
+    if (!opts.stacked) {
+        for (var i = 0; i < len; i++) {
+            for (var j = 0; j < (multi || 1); j++) {
+                var cover = this.rect(x, Y, width, barheight).attr(this.g.shim);
+                covers.push(cover);
+                cover.bar = multi ? bars[j][i] : bars[i];
+                cover.value = cover.bar.value;
+                Y += barheight;
+            }
+            Y += bargutter;
+        }
+    }
+    chart.label = function (labels, isRight) {
+        labels = labels || [];
+        this.labels = paper.set();
+        for (var i = 0; i < len; i++) {
+            for (var j = 0; j < multi; j++) {
+                var  label = paper.g.labelise(multi ? labels[j] && labels[j][i] : labels[i], multi ? values[j][i] : values[i], total);
+                var X = isRight ? bars[i * (multi || 1) + j].x - barheight / 2 + 3 : x + 5,
+                    A = isRight ? "end" : "start",
+                    L;
+                this.labels.push(L = paper.g.text(X, bars[i * (multi || 1) + j].y, label).attr({"text-anchor": A}).insertBefore(covers[0]));
+                if (L.getBBox().x < x + 5) {
+                    L.attr({x: x + 5, "text-anchor": "start"});
+                } else {
+                    bars[i * (multi || 1) + j].label = L;
+                }
+            }
+        }
+        return this;
+    };
+    chart.hover = function (fin, fout) {
+        covers2.hide();
+        covers.show();
+        fout = fout || function () {};
+        covers.mouseover(fin).mouseout(fout);
+        return this;
+    };
+    chart.hoverColumn = function (fin, fout) {
+        covers.hide();
+        covers2.show();
+        fout = fout || function () {};
+        covers2.mouseover(fin).mouseout(fout);
+        return this;
+    };
+    chart.each = function (f) {
+        if (!Raphael.is(f, "function")) {
+            return this;
+        }
+        for (var i = covers.length; i--;) {
+            f.call(covers[i]);
+        }
+        return this;
+    };
+    chart.eachColumn = function (f) {
+        if (!Raphael.is(f, "function")) {
+            return this;
+        }
+        for (var i = covers2.length; i--;) {
+            f.call(covers2[i]);
+        }
+        return this;
+    };
+    chart.click = function (f) {
+        covers2.hide();
+        covers.show();
+        covers.click(f);
+        return this;
+    };
+    chart.clickColumn = function (f) {
+        covers.hide();
+        covers2.show();
+        covers2.click(f);
+        return this;
+    };
+    chart.push(bars, covers, covers2);
+    chart.bars = bars;
+    chart.covers = covers;
+    return chart;
+};
+/*!
+ * g.Raphael 0.4.1 - Charting library, based on Raphaël
+ *
+ * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
+ * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
+ */
+Raphael.fn.g.dotchart = function (x, y, width, height, valuesx, valuesy, size, opts) {
+    function drawAxis(ax) {
+        +ax[0] && (ax[0] = paper.g.axis(x + gutter, y + gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 2, opts.axisxlabels || null, opts.axisxtype || "t"));
+        +ax[1] && (ax[1] = paper.g.axis(x + width - gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 3, opts.axisylabels || null, opts.axisytype || "t"));
+        +ax[2] && (ax[2] = paper.g.axis(x + gutter, y + height - gutter + maxR, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 0, opts.axisxlabels || null, opts.axisxtype || "t"));
+        +ax[3] && (ax[3] = paper.g.axis(x + gutter - maxR, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 1, opts.axisylabels || null, opts.axisytype || "t"));
+    }
+    opts = opts || {};
+    var xdim = this.g.snapEnds(Math.min.apply(Math, valuesx), Math.max.apply(Math, valuesx), valuesx.length - 1),
+        minx = xdim.from,
+        maxx = xdim.to,
+        gutter = opts.gutter || 10,
+        ydim = this.g.snapEnds(Math.min.apply(Math, valuesy), Math.max.apply(Math, valuesy), valuesy.length - 1),
+        miny = ydim.from,
+        maxy = ydim.to,
+        len = Math.max(valuesx.length, valuesy.length, size.length),
+        symbol = this.g.markers[opts.symbol] || "disc",
+        res = this.set(),
+        series = this.set(),
+        max = opts.max || 100,
+        top = Math.max.apply(Math, size),
+        R = [],
+        paper = this,
+        k = Math.sqrt(top / Math.PI) * 2 / max;
+
+    for (var i = 0; i < len; i++) {
+        R[i] = Math.min(Math.sqrt(size[i] / Math.PI) * 2 / k, max);
+    }
+    gutter = Math.max.apply(Math, R.concat(gutter));
+    var axis = this.set(),
+        maxR = Math.max.apply(Math, R);
+    if (opts.axis) {
+        var ax = (opts.axis + "").split(/[,\s]+/);
+        drawAxis(ax);
+        var g = [], b = [];
+        for (var i = 0, ii = ax.length; i < ii; i++) {
+            var bb = ax[i].all ? ax[i].all.getBBox()[["height", "width"][i % 2]] : 0;
+            g[i] = bb + gutter;
+            b[i] = bb;
+        }
+        gutter = Math.max.apply(Math, g.concat(gutter));
+        for (var i = 0, ii = ax.length; i < ii; i++) if (ax[i].all) {
+            ax[i].remove();
+            ax[i] = 1;
+        }
+        drawAxis(ax);
+        for (var i = 0, ii = ax.length; i < ii; i++) if (ax[i].all) {
+            axis.push(ax[i].all);
+        }
+        res.axis = axis;
+    }
+    var kx = (width - gutter * 2) / ((maxx - minx) || 1),
+        ky = (height - gutter * 2) / ((maxy - miny) || 1);
+    for (var i = 0, ii = valuesy.length; i < ii; i++) {
+        var sym = this.raphael.is(symbol, "array") ? symbol[i] : symbol,
+            X = x + gutter + (valuesx[i] - minx) * kx,
+            Y = y + height - gutter - (valuesy[i] - miny) * ky;
+        sym && R[i] && series.push(this.g[sym](X, Y, R[i]).attr({fill: opts.heat ? this.g.colorValue(R[i], maxR) : Raphael.fn.g.colors[0], "fill-opacity": opts.opacity ? R[i] / max : 1, stroke: "none"}));
+    }
+    var covers = this.set();
+    for (var i = 0, ii = valuesy.length; i < ii; i++) {
+        var X = x + gutter + (valuesx[i] - minx) * kx,
+            Y = y + height - gutter - (valuesy[i] - miny) * ky;
+        covers.push(this.circle(X, Y, maxR).attr(this.g.shim));
+        opts.href && opts.href[i] && covers[i].attr({href: opts.href[i]});
+        covers[i].r = +R[i].toFixed(3);
+        covers[i].x = +X.toFixed(3);
+        covers[i].y = +Y.toFixed(3);
+        covers[i].X = valuesx[i];
+        covers[i].Y = valuesy[i];
+        covers[i].value = size[i] || 0;
+        covers[i].dot = series[i];
+    }
+    res.covers = covers;
+    res.series = series;
+    res.push(series, axis, covers);
+    res.hover = function (fin, fout) {
+        covers.mouseover(fin).mouseout(fout);
+        return this;
+    };
+    res.click = function (f) {
+        covers.click(f);
+        return this;
+    };
+    res.each = function (f) {
+        if (!Raphael.is(f, "function")) {
+            return this;
+        }
+        for (var i = covers.length; i--;) {
+            f.call(covers[i]);
+        }
+        return this;
+    };
+    res.href = function (map) {
+        var cover;
+        for (var i = covers.length; i--;) {
+            cover = covers[i];
+            if (cover.X == map.x && cover.Y == map.y && cover.value == map.value) {
+                cover.attr({href: map.href});
+            }
+        }
+    };
+    return res;
+};
+/*!
+ * g.Raphael 0.4.2 - Charting library, based on Raphaël
+ *
+ * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
+ * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
+ */
+Raphael.fn.g.linechart = function (x, y, width, height, valuesx, valuesy, opts) {
+    function shrink(values, dim) {
+        var k = values.length / dim,
+            j = 0,
+            l = k,
+            sum = 0,
+            res = [];
+        while (j < values.length) {
+            l--;
+            if (l < 0) {
+                sum += values[j] * (1 + l);
+                res.push(sum / k);
+                sum = values[j++] * -l;
+                l += k;
+            } else {
+                sum += values[j++];
+            }
+        }
+        return res;
+    }
+    function getAnchors(p1x, p1y, p2x, p2y, p3x, p3y) {
+        var l1 = (p2x - p1x) / 2,
+            l2 = (p3x - p2x) / 2,
+            a = Math.atan((p2x - p1x) / Math.abs(p2y - p1y)),
+            b = Math.atan((p3x - p2x) / Math.abs(p2y - p3y));
+        a = p1y < p2y ? Math.PI - a : a;
+        b = p3y < p2y ? Math.PI - b : b;
+        var alpha = Math.PI / 2 - ((a + b) % (Math.PI * 2)) / 2,
+            dx1 = l1 * Math.sin(alpha + a),
+            dy1 = l1 * Math.cos(alpha + a),
+            dx2 = l2 * Math.sin(alpha + b),
+            dy2 = l2 * Math.cos(alpha + b);
+        return {
+            x1: p2x - dx1,
+            y1: p2y + dy1,
+            x2: p2x + dx2,
+            y2: p2y + dy2
+        };
+    }
+    opts = opts || {};
+    if (!this.raphael.is(valuesx[0], "array")) {
+        valuesx = [valuesx];
+    }
+    if (!this.raphael.is(valuesy[0], "array")) {
+        valuesy = [valuesy];
+    }
+    var gutter = opts.gutter || 10,
+        len = Math.max(valuesx[0].length, valuesy[0].length),
+        symbol = opts.symbol || "",
+        colors = opts.colors || Raphael.fn.g.colors,
+        that = this,
+        columns = null,
+        dots = null,
+        chart = this.set(),
+        path = [];
+
+    for (var i = 0, ii = valuesy.length; i < ii; i++) {
+        len = Math.max(len, valuesy[i].length);
+    }
+    var shades = this.set();
+    for (i = 0, ii = valuesy.length; i < ii; i++) {
+        if (opts.shade) {
+            shades.push(this.path().attr({stroke: "none", fill: colors[i], opacity: opts.nostroke ? 1 : .3}));
+        }
+        if (valuesy[i].length > width - 2 * gutter) {
+            valuesy[i] = shrink(valuesy[i], width - 2 * gutter);
+            len = width - 2 * gutter;
+        }
+        if (valuesx[i] && valuesx[i].length > width - 2 * gutter) {
+            valuesx[i] = shrink(valuesx[i], width - 2 * gutter);
+        }
+    }
+    var allx = Array.prototype.concat.apply([], valuesx),
+        ally = Array.prototype.concat.apply([], valuesy),
+        xdim = this.g.snapEnds(Math.min.apply(Math, allx), Math.max.apply(Math, allx), valuesx[0].length - 1);
+        if(opts.clip) {
+            var minx = opts.minx || xdim.from,
+                maxx = opts.maxx || xdim.to,
+                ydim = this.g.snapEnds(Math.min.apply(Math, ally), Math.max.apply(Math, ally), valuesy[0].length - 1),
+                miny = opts.miny || ydim.from,
+                maxy = opts.maxy || ydim.to;
+        } else {
+            var minx = opts.minx && Math.min(opts.minx, xdim.from) || xdim.from,
+                maxx = opts.maxx && Math.max(opts.maxx, xdimt.to) || xdim.to,
+                ydim = this.g.snapEnds(Math.min.apply(Math, ally), Math.max.apply(Math, ally), valuesy[0].length - 1),
+                miny = opts.miny && Math.min(opts.miny, ydim.from) || ydim.from,
+                maxy = opts.maxy && Math.max(opts.maxy, ydim.to) || ydim.to;
+        }
+        kx = (width - gutter * 2) / ((maxx - minx) || 1),
+        ky = (height - gutter * 2) / ((maxy - miny) || 1);
+
+    var lines = this.set(),
+        symbols = this.set(),
+        line;
+    for (i = 0, ii = valuesy.length; i < ii; i++) {
+        if (!opts.nostroke) {
+            lines.push(line = this.path().attr({
+                stroke: colors[i],
+                "stroke-width": opts.width || 2,
+                "stroke-linejoin": "round",
+                "stroke-linecap": "round",
+                "stroke-dasharray": opts.dash || ""
+            }));
+        }
+        var sym = this.raphael.is(symbol, "array") ? symbol[i] : symbol,
+            symset = this.set();
+        path = [];
+        for (var j = 0, jj = valuesy[i].length; j < jj; j++) {
+            var X = x + gutter + ((valuesx[i] || valuesx[0])[j] - minx) * kx,
+                Y = y + height - gutter - (valuesy[i][j] - miny) * ky;
+            (Raphael.is(sym, "array") ? sym[j] : sym) && symset.push(this.g[Raphael.fn.g.markers[this.raphael.is(sym, "array") ? sym[j] : sym]](X, Y, (opts.width || 2) * 3).attr({fill: colors[i], stroke: "none"}));
+            if (opts.smooth) {
+                if (j && j != jj - 1) {
+                    var X0 = x + gutter + ((valuesx[i] || valuesx[0])[j - 1] - minx) * kx,
+                        Y0 = y + height - gutter - (valuesy[i][j - 1] - miny) * ky,
+                        X2 = x + gutter + ((valuesx[i] || valuesx[0])[j + 1] - minx) * kx,
+                        Y2 = y + height - gutter - (valuesy[i][j + 1] - miny) * ky;
+                    var a = getAnchors(X0, Y0, X, Y, X2, Y2);
+                    path = path.concat([a.x1, a.y1, X, Y, a.x2, a.y2]);
+                }
+                if (!j) {
+                    path = ["M", X, Y, "C", X, Y];
+                }
+            } else {
+                path = path.concat([j ? "L" : "M", X, Y]);
+            }
+        }
+        if (opts.smooth) {
+            path = path.concat([X, Y, X, Y]);
+        }
+        symbols.push(symset);
+        if (opts.shade) {
+            shades[i].attr({path: path.concat(["L", X, y + height - gutter, "L",  x + gutter + ((valuesx[i] || valuesx[0])[0] - minx) * kx, y + height - gutter, "z"]).join(",")});
+        }
+        !opts.nostroke && line.attr({path: path.join(","), 'clip-rect': [x + gutter, y + gutter, width - 2 * gutter, height - 2 * gutter].join(",")});
+    }
+
+    function createColumns(f) {
+        // unite Xs together
+        var Xs = [];
+        for (var i = 0, ii = valuesx.length; i < ii; i++) {
+            Xs = Xs.concat(valuesx[i]);
+        }
+        Xs.sort(function(a,b) { return a - b; });
+        // remove duplicates
+        var Xs2 = [],
+            xs = [];
+        for (i = 0, ii = Xs.length; i < ii; i++) {
+            Xs[i] != Xs[i - 1] && Xs2.push(Xs[i]) && xs.push(x + gutter + (Xs[i] - minx) * kx);
+        }
+        Xs = Xs2;
+        ii = Xs.length;
+        var cvrs = f || that.set();
+        for (i = 0; i < ii; i++) {
+            var X = xs[i] - (xs[i] - (xs[i - 1] || x)) / 2,
+                w = ((xs[i + 1] || x + width) - xs[i]) / 2 + (xs[i] - (xs[i - 1] || x)) / 2,
+                C;
+            f ? (C = {}) : cvrs.push(C = that.rect(X - 1, y, Math.max(w + 1, 1), height).attr({stroke: "none", fill: "#000", opacity: 0}));
+            C.values = [];
+            C.symbols = that.set();
+            C.y = [];
+            C.x = xs[i];
+            C.axis = Xs[i];
+            for (var j = 0, jj = valuesy.length; j < jj; j++) {
+                Xs2 = valuesx[j] || valuesx[0];
+                for (var k = 0, kk = Xs2.length; k < kk; k++) {
+                    if (Xs2[k] == Xs[i]) {
+                        C.values.push(valuesy[j][k]);
+                        C.y.push(y + height - gutter - (valuesy[j][k] - miny) * ky);
+                        C.symbols.push(chart.symbols[j][k]);
+                    }
+                }
+            }
+            f && f.call(C);
+        }
+        !f && (columns = cvrs);
+    }
+    function createDots(f) {
+        var cvrs = f || that.set(),
+            C;
+        for (var i = 0, ii = valuesy.length; i < ii; i++) {
+            for (var j = 0, jj = valuesy[i].length; j < jj; j++) {
+                var X = x + gutter + ((valuesx[i] || valuesx[0])[j] - minx) * kx,
+                    nearX = x + gutter + ((valuesx[i] || valuesx[0])[j ? j - 1 : 1] - minx) * kx,
+                    Y = y + height - gutter - (valuesy[i][j] - miny) * ky;
+                f ? (C = {}) : cvrs.push(C = that.circle(X, Y, Math.abs(nearX - X) / 2).attr({stroke: "none", fill: "#000", opacity: 0}));
+                C.x = X;
+                C.y = Y;
+                C.value = valuesy[i][j];
+                C.line = chart.lines[i];
+                C.shade = chart.shades[i];
+                C.symbol = chart.symbols[i][j];
+                C.symbols = chart.symbols[i];
+                C.axis = (valuesx[i] || valuesx[0])[j];
+                f && f.call(C);
+            }
+        }
+        !f && (dots = cvrs);
+    }
+
+    var axis = this.set();
+    if (opts.axis) {
+        var ax = (opts.axis + "").split(/[,\s]+/);
+        +ax[0] && axis.push(this.g.axis(x + gutter, y + gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 2, opts.axisxlabels || null, opts.axisxtype || "t"));
+        +ax[1] && axis.push(this.g.axis(x + width - gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 3, opts.axisylabels || null, opts.axisytype || "t"));
+        +ax[2] && axis.push(this.g.axis(x + gutter, y + height - gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 0, opts.axisxlabels || null, opts.axisxtype || "t"));
+        +ax[3] && axis.push(this.g.axis(x + gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 1, opts.axisylabels || null, opts.axisytype || "t"));
+    }
+
+    chart.push(lines, shades, symbols, axis, columns, dots);
+    chart.lines = lines;
+    chart.shades = shades;
+    chart.symbols = symbols;
+    chart.axis = axis;
+    chart.hoverColumn = function (fin, fout) {
+        !columns && createColumns();
+        columns.mouseover(fin).mouseout(fout);
+        return this;
+    };
+    chart.clickColumn = function (f) {
+        !columns && createColumns();
+        columns.click(f);
+        return this;
+    };
+    chart.hrefColumn = function (cols) {
+        var hrefs = that.raphael.is(arguments[0], "array") ? arguments[0] : arguments;
+        if (!(arguments.length - 1) && typeof cols == "object") {
+            for (var x in cols) {
+                for (var i = 0, ii = columns.length; i < ii; i++) if (columns[i].axis == x) {
+                    columns[i].attr("href", cols[x]);
+                }
+            }
+        }
+        !columns && createColumns();
+        for (i = 0, ii = hrefs.length; i < ii; i++) {
+            columns[i] && columns[i].attr("href", hrefs[i]);
+        }
+        return this;
+    };
+    chart.hover = function (fin, fout) {
+        !dots && createDots();
+        dots.mouseover(fin).mouseout(fout);
+        return this;
+    };
+    chart.click = function (f) {
+        !dots && createDots();
+        dots.click(f);
+        return this;
+    };
+    chart.each = function (f) {
+        createDots(f);
+        return this;
+    };
+    chart.eachColumn = function (f) {
+        createColumns(f);
+        return this;
+    };
+    return chart;
+};
+/*!
+ * g.Raphael 0.4.1 - Charting library, based on Raphaël
+ *
+ * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
+ * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
+ */
+Raphael.fn.g.piechart = function (cx, cy, r, values, opts) {
+    opts = opts || {};
+    var paper = this,
+        sectors = [],
+        covers = this.set(),
+        chart = this.set(),
+        series = this.set(),
+        order = [],
+        len = values.length,
+        angle = 0,
+        total = 0,
+        others = 0,
+        cut = 9,
+        defcut = true;
+
+    var sum = 0;
+    for (var i = 0; i < len; i++)
+        sum += values[i];
+    var single = false;
+    var single_index = -1;
+    for (var i = 0; i < len; i++)
+        if (sum == values[i]) {
+            single = true;
+            single_index = i;
+            break;
+        }
+    if (len == 1 || single == true) {
+        for(var i = 0; i < len; i++) {
+            var radius = 0.1;
+            if (i == single_index) {
+                radius = r;
+            }
+            series.push(this.circle(cx, cy, radius).attr({fill: opts.colors && opts.colors[i] || this.g.colors[i], stroke: opts.stroke || "#fff", "stroke-width": opts.strokewidth == null ? 1 : opts.strokewidth}));
+            covers.push(this.circle(cx, cy, radius).attr({href: opts.href ? opts.href[i] : null}).attr(this.g.shim));
+            values[i] = {value: values[i], order: i, valueOf: function () { return this.value; }};
+            series[i].middle = {x: cx, y: cy};
+            series[i].mangle = 180;
+        }
+        total = values[single_index];
+    } else {
+        function sector(cx, cy, r, startAngle, endAngle, fill) {
+            var rad = Math.PI / 180,
+                x1 = cx + r * Math.cos(-startAngle * rad),
+                x2 = cx + r * Math.cos(-endAngle * rad),
+                xm = cx + r / 2 * Math.cos(-(startAngle + (endAngle - startAngle) / 2) * rad),
+                y1 = cy + r * Math.sin(-startAngle * rad),
+                y2 = cy + r * Math.sin(-endAngle * rad),
+                ym = cy + r / 2 * Math.sin(-(startAngle + (endAngle - startAngle) / 2) * rad),
+                res = ["M", cx, cy, "L", x1, y1, "A", r, r, 0, +(Math.abs(endAngle - startAngle) > 180), 1, x2, y2, "z"];
+            res.middle = {x: xm, y: ym};
+            return res;
+        }
+        for (var i = 0; i < len; i++) {
+            total += values[i];
+            values[i] = {value: values[i], order: i, valueOf: function () { return this.value; }};
+        }
+        values.sort(function (a, b) {
+            return b.value - a.value;
+        });
+        for (i = 0; i < len; i++) {
+            if (defcut && values[i] * 360 / total <= 1.5) {
+                cut = i;
+                defcut = false;
+            }
+            if (i > cut) {
+                defcut = false;
+                values[cut].value += values[i];
+                values[cut].others = true;
+                others = values[cut].value;
+            }
+        }
+        len = Math.min(cut + 1, values.length);
+        others && values.splice(len) && (values[cut].others = true);
+        for (i = 0; i < len; i++) {
+            var valueOrder = values[i].order;
+            var mangle = angle - 360 * values[i] / total / 2;
+            if (!i) {
+                angle = 90 - mangle;
+                mangle = angle - 360 * values[i] / total / 2;
+            }
+            if (opts.init) {
+                var ipath = sector(cx, cy, 1, angle, angle - 360 * values[i] / total).join(",");
+            }
+            var path = sector(cx, cy, r, angle, angle -= 360 * values[i] / total);
+            var p = this.path(opts.init ? ipath : path).attr({fill: opts.colors && opts.colors[valueOrder] || this.g.colors[valueOrder] || "#666", stroke: opts.stroke || "#fff", "stroke-width": (opts.strokewidth == null ? 1 : opts.strokewidth), "stroke-linejoin": "round"});
+            p.value = values[i];
+            p.middle = path.middle;
+            p.mangle = mangle;
+            sectors.push(p);
+            series.push(p);
+            opts.init && p.animate({path: path.join(",")}, (+opts.init - 1) || 1000, ">");
+        }
+        for (i = 0; i < len; i++) {
+            p = paper.path(sectors[i].attr("path")).attr(this.g.shim);
+            var valueOrder = values[i].order;
+            opts.href && opts.href[valueOrder] && p.attr({href: opts.href[valueOrder]});
+            //p.attr = function () {}; // this breaks translate!
+            covers.push(p);
+        }
+    }
+
+    chart.hover = function (fin, fout) {
+        fout = fout || function () {};
+        var that = this;
+        for (var i = 0; i < len; i++) {
+            (function (sector, cover, j) {
+                var o = {
+                    sector: sector,
+                    cover: cover,
+                    cx: cx,
+                    cy: cy,
+                    mx: sector.middle.x,
+                    my: sector.middle.y,
+                    mangle: sector.mangle,
+                    r: r,
+                    value: values[j],
+                    total: total,
+                    label: that.labels && that.labels[j]
+                };
+                cover.mouseover(function () {
+                    fin.call(o);
+                }).mouseout(function () {
+                    fout.call(o);
+                });
+            })(series[i], covers[i], i);
+        }
+        return this;
+    };
+    // x: where label could be put
+    // y: where label could be put
+    // value: value to show
+    // total: total number to count %
+    chart.each = function (f) {
+        var that = this;
+        for (var i = 0; i < len; i++) {
+            (function (sector, cover, j) {
+                var o = {
+                    sector: sector,
+                    cover: cover,
+                    cx: cx,
+                    cy: cy,
+                    x: sector.middle.x,
+                    y: sector.middle.y,
+                    mangle: sector.mangle,
+                    r: r,
+                    value: values[j],
+                    total: total,
+                    label: that.labels && that.labels[j]
+                };
+                f.call(o);
+            })(series[i], covers[i], i);
+        }
+        return this;
+    };
+    chart.click = function (f) {
+        var that = this;
+        for (var i = 0; i < len; i++) {
+            (function (sector, cover, j) {
+                var o = {
+                    sector: sector,
+                    cover: cover,
+                    cx: cx,
+                    cy: cy,
+                    mx: sector.middle.x,
+                    my: sector.middle.y,
+                    mangle: sector.mangle,
+                    r: r,
+                    value: values[j],
+                    total: total,
+                    label: that.labels && that.labels[j]
+                };
+                cover.click(function () { f.call(o); });
+            })(series[i], covers[i], i);
+        }
+        return this;
+    };
+    chart.inject = function (element) {
+        element.insertBefore(covers[0]);
+    };
+    var legend = function (labels, otherslabel, mark, dir) {
+        var x = cx + r + r / 5,
+            y = cy,
+            h = y + 10;
+        labels = labels || [];
+        dir = (dir && dir.toLowerCase && dir.toLowerCase()) || "east";
+        mark = paper.g.markers[mark && mark.toLowerCase()] || "disc";
+        chart.labels = paper.set();
+        for (var i = 0; i < len; i++) {
+            var clr = series[i].attr("fill"),
+                j = values[i].order,
+                txt;
+            values[i].others && (labels[j] = otherslabel || "Others");
+            labels[j] = paper.g.labelise(labels[j], values[i], total);
+            chart.labels.push(paper.set());
+            chart.labels[i].push(paper.g[mark](x + 5, h, 5).attr({fill: clr, stroke: "none"}));
+            chart.labels[i].push(txt = paper.text(x + 20, h, labels[j] || values[j]).attr(paper.g.txtattr).attr({fill: opts.legendcolor || "#000", "text-anchor": "start"}));
+            covers[i].label = chart.labels[i];
+            h += txt.getBBox().height * 1.2;
+        }
+        var bb = chart.labels.getBBox(),
+            tr = {
+                east: [0, -bb.height / 2],
+                west: [-bb.width - 2 * r - 20, -bb.height / 2],
+                north: [-r - bb.width / 2, -r - bb.height - 10],
+                south: [-r - bb.width / 2, r + 10]
+            }[dir];
+        chart.labels.translate.apply(chart.labels, tr);
+        chart.push(chart.labels);
+    };
+    if (opts.legend) {
+        legend(opts.legend, opts.legendothers, opts.legendmark, opts.legendpos);
+    }
+    chart.push(series, covers);
+    chart.series = series;
+    chart.covers = covers;
+    
+    var w = paper.width,
+        h = paper.height,
+        bb = chart.getBBox(),
+        tr = [(w - bb.width)/2 - bb.x, (h - bb.height)/2 - bb.y];
+    cx += tr[0];
+    cy += tr[1];
+    chart.translate.apply(chart, tr);
+    return chart;
+};
+
+/*!
+ * date-range-parser.js
+ * Contributed to the Apache Software Foundation by:
+ *    Ben Birch - Aconex
+ * fork me at https://github.com/mobz/date-range-parser
+
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+
+*/
+
+(function() {
+
+	var drp = window.dateRangeParser = {};
+
+	drp.defaultRange = 1000 * 60 * 60 * 24;
+
+	drp.now = null; // set a different value for now than the time at function invocation
+
+	drp.parse = function(v) {
+		try {
+			var r = drp._parse(v);
+			r.end && r.end--; // remove 1 millisecond from the final end range
+		} catch(e) {
+			r = null;
+		}
+		return r;
+	};
+
+	drp.print = function(t, p) {
+		var format = ["", "-", "-", " ", ":", ":", "."];
+		var da = makeArray(t);
+		var str = "";
+		for(var i = 0; i <= p; i++) {
+			str += format[i] + (da[i] < 10 ? "0" : "") + da[i];
+		}
+		return str;
+	};
+
+	(function() {
+		drp._relTokens = {};
+
+		var values = {
+			"yr"  : 365*24*60*60*1000,
+			"mon" : 31*24*60*60*1000,
+			"day" : 24*60*60*1000,
+			"hr"  : 60*60*1000,
+			"min" : 60*1000,
+			"sec" : 1000
+		};
+
+		var alias_lu = {
+			"yr" : "y,yr,yrs,year,years",
+			"mon" : "mo,mon,mos,mons,month,months",
+			"day" : "d,dy,dys,day,days",
+			"hr" : "h,hr,hrs,hour,hours",
+			"min" : "m,min,mins,minute,minutes",
+			"sec" : "s,sec,secs,second,seconds"
+		};
+
+		for(var key in alias_lu) {
+			if(alias_lu.hasOwnProperty(key)) {
+				var aliases = alias_lu[key].split(",");
+				for(var i = 0; i < aliases.length; i++) {
+					drp._relTokens[aliases[i]] = values[key];
+				}
+			}
+		}
+	})();
+
+	function makeArray(d) {
+		var da = new Date(d);
+		return [ da.getUTCFullYear(), da.getUTCMonth()+1, da.getUTCDate(), da.getUTCHours(), da.getUTCMinutes(), da.getUTCSeconds(), da.getUTCMilliseconds() ];
+	}
+
+	function fromArray(a) {
+		var d = [].concat(a); d[1]--;
+		return Date.UTC.apply(null, d);
+	}
+
+	drp._parse = function parse(v) {
+		var now = this.now || new Date().getTime();
+
+		function precArray(d, p, offset) {
+			var tn = makeArray(d);
+			tn[p] += offset || 0;
+			for(var i = p+1; i < 7; i++) {
+				tn[i] = i < 3 ? 1 : 0;
+			}
+			return tn;
+		}
+		function makePrecRange(dt, p, r) {
+			var ret = { };
+			ret.start = fromArray(dt);
+			dt[p] += r || 1;
+			ret.end = fromArray(dt);
+			return ret;
+		}
+		function procTerm(term) {
+			var m = term.replace(/\s/g, "").toLowerCase().match(/^([a-z ]+)$|^([ 0-9:-]+)$|^(\d+[a-z]+)$/);
+			if(m[1]) {	// matches ([a-z ]+)
+				function dra(p, o, r) {
+					var dt = precArray(now, p, o);
+					if(r) {
+						dt[2] -= new Date(fromArray(dt)).getUTCDay();
+					}
+					return makePrecRange(dt, p, r);
+				}
+				switch( m[1]) {
+					case "now" : return { start: now, end: now, now: now };
+					case "today" : return dra( 2, 0 );
+					case "thisweek" : return dra( 2, 0, 7 );
+					case "thismonth" : return dra( 1, 0 );
+					case "thisyear" : return dra( 0, 0 );
+					case "yesterday" : return dra( 2, -1 );
+					case "lastweek" : return dra( 2, -7, 7 );
+					case "lastmonth" : return dra( 1, -1 );
+					case "lastyear" : return dra( 0, -1 );
+					case "tomorrow" : return dra( 2, 1 );
+					case "nextweek" : return dra( 2, 7, 7 );
+					case "nextmonth" : return dra( 1, 1 );
+					case "nextyear" : return dra(0, 1 );
+				}
+				throw "unknown token " +  m[1];
+			} else if(m[2]) { // matches ([ 0-9:-]+)
+				dn = makeArray(now);
+				var dt = m[2].match(/^(?:(\d{4})(?:\-(\d\d))?(?:\-(\d\d))?)? ?(?:(\d{1,2})(?:\:(\d\d)(?:\:(\d\d))?)?)?$/);
+				dt.shift();
+				for(var p = 0, z = false, i = 0; i < 7; i++) {
+					if(dt[i]) {
+						dn[i] = parseInt(dt[i], 10);
+						p = i;
+						z = true;
+					} else {
+						if(z)
+							dn[i] = i < 3 ? 1 : 0;
+					}
+				}
+				return makePrecRange(dn, p);
+			} else if(m[3]) { // matches (\d+[a-z]{1,4})
+				var dr = m[3].match(/(\d+)\s*([a-z]+)/i);
+				var n = parseInt(dr[1], 10);
+				return { rel: n * drp._relTokens[dr[2]] };
+			}
+			throw "unknown term " + term;
+		}
+
+		if(!v) {
+			return { start: null, end: null };
+		}
+		var terms = v.split(/\s*([^<>]*[^<>-])?\s*(->|<>|<)?\s*([^<>]+)?\s*/);
+
+		var term1 = terms[1] ? procTerm(terms[1]) : null;
+		var op = terms[2] || "";
+		var term2 = terms[3] ? procTerm(terms[3]) : null;
+
+		if(op === "<" || op === "->" ) {
+			if(term1 && !term2) {
+				return { start: term1.start, end: null };
+			} else if(!term1 && term2) {
+				return { start: null, end: term2.end };
+			} else {
+				if(term2.rel) {
+					return { start: term1.start, end: term1.end + term2.rel };
+				} else if(term1.rel) {
+					return { start: term2.start - term1.rel, end: term2.end };
+				} else {
+					return { start: term1.start, end: term2.end };
+				}
+			}
+		} else if(op === "<>") {
+			if(!term2) {
+				return { start: term1.start - drp.defaultRange, end: term1.end + drp.defaultRange }
+			} else {
+				if(! ("rel" in term2)) throw "second term did not hav a range";
+				return { start: term1.start - term2.rel, end: term1.end + term2.rel };
+			}
+		} else {
+			if(term1.rel) {
+				return { start: now - term1.rel, end: now + term1.rel };
+			} else if(term1.now) {
+				return { start: term1.now - drp.defaultRange, end: term1.now + drp.defaultRange };
+			} else {
+				return { start: term1.start, end: term1.end };
+			}
+		}
+		throw "could not process value " + v;
+	};
+})();
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/elasticsearch-head.sublime-project b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/elasticsearch-head.sublime-project
new file mode 100644
index 0000000..16bb2d8
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/elasticsearch-head.sublime-project
@@ -0,0 +1,9 @@
+{
+	"folders":
+	[
+		{
+			"path": ".",
+			"folder_exclude_patterns": [ "node_modules", "_site" ]
+		}
+	]
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/grunt_fileSets.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/grunt_fileSets.js
new file mode 100644
index 0000000..2ac1ae0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/grunt_fileSets.js
@@ -0,0 +1,102 @@
+exports.vendorJs = [
+	'src/vendor/jquery/jquery.js',
+	'src/vendor/joey/joey.js',
+	'src/vendor/nohtml/jquery-nohtml.js',
+	'src/vendor/graphael/g.raphael.standalone.js',
+	'src/vendor/dateRangeParser/date-range-parser.js'
+];
+
+exports.vendorCss = [
+	'src/vendor/font-awesome/css/font-awesome.css'
+];
+
+exports.srcJs = [
+	'src/app/base/boot.js',
+
+	'src/app/ux/class.js',
+	'src/app/ux/templates/templates.js',
+	'src/app/ux/observable.js',
+	'src/app/ux/singleton.js',
+	'src/app/ux/dragdrop.js',
+	'src/app/ux/fieldCollection.js',
+
+	'src/app/data/model/model.js',
+	'src/app/data/dataSourceInterface.js',
+	'src/app/data/resultDataSourceInterface.js',
+	'src/app/data/metaData.js',
+	'src/app/data/metaDataFactory.js',
+	'src/app/data/query.js',
+	'src/app/data/queryDataSourceInterface.js',
+	'src/app/data/boolQuery.js',
+
+	'src/app/services/preferences/preferences.js',
+	'src/app/services/cluster/cluster.js',
+	'src/app/services/clusterState/clusterState.js',
+
+	'src/app/ui/abstractWidget/abstractWidget.js',
+	'src/app/ui/abstractField/abstractField.js',
+	'src/app/ui/textField/textField.js',
+	'src/app/ui/checkField/checkField.js',
+	'src/app/ui/button/button.js',
+	'src/app/ui/menuButton/menuButton.js',
+	'src/app/ui/splitButton/splitButton.js',
+	'src/app/ui/refreshButton/refreshButton.js',
+	'src/app/ui/toolbar/toolbar.js',
+	'src/app/ui/abstractPanel/abstractPanel.js',
+	'src/app/ui/draggablePanel/draggablePanel.js',
+	'src/app/ui/infoPanel/infoPanel.js',
+	'src/app/ui/dialogPanel/dialogPanel.js',
+	'src/app/ui/menuPanel/menuPanel.js',
+	'src/app/ui/selectMenuPanel/selectMenuPanel.js',
+	'src/app/ui/table/table.js',
+	'src/app/ui/csvTable/csvTable.js',
+	'src/app/ui/jsonPretty/jsonPretty.js',
+	'src/app/ui/panelForm/panelForm.js',
+	'src/app/ui/helpPanel/helpPanel.js',
+	'src/app/ui/jsonPanel/jsonPanel.js',
+	'src/app/ui/sidebarSection/sidebarSection.js',
+	'src/app/ui/resultTable/resultTable.js',
+	'src/app/ui/queryFilter/queryFilter.js',
+	'src/app/ui/page/page.js',
+	'src/app/ui/browser/browser.js',
+	'src/app/ui/anyRequest/anyRequest.js',
+	'src/app/ui/nodesView/nodesView.js',
+	'src/app/ui/clusterOverview/clusterOverview.js',
+	'src/app/ui/dateHistogram/dateHistogram.js',
+	'src/app/ui/clusterConnect/clusterConnect.js',
+	'src/app/ui/structuredQuery/structuredQuery.js',
+	'src/app/ui/filterBrowser/filterBrowser.js',
+	'src/app/ui/indexSelector/indexSelector.js',
+	'src/app/ui/header/header.js',
+	'src/app/ui/indexOverview/indexOverview.js',
+
+	'src/app/app.js'
+];
+
+exports.srcCss = [
+	'src/app/ux/table.css',
+	'src/app/ui/abstractField/abstractField.css',
+	'src/app/ui/button/button.css',
+	'src/app/ui/menuButton/menuButton.css',
+	'src/app/ui/splitButton/splitButton.css',
+	'src/app/ui/toolbar/toolbar.css',
+	'src/app/ui/abstractPanel/abstractPanel.css',
+	'src/app/ui/infoPanel/infoPanel.css',
+	'src/app/ui/menuPanel/menuPanel.css',
+	'src/app/ui/selectMenuPanel/selectMenuPanel.css',
+	'src/app/ui/table/table.css',
+	'src/app/ui/jsonPretty/jsonPretty.css',
+	'src/app/ui/jsonPanel/jsonPanel.css',
+	'src/app/ui/panelForm/panelForm.css',
+	'src/app/ui/sidebarSection/sidebarSection.css',
+	'src/app/ui/queryFilter/queryFilter.css',
+	'src/app/ui/browser/browser.css',
+	'src/app/ui/anyRequest/anyRequest.css',
+	'src/app/ui/nodesView/nodesView.css',
+	'src/app/ui/clusterOverview/clusterOverview.css',
+	'src/app/ui/clusterConnect/clusterConnect.css',
+	'src/app/ui/structuredQuery/structuredQuery.css',
+	'src/app/ui/filterBrowser/filterBrowser.css',
+	'src/app/ui/header/header.css',
+	'src/app/app.css'
+];
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/index.html b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/index.html
new file mode 100644
index 0000000..8b5c3ee
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/index.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+
+<html>
+	<head>
+		<meta charset="UTF-8">
+		<title>elasticsearch-head</title>
+		<link rel="stylesheet" href="_site/base/reset.css">
+		<link rel="stylesheet" href="_site/vendor.css">
+		<link rel="stylesheet" href="_site/app.css">
+		<script src="_site/i18n.js" data-baseDir="_site/lang" data-langs="en,fr,pt,zh,tr"></script>
+		<script src="_site/vendor.js"></script>
+		<script src="_site/app.js"></script>
+		<script>
+			window.onload = function() {
+				if(location.href.contains("/_plugin/")) {
+					var base_uri = location.href.replace(/_plugin\/.*/, '');
+				}
+				var args = location.search.substring(1).split("&").reduce(function(r, p) {
+					r[decodeURIComponent(p.split("=")[0])] = decodeURIComponent(p.split("=")[1]); return r;
+				}, {});
+				new app.App("body", {
+					id: "es",
+					base_uri: args["base_uri"] || base_uri,
+					auth_user : args["auth_user"] || "",
+					auth_password : args["auth_password"],
+					dashboard: args["dashboard"]
+				});
+			};
+		</script>
+		<link rel="icon" href="base/favicon.png" type="image/png">
+	</head>
+	<body></body>
+</html>
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/package.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/package.json
new file mode 100644
index 0000000..4aefb7a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/package.json
@@ -0,0 +1,31 @@
+{
+  "name": "elasticsearch-head",
+  "version": "0.0.0",
+  "description": "Front end for an elasticsearch cluster",
+  "main": "_site/index.html",
+  "directories": {
+    "test": "test"
+  },
+  "scripts": {
+    "test": "grunt jasmine"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/mobz/elasticsearch-head.git"
+  },
+  "author": "",
+  "license": "Apache2",
+  "gitHead": "0c2ac0b5723b493e4454baa7398f386ecb829412",
+  "readmeFilename": "README.textile",
+  "devDependencies": {
+    "grunt": "0.4.5",
+    "grunt-contrib-concat": "0.4.0",
+    "grunt-contrib-watch": "0.5.1",
+    "grunt-contrib-connect": "0.3.0",
+    "grunt-contrib-copy": "0.5.0",
+    "grunt-contrib-clean": "0.5.0",
+    "grunt-contrib-jasmine": "0.6.4",
+    "karma": "0.12.16",
+    "grunt-karma": "0.8.3"
+  }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/plugin-descriptor.properties b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/plugin-descriptor.properties
new file mode 100644
index 0000000..37a9064
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/plugin-descriptor.properties
@@ -0,0 +1,4 @@
+description=head - A web front end for an elastic search cluster
+version=master
+site=true
+name=head
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/app.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/app.css
new file mode 100644
index 0000000..08e2dcf
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/app.css
@@ -0,0 +1,39 @@
+.uiApp-header {
+	background: #eee;
+	position: fixed;
+	width: 100%;
+	z-index: 9;
+}
+
+.uiApp-header H1 {
+	margin: -2px 0 -4px 0;
+	float: left;
+	padding-right: 25px;
+}
+
+.uiApp-headerMenu {
+	border-bottom: 1px solid #bbb;
+	padding: 0px 3px;
+	height: 22px;
+}
+
+.uiApp-headerMenu .active {
+	background: white;
+	border-bottom-color: white;
+}
+
+.uiApp-headerMenuItem {
+	border: 1px solid #bbb;
+	padding: 4px 8px 1px ;
+	margin: 2px 1px 0;
+	height: 14px;
+	cursor: pointer;
+}
+
+.uiApp-body {
+	padding: 51px 0px 0px 0px;
+}
+
+.uiApp-headerNewMenuItem {
+	color: blue;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/app.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/app.js
new file mode 100644
index 0000000..036e97f
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/app.js
@@ -0,0 +1,132 @@
+(function( app, i18n ) {
+
+	var ui = app.ns("ui");
+	var services = app.ns("services");
+
+	app.App = ui.AbstractWidget.extend({
+		defaults: {
+			base_uri: null
+		},
+		init: function(parent) {
+			this._super();
+			this.prefs = services.Preferences.instance();
+			this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";
+			if( this.base_uri.charAt( this.base_uri.length - 1 ) !== "/" ) {
+				// XHR request fails if the URL is not ending with a "/"
+				this.base_uri += "/";
+			}
+			if( this.config.auth_user ) {
+				var credentials = window.btoa( this.config.auth_user + ":" + this.config.auth_password );
+				$.ajaxSetup({
+					headers: {
+						"Authorization": "Basic " + credentials
+					}
+				});
+			}
+			this.cluster = new services.Cluster({ base_uri: this.base_uri });
+			this._clusterState = new services.ClusterState({
+				cluster: this.cluster
+			});
+
+			this._header = new ui.Header({ cluster: this.cluster, clusterState: this._clusterState });
+			this.$body = $.joey( this._body_template() );
+			this.el = $.joey(this._main_template());
+			this.attach( parent );
+			this.instances = {};
+			this.el.find(".uiApp-headerMenuItem:first").click();
+			if( this.config.dashboard ) {
+				if( this.config.dashboard === "cluster" ) {
+					var page = this.instances["ClusterOverview"];
+					page._refreshButton.set( 5000 );
+				}
+			}
+		},
+
+		navigateTo: function( type, config, ev ) {
+			if( ev.target.classList.contains( "uiApp-headerNewMenuItem" ) ) {
+				this.showNew( type, config, ev );
+			} else {
+				var ref = type + "0";
+				if(! this.instances[ ref ]) {
+					this.createPage( type, 0, config );
+				}
+				this.show( ref, ev );
+			}
+		},
+
+		createPage: function( type, id, config ) {
+			var page = this.instances[ type + id ] = new ui[ type ]( config );
+			this.$body.append( page );
+			return page;
+		},
+
+		show: function( ref, ev ) {
+			$( ev.target ).closest("DIV.uiApp-headerMenuItem").addClass("active").siblings().removeClass("active");
+			for(var p in this.instances) {
+				this.instances[p][ p === ref ? "show" : "hide" ]();
+			}
+		},
+
+		showNew: function( type, config, jEv ) {
+			var ref, page, $tab,
+				type_index = 0;
+
+			while ( ! page ) {
+				ref = type + ( ++type_index );
+				if (! ( ref in this.instances ) ) {
+					page = this.createPage( type, type_index, config );
+				}
+			}
+
+			// Add the tab and its click handlers
+			$tab = $.joey({
+				tag: "DIV",
+				cls: "uiApp-headerMenuItem pull-left",
+				text: i18n.text("Nav." + type ) + " " + type_index,
+				onclick: function( ev ) { this.show( ref, ev ); }.bind(this),
+				children: [
+					{ tag: "A", text: " [-]", onclick: function (ev) {
+						$tab.remove();
+						page.remove();
+						delete this.instances[ ref ];
+					}.bind(this) }
+				]
+			});
+
+			$('.uiApp-headerMenu').append( $tab );
+			$tab.trigger("click");
+		},
+
+		_openAnyRequest_handler: function(ev) { this.navigateTo("AnyRequest", { cluster: this.cluster }, ev ); },
+		_openStructuredQuery_handler: function(ev) { this.navigateTo("StructuredQuery", { cluster: this.cluster }, ev ); },
+		_openBrowser_handler: function(ev) { this.navigateTo("Browser", { cluster: this.cluster }, ev );  },
+		_openClusterOverview_handler: function(ev) { this.navigateTo("ClusterOverview", { cluster: this.cluster, clusterState: this._clusterState }, ev ); },
+		_openIndexOverview_handler: function(ev) { this.navigateTo("IndexOverview", { cluster: this.cluster, clusterState: this._clusterState }, ev ); },
+
+		_body_template: function() { return (
+			{ tag: "DIV", id: this.id("body"), cls: "uiApp-body" }
+		); },
+
+		_main_template: function() {
+			return { tag: "DIV", cls: "uiApp", children: [
+				{ tag: "DIV", id: this.id("header"), cls: "uiApp-header", children: [
+					this._header,
+					{ tag: "DIV", cls: "uiApp-headerMenu", children: [
+						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Overview"), onclick: this._openClusterOverview_handler },
+						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Indices"), onclick: this._openIndexOverview_handler },
+						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Browser"), onclick: this._openBrowser_handler },
+						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.StructuredQuery"), onclick: this._openStructuredQuery_handler, children: [
+							{ tag: "A", cls: "uiApp-headerNewMenuItem ", text: ' [+]' }
+						] },
+						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.AnyRequest"), onclick: this._openAnyRequest_handler, children: [
+							{ tag: "A", cls: "uiApp-headerNewMenuItem ", text: ' [+]' }
+						] },
+					]}
+				]},
+				this.$body
+			]};
+		}
+		
+	});
+
+})( this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/base/boot.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/base/boot.js
new file mode 100644
index 0000000..4dd0c0d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/base/boot.js
@@ -0,0 +1,241 @@
+(function() {
+
+	var window = this,
+		$ = jQuery;
+
+	function ns( namespace ) {
+		return (namespace || "").split(".").reduce( function( space, name ) {
+			return space[ name ] || ( space[ name ] = { ns: ns } );
+		}, this );
+	}
+
+	var app = ns("app");
+
+	var acx = ns("acx");
+
+	/**
+	 * object iterator, returns an array with one element for each property of the object
+	 * @function
+	 */
+	acx.eachMap = function(obj, fn, thisp) {
+		var ret = [];
+		for(var n in obj) {
+			ret.push(fn.call(thisp, n, obj[n], obj));
+		}
+		return ret;
+	};
+
+	/**
+	 * augments the first argument with the properties of the second and subsequent arguments
+	 * like {@link $.extend} except that existing properties are not overwritten
+	 */
+	acx.augment = function() {
+		var args = Array.prototype.slice.call(arguments),
+			src = (args.length === 1) ? this : args.shift(),
+			augf = function(n, v) {
+				if(! (n in src)) {
+					src[n] = v;
+				}
+			};
+		for(var i = 0; i < args.length; i++) {
+			$.each(args[i], augf);
+		}
+		return src;
+	};
+
+	/**
+	 * tests whether the argument is an array
+	 * @function
+	 */
+	acx.isArray = $.isArray;
+
+	/**
+	 * tests whether the argument is an object
+	 * @function
+	 */
+	acx.isObject = function (value) {
+		return Object.prototype.toString.call(value) == "[object Object]";
+	};
+
+	/**
+	 * tests whether the argument is a function
+	 * @function
+	 */
+	acx.isFunction = $.isFunction;
+
+	/**
+	 * tests whether the argument is a date
+	 * @function
+	 */
+	acx.isDate = function (value) {
+		return Object.prototype.toString.call(value) == "[object Date]";
+	};
+
+	/**
+	 * tests whether the argument is a regexp
+	 * @function
+	 */
+	acx.isRegExp = function (value) {
+		return Object.prototype.toString.call(value) == "[object RegExp]";
+	};
+
+	/**
+	 * tests whether the value is blank or empty
+	 * @function
+	 */
+	acx.isEmpty = function (value, allowBlank) {
+		return value === null || value === undefined || ((acx.isArray(value) && !value.length)) || (!allowBlank ? value === '' : false);
+	};
+
+	/**
+	 * data type for performing chainable geometry calculations<br>
+	 * can be initialised x,y | {x, y} | {left, top}
+	 */
+	acx.vector = function(x, y) {
+		return new acx.vector.prototype.Init(x, y);
+	};
+
+	acx.vector.prototype = {
+		Init : function(x, y) {
+			x = x || 0;
+			this.y = isFinite(x.y) ? x.y : (isFinite(x.top) ? x.top : (isFinite(y) ? y : 0));
+			this.x = isFinite(x.x) ? x.x : (isFinite(x.left) ? x.left : (isFinite(x) ? x : 0));
+		},
+		
+		add : function(i, j) {
+			var d = acx.vector(i, j);
+			return new this.Init(this.x + d.x, this.y + d.y);
+		},
+		
+		sub : function(i, j) {
+			var d = acx.vector(i, j);
+			return new this.Init(this.x - d.x, this.y - d.y);
+		},
+		
+		addX : function(i) {
+			return new this.Init(this.x + i, this.y);
+		},
+		
+		addY : function(j) {
+			return new this.Init(this.x, this.y + j);
+		},
+
+		mod : function(fn) { // runs a function against the x and y values
+			return new this.Init({x: fn.call(this, this.x, "x"), y: fn.call(this, this.y, "y")});
+		},
+		
+		/** returns true if this is within a rectangle formed by the points p and q */
+		within : function(p, q) {
+			return ( this.x >= ((p.x < q.x) ? p.x : q.x) && this.x <= ((p.x > q.x) ? p.x : q.x) &&
+					this.y >= ((p.y < q.y) ? p.y : q.y) && this.y <= ((p.y > q.y) ? p.y : q.y) );
+		},
+		
+		asOffset : function() {
+			return { top: this.y, left: this.x };
+		},
+		
+		asSize : function() {
+			return { height: this.y, width: this.x };
+		}
+	};
+
+	acx.vector.prototype.Init.prototype = acx.vector.prototype;
+
+	/**
+	 * short cut functions for working with vectors and jquery.
+	 * Each function returns the equivalent jquery value in a two dimentional vector
+	 */
+	$.fn.vSize = function() { return acx.vector(this.width(), this.height()); };
+	$.fn.vOuterSize = function(margin) { return acx.vector(this.outerWidth(margin), this.outerHeight(margin)); };
+	$.fn.vScroll = function() { return acx.vector(this.scrollLeft(), this.scrollTop()); };
+	$.fn.vOffset = function() { return acx.vector(this.offset()); };
+	$.fn.vPosition = function() { return acx.vector(this.position()); };
+	$.Event.prototype.vMouse = function() { return acx.vector(this.pageX, this.pageY); };
+
+	/**
+	 * object extensions (ecma5 compatible)
+	 */
+	acx.augment(Object, {
+		keys: function(obj) {
+			var ret = [];
+			for(var n in obj) if(Object.prototype.hasOwnProperty.call(obj, n)) ret.push(n);
+			return ret;
+		}
+	});
+
+	/**
+	 * Array prototype extensions
+	 */
+	acx.augment(Array.prototype, {
+		'contains' : function(needle) {
+			return this.indexOf(needle) !== -1;
+		},
+
+		// returns a new array consisting of all the members that are in both arrays
+		'intersection' : function(b) {
+			var ret = [];
+			for(var i = 0; i < this.length; i++) {
+				if(b.contains(this[i])) {
+					ret.push(this[i]);
+				}
+			}
+			return ret;
+		},
+		
+		'remove' : function(value) {
+			var i = this.indexOf(value);
+			if(i !== -1) {
+				this.splice(i, 1);
+			}
+		}
+	});
+
+	/**
+	 * String prototype extensions
+	 */
+	acx.augment(String.prototype, {
+		'contains' : function(needle) {
+			return this.indexOf(needle) !== -1;
+		},
+
+		'equalsIgnoreCase' : function(match) {
+			return this.toLowerCase() === match.toLowerCase();
+		},
+
+		'escapeHtml' : function() {
+			return this.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
+		},
+
+		'escapeJS' : function() {
+			var meta = {'"':'\\"', '\\':'\\\\', '/':'\\/', '\b':'\\b', '\f':'\\f', '\n':'\\n', '\r':'\\r', '\t':'\\t'},
+				xfrm = function(c) { return meta[c] || "\\u" + c.charCodeAt(0).toString(16).zeroPad(4); };
+			return this.replace(new RegExp('(["\\\\\x00-\x1f\x7f-\uffff])', 'g'), xfrm);
+		},
+
+		'escapeRegExp' : function() {
+			var ret = "", esc = "\\^$*+?.()=|{,}[]-";
+			for ( var i = 0; i < this.length; i++) {
+				ret += (esc.contains(this.charAt(i)) ? "\\" : "") + this.charAt(i);
+			}
+			return ret;
+		},
+		
+		'zeroPad' : function(len) {
+			return ("0000000000" + this).substring(this.length - len + 10);
+		}
+	});
+
+	$.fn.forEach = Array.prototype.forEach;
+
+	// joey / jquery integration
+	$.joey = function( obj ) {
+		return $( window.joey( obj ) );
+	};
+
+	window.joey.plugins.push( function( obj ) {
+		if( obj instanceof jQuery ) {
+			return obj[0];
+		}
+	});
+
+})();
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/base/favicon.png b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/base/favicon.png
new file mode 100644
index 0000000..f433ec6
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/base/favicon.png
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/base/loading.gif b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/base/loading.gif
new file mode 100644
index 0000000..f001e23
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/base/loading.gif
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/base/reset.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/base/reset.css
new file mode 100644
index 0000000..29a5f1b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/base/reset.css
@@ -0,0 +1,44 @@
+BODY {
+	font-family: Verdana, sans-serif;
+	font-size: 73%;
+	padding: 0;
+	margin: 0;
+}
+
+INPUT, SELECT, TEXTAREA {
+	border: 1px solid #cecece;
+	padding: 1px 3px;
+	background: white;
+}
+
+SELECT {
+	padding: 0;
+}
+
+.saf SELECT {
+	margin-top: 0;
+	margin-bottom: 0;
+}
+
+TEXTAREA, CODE {
+	font-family: monospace;
+	font-size: 13px;
+}
+
+BUTTON::-moz-focus-inner {
+	border: none;
+}
+
+.pull-left {
+	float: left;
+}
+
+.pull-right {
+	float: right;
+}
+
+.loading  {
+	background-image: url(loading.gif);
+	background-repeat: no-repeat;
+	text-indent: 20px;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/boolQuery.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/boolQuery.js
new file mode 100644
index 0000000..782d490
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/boolQuery.js
@@ -0,0 +1,75 @@
+(function( app ) {
+
+	var data = app.ns("data");
+	var ux = app.ns("ux");
+
+	data.BoolQuery = ux.Observable.extend({
+		defaults: {
+			size: 50		// size of pages to return
+		},
+		init: function() {
+			this._super();
+			this.refuid = 0;
+			this.refmap = {};
+			this.search = {
+				query: { bool: { must: [], must_not: [], should: [] } },
+				from: 0,
+				size: this.config.size,
+				sort: [],
+				aggs: {}
+			};
+			this.defaultClause = this.addClause();
+		},
+		setSize: function(size) {
+			this.search.size = parseInt( size, 10 );
+		},
+		setPage: function(page) {
+			this.search.from = this.config.size * (page - 1) + 1;
+		},
+		addClause: function(value, field, op, bool) {
+			bool = bool || "should";
+			op = op || "match_all";
+			field = field || "_all";
+			var clause = this._setClause(value, field, op, bool);
+			var uqid = "q-" + this.refuid++;
+			this.refmap[uqid] = { clause: clause, value: value, field: field, op: op, bool: bool };
+			if(this.search.query.bool.must.length + this.search.query.bool.should.length > 1) {
+				this.removeClause(this.defaultClause);
+			}
+			this.fire("queryChanged", this, { uqid: uqid, search: this.search} );
+			return uqid; // returns reference to inner query object to allow fast updating
+		},
+		removeClause: function(uqid) {
+			var ref = this.refmap[uqid],
+				bool = this.search.query.bool[ref.bool];
+			var clauseIdx = bool.indexOf(ref.clause);
+			// Check that this clause hasn't already been removed
+			if (clauseIdx >=0) {
+				bool.splice(clauseIdx, 1);
+			}
+		},
+		_setClause: function(value, field, op, bool) {
+			var clause = {}, query = {};
+			if(op === "match_all") {
+			} else if(op === "query_string") {
+				query["default_field"] = field;
+				query["query"] = value;
+			} else if(op === "missing") {
+				op = "constant_score"
+				var missing = {}, filter = {};
+				missing["field"] = field;
+				filter["missing"] = missing
+				query["filter"] = filter;
+			} else {
+				query[field.substring(field.indexOf(".")+1)] = value;
+			}
+			clause[op] = query;
+			this.search.query.bool[bool].push(clause);
+			return clause;
+		},
+		getData: function() {
+			return JSON.stringify(this.search);
+		}
+	});
+
+})( this.app );
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/dataSourceInterface.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/dataSourceInterface.js
new file mode 100644
index 0000000..001d532
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/dataSourceInterface.js
@@ -0,0 +1,24 @@
+(function( app ) {
+
+	var data = app.ns("data");
+	var ux = app.ns("ux");
+
+	data.DataSourceInterface = ux.Observable.extend({
+		/*
+		properties
+			meta = { total: 0 },
+			headers = [ { name: "" } ],
+			data = [ { column: value, column: value } ],
+			sort = { column: "name", dir: "desc" }
+		events
+			data: function( DataSourceInterface )
+		 */
+		_getSummary: function(res) {
+			this.summary = i18n.text("TableResults.Summary", res._shards.successful, res._shards.total, res.hits.total, (res.took / 1000).toFixed(3));
+		},
+		_getMeta: function(res) {
+			this.meta = { total: res.hits.total, shards: res._shards, tool: res.took };
+		}
+	});
+
+})( this.app );
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/metaData.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/metaData.js
new file mode 100644
index 0000000..bb420fd
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/metaData.js
@@ -0,0 +1,172 @@
+(function( app ) {
+
+	/*
+	notes on elasticsearch terminology used in this project
+
+	indices[index] contains one or more
+	types[type] contains one or more
+	documents contain one or more
+	paths[path]
+	each path contains one element of data
+	each path maps to one field
+
+	eg PUT, "/twitter/tweet/1"
+	{
+		user: "mobz",
+		date: "2011-01-01",
+		message: "You know, for browsing elasticsearch",
+		name: {
+			first: "Ben",
+			last: "Birch"
+		}
+	}
+
+	creates
+		1 index: twitter
+				this is the collection of index data
+		1 type: tweet
+				this is the type of document (kind of like a table in sql)
+		1 document: /twitter/tweet/1
+				this is an actual document in the index ( kind of like a row in sql)
+		5 paths: [ ["user"], ["date"], ["message"], ["name","first"], ["name","last"] ]
+				since documents can be heirarchical this maps a path from a document root to a piece of data
+		5 fields: [ "user", "date", "message", "first", "last" ]
+				this is an indexed 'column' of data. fields are not heirarchical
+
+		the relationship between a path and a field is called a mapping. mappings also contain a wealth of information about how es indexes the field
+
+	notes
+	1) a path is stored as an array, the dpath is  <index> . <type> . path.join("."),
+			which can be considered the canonical reference for a mapping
+	2) confusingly, es uses the term index for both the collection of indexed data, and the individually indexed fields
+			so the term index_name is the same as field_name in this sense.
+
+	*/
+
+	var data = app.ns("data");
+	var ux = app.ns("ux");
+
+	var coretype_map = {
+		"string" : "string",
+		"keyword" : "string",
+		"text" : "string",
+		"byte" : "number",
+		"short" : "number",
+		"long" : "number",
+		"integer" : "number",
+		"float" : "number",
+		"double" : "number",
+		"ip" : "number",
+		"date" : "date",
+		"boolean" : "boolean",
+		"binary" : "binary",
+		"multi_field" : "multi_field"
+	};
+
+	var default_property_map = {
+		"string" : { "store" : "no", "index" : "analysed" },
+		"number" : { "store" : "no", "precision_steps" : 4 },
+		"date" : { "store" : "no", "format" : "dateOptionalTime", "index": "yes", "precision_steps": 4 },
+		"boolean" : { "store" : "no", "index": "yes" },
+		"binary" : { },
+		"multi_field" : { }
+	};
+
+	// parses metatdata from a cluster, into a bunch of useful data structures
+	data.MetaData = ux.Observable.extend({
+		defaults: {
+			state: null // (required) response from a /_cluster/state request
+		},
+		init: function() {
+			this._super();
+			this.refresh(this.config.state);
+		},
+		getIndices: function(alias) {
+			return alias ? this.aliases[alias] : this.indicesList;
+		},
+		// returns an array of strings containing all types that are in all of the indices passed in, or all types
+		getTypes: function(indices) {
+			var indices = indices || [], types = [];
+			this.typesList.forEach(function(type) {
+				for(var i = 0; i < indices.length; i++) {
+					if(! this.indices[indices[i]].types.contains(type))
+						return;
+				}
+				types.push(type);
+			}, this);
+			return types;
+		},
+		refresh: function(state) {
+			// currently metadata expects all like named fields to have the same type, even when from different types and indices
+			var aliases = this.aliases = {};
+			var indices = this.indices = {};
+			var types = this.types = {};
+			var fields = this.fields = {};
+			var paths = this.paths = {};
+
+			function createField( mapping, index, type, path, name ) {
+				var dpath = [ index, type ].concat( path ).join( "." );
+				var field_name = mapping.index_name || path.join( "." );
+				var field = paths[ dpath ] = fields[ field_name ] || $.extend({
+					field_name : field_name,
+					core_type : coretype_map[ mapping.type ],
+					dpaths : []
+				}, default_property_map[ coretype_map[ mapping.type ] ], mapping );
+
+				if (field.type === "multi_field" && typeof field.fields !== "undefined") {
+					for (var subField in field.fields) {
+						field.fields[ subField ] = createField( field.fields[ subField ], index, type, path.concat( subField ), name + "." + subField );
+					}
+				}
+				if (fields.dpaths) {
+					field.dpaths.push(dpath);
+				}
+				return field;
+			}
+			function getFields(properties, type, index, listeners) {
+				(function procPath(prop, path) {
+					for (var n in prop) {
+						if ("properties" in prop[n]) {
+							procPath( prop[ n ].properties, path.concat( n ) );
+						} else {
+							var field = createField(prop[n], index, type, path.concat(n), n);							
+							listeners.forEach( function( listener ) {
+								listener[ field.field_name ] = field;
+							} );
+						}
+					}
+				})(properties, []);
+			}
+			for (var index in state.metadata.indices) {
+				indices[index] = {
+					types : [], fields : {}, paths : {}, parents : {}
+				};
+				indices[index].aliases = state.metadata.indices[index].aliases;
+				indices[index].aliases.forEach(function(alias) {
+					(aliases[alias] || (aliases[alias] = [])).push(index);
+				});
+				var mapping = state.metadata.indices[index].mappings;
+				for (var type in mapping) {
+					indices[index].types.push(type);
+					if ( type in types) {
+						types[type].indices.push(index);
+					} else {
+						types[type] = {
+							indices : [index], fields : {}
+						};
+					}
+					getFields(mapping[type].properties, type, index, [fields, types[type].fields, indices[index].fields]);
+					if ( typeof mapping[type]._parent !== "undefined") {
+						indices[index].parents[type] = mapping[type]._parent.type;
+					}
+				}
+			}
+
+			this.aliasesList = Object.keys(aliases);
+			this.indicesList = Object.keys(indices);
+			this.typesList = Object.keys(types);
+			this.fieldsList = Object.keys(fields);
+		}
+	});
+
+})( this.app );	
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/metaDataFactory.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/metaDataFactory.js
new file mode 100644
index 0000000..694546e
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/metaDataFactory.js
@@ -0,0 +1,19 @@
+(function( app ) {
+
+	var data = app.ns("data");
+	var ux = app.ns("ux");
+
+	data.MetaDataFactory = ux.Observable.extend({
+		defaults: {
+			cluster: null // (required) an app.services.Cluster
+		},
+		init: function() {
+			this._super();
+			this.config.cluster.get("_cluster/state", function(data) {
+				this.metaData = new app.data.MetaData({state: data});
+				this.fire("ready", this.metaData,  { originalData: data }); // TODO originalData needed for legacy ui.FilterBrowser
+			}.bind(this));
+		}
+	});
+
+})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/model/model.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/model/model.js
new file mode 100644
index 0000000..a35e53b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/model/model.js
@@ -0,0 +1,35 @@
+(function( $, app ) {
+
+	var data = app.ns("data");
+	var ux = app.ns("ux");
+
+	data.Model = ux.Observable.extend({
+		defaults: {
+			data: null
+		},
+		init: function() {
+			this.set( this.config.data );
+		},
+		set: function( key, value ) {
+			if( arguments.length === 1 ) {
+				this._data = $.extend( {}, key );
+			} else {
+				key.split(".").reduce(function( ptr, prop, i, props) {
+					if(i === (props.length - 1) ) {
+						ptr[prop] = value;
+					} else {
+						if( !(prop in ptr) ) {
+							ptr[ prop ] = {};
+						}
+						return ptr[prop];
+					}
+				}, this._data );
+			}
+		},
+		get: function( key ) {
+			return key.split(".").reduce( function( ptr, prop ) {
+				return ( ptr && ( prop in ptr ) ) ? ptr[ prop ] : undefined;
+			}, this._data );
+		},
+	});
+})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/model/modelSpec.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/model/modelSpec.js
new file mode 100644
index 0000000..fa9d904
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/model/modelSpec.js
@@ -0,0 +1,74 @@
+describe("app.data.Model", function() {
+
+	var Model = window.app.data.Model;
+
+	it("test setting model does a shallow copy", function() {
+		var test = {};
+		var array = [ 1, 2, 3 ];
+		var m = new Model({
+			data: {
+				"foo": "bar",
+				"test": test,
+				"array": array
+			}
+		});
+		expect( m.get("foo") ).toBe("bar");
+		expect( m.get("array").length ).toBe(  3  );
+		expect( m.get("array")[1] ).toBe( 2 );
+		expect( m.get("array") ).toBe( array );
+		expect( m.get("test") ).toBe( test );
+	});
+
+	it("should replace model with shallow copy when put with no path", function() {
+		var m = new Model({ foo: "bar" });
+		m.set({ bar: "blat" });
+		expect( m.get("foo")).toBe( undefined );
+		expect( m.get("bar")).toBe("blat");
+	});
+
+	it("test getting values from deep in a model", function() {
+		var m = new Model({
+			data: {
+				"foo": {
+					"bar": {
+						"baz": {
+							"quix": "abcdefg"
+						}
+					}
+				}
+			}
+		});
+
+		expect( m.get("foo.bar.baz.quix") ).toBe( "abcdefg" );
+	});
+
+	it("test setting non-existant values creates new values", function() {
+		var m = new Model({
+			data: {
+				"foo": {
+					"bar": "abc"
+				}
+			}
+		});
+		m.set("foo.bar", "123" );
+		m.set("foo.baz", "456" );
+		expect( m.get("foo.bar") ).toBe( "123" );
+		expect( m.get("foo.baz") ).toBe( "456" );
+	});
+
+	it("test setting values deep in a model", function() {
+		var m = new Model({
+			data: {
+				"foo": {
+					"bar": "abc"
+				}
+			}
+		});
+		m.set("foo.bar", "123" );
+		m.set("foo.baz", "456" );
+		m.set("foo.something.else.is.here", "xyz" );
+		expect( m.get("foo.something.else.is").here ).toBe( "xyz" );
+		expect( m.get("foo.something.else.is.here") ).toBe( "xyz" );
+	});
+
+});
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/query.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/query.js
new file mode 100644
index 0000000..41890b3
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/query.js
@@ -0,0 +1,203 @@
+(function( app ) {
+
+	var data = app.ns("data");
+	var ux = app.ns("ux");
+
+	data.Query = ux.Observable.extend({
+		defaults: {
+			cluster: null,  // (required) instanceof app.services.Cluster
+			size: 50        // size of pages to return
+		},
+		init: function() {
+			this._super();
+			this.cluster = this.config.cluster;
+			this.refuid = 0;
+			this.refmap = {};
+			this.indices = [];
+			this.types = [];
+			this.search = {
+				query: { bool: { must: [], must_not: [], should: [] } },
+				from: 0,
+				size: this.config.size,
+				sort: [],
+				aggs: {},
+				version: true
+			};
+			this.defaultClause = this.addClause();
+			this.history = [ this.getState() ];
+		},
+		clone: function() {
+			var q = new data.Query({ cluster: this.cluster });
+			q.restoreState(this.getState());
+			for(var uqid in q.refmap) {
+				q.removeClause(uqid);
+			}
+			return q;
+		},
+		getState: function() {
+			return $.extend(true, {}, { search: this.search, indices: this.indices, types: this.types });
+		},
+		restoreState: function(state) {
+			state = $.extend(true, {}, state || this.history[this.history.length - 1]);
+			this.indices = state.indices;
+			this.types = state.types;
+			this.search = state.search;
+		},
+		getData: function() {
+			return JSON.stringify(this.search);
+		},
+		query: function() {
+			var state = this.getState();
+			this.cluster.post(
+					(this.indices.join(",") || "_all") + "/" + ( this.types.length ? this.types.join(",") + "/" : "") + "_search",
+					this.getData(),
+					function(results) {
+						if(results === null) {
+							alert(i18n.text("Query.FailAndUndo"));
+							this.restoreState();
+							return;
+						}
+						this.history.push(state);
+
+						this.fire("results", this, results);
+					}.bind(this));
+		},
+		loadParents: function(res,metadata){
+			//create data for mget
+			var data = { docs :[] };
+			var indexToTypeToParentIds = {};
+			res.hits.hits.forEach(function(hit) {
+			if (typeof hit.fields != "undefined"){
+				if (typeof hit.fields._parent != "undefined"){
+					var parentType = metadata.indices[hit._index].parents[hit._type];
+					if (typeof indexToTypeToParentIds[hit._index] == "undefined"){
+						indexToTypeToParentIds[hit._index] = new Object();
+					}
+					if (typeof indexToTypeToParentIds[hit._index][hit._type] == "undefined"){
+						indexToTypeToParentIds[hit._index][hit._type] = new Object();
+					}
+					if (typeof indexToTypeToParentIds[hit._index][hit._type][hit.fields._parent] == "undefined"){
+						indexToTypeToParentIds[hit._index][hit._type][hit.fields._parent] = null;
+						data.docs.push({ _index:hit._index, _type:parentType, _id:hit.fields._parent});
+					}
+				}
+			}
+		});
+
+		//load parents
+		var state = this.getState();
+			this.cluster.post("_mget",JSON.stringify(data),
+				function(results) {
+					if(results === null) {
+						alert(i18n.text("Query.FailAndUndo"));
+						this.restoreState();
+						return;
+					}
+					this.history.push(state);
+					var indexToTypeToParentIdToHit = new Object();
+					results.docs.forEach(function(doc) {
+						if (typeof indexToTypeToParentIdToHit[doc._index] == "undefined"){
+						indexToTypeToParentIdToHit[doc._index] = new Object();
+					}
+					
+					if (typeof indexToTypeToParentIdToHit[doc._index][doc._type] == "undefined"){
+						indexToTypeToParentIdToHit[doc._index][doc._type] = new Object();
+					}
+					
+					indexToTypeToParentIdToHit[doc._index][doc._type][doc._id] = doc;
+					});
+					
+					res.hits.hits.forEach(function(hit) {
+						if (typeof hit.fields != "undefined"){
+							if (typeof hit.fields._parent != "undefined"){
+								var parentType = metadata.indices[hit._index].parents[hit._type];
+								hit._parent = indexToTypeToParentIdToHit[hit._index][parentType][hit.fields._parent];
+							}
+						}
+					});
+
+					this.fire("resultsWithParents", this, res);
+				}.bind(this));
+		},
+		setPage: function(page) {
+			this.search.from = this.config.size * (page - 1);
+		},
+		setSort: function(index, desc) {
+			var sortd = {}; sortd[index] = { reverse: !!desc };
+			this.search.sort.unshift( sortd );
+			for(var i = 1; i < this.search.sort.length; i++) {
+				if(Object.keys(this.search.sort[i])[0] === index) {
+					this.search.sort.splice(i, 1);
+					break;
+				}
+			}
+		},
+		setIndex: function(index, add) {
+			if(add) {
+				if(! this.indices.contains(index)) this.indices.push(index);
+			} else {
+				this.indices.remove(index);
+			}
+			this.fire("setIndex", this, { index: index, add: !!add });
+		},
+		setType: function(type, add) {
+			if(add) {
+				if(! this.types.contains(type)) this.types.push(type);
+			} else {
+				this.types.remove(type);
+			}
+			this.fire("setType", this, { type: type, add: !!add });
+		},
+		addClause: function(value, field, op, bool) {
+			bool = bool || "should";
+			op = op || "match_all";
+			field = field || "_all";
+			var clause = this._setClause(value, field, op, bool);
+			var uqid = "q-" + this.refuid++;
+			this.refmap[uqid] = { clause: clause, value: value, field: field, op: op, bool: bool };
+			if(this.search.query.bool.must.length + this.search.query.bool.should.length > 1) {
+				this.removeClause(this.defaultClause);
+			}
+			this.fire("queryChanged", this, { uqid: uqid, search: this.search} );
+			return uqid; // returns reference to inner query object to allow fast updating
+		},
+		removeClause: function(uqid) {
+			var ref = this.refmap[uqid],
+				bool = this.search.query.bool[ref.bool];
+			bool.remove(ref.clause);
+			if(this.search.query.bool.must.length + this.search.query.bool.should.length === 0) {
+				this.defaultClause = this.addClause();
+			}
+		},
+		addAggs: function(aggs) {
+			var aggsId = "f-" + this.refuid++;
+			this.search.aggs[aggsId] = aggs;
+			this.refmap[aggsId] = { aggsId: aggsId, aggs: aggs };
+			return aggsId;
+		},
+		removeAggs: function(aggsId) {
+			delete this.search.aggs[aggsId];
+			delete this.refmap[aggsId];
+		},
+		_setClause: function(value, field, op, bool) {
+			var clause = {}, query = {};
+			if(op === "match_all") {
+			} else if(op === "query_string") {
+				query["default_field"] = field;
+				query["query"] = value;
+			} else if(op === "missing") {
+				op = "constant_score"
+				var missing = {}, filter = {};
+				missing["field"] = field;
+				filter["missing"] = missing
+				query["filter"] = filter;
+			} else {
+				query[field] = value;
+			}
+			clause[op] = query;
+			this.search.query.bool[bool].push(clause);
+			return clause;
+		}
+	});
+
+})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/queryDataSourceInterface.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/queryDataSourceInterface.js
new file mode 100644
index 0000000..3e2b45a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/queryDataSourceInterface.js
@@ -0,0 +1,87 @@
+(function( app ) {
+
+	var data = app.ns("data");
+
+	data.QueryDataSourceInterface = data.DataSourceInterface.extend({
+		defaults: {
+			metadata: null, // (required) instanceof app.data.MetaData, the cluster metadata
+			query: null     // (required) instanceof app.data.Query the data source
+		},
+		init: function() {
+			this._super();
+			this.config.query.on("results", this._results_handler.bind(this) );
+			this.config.query.on("resultsWithParents", this._load_parents.bind(this) );
+		},
+		_results_handler: function(query, res) {
+			this._getSummary(res);
+			this._getMeta(res);
+			var sort = query.search.sort[0] || { "_score": { reverse: false }};
+			var sortField = Object.keys(sort)[0];
+			this.sort = { column: sortField, dir: (sort[sortField].reverse ? "asc" : "desc") };
+			this._getData(res, this.config.metadata);
+			this.fire("data", this);
+		},
+		_load_parents: function(query, res) {
+			query.loadParents(res, this.config.metadata);
+		},
+		_getData: function(res, metadata) {
+			var metaColumns = ["_index", "_type", "_id", "_score"];
+			var columns = this.columns = [].concat(metaColumns);
+
+			this.data = res.hits.hits.map(function(hit) {
+				var row = (function(path, spec, row) {
+					for(var prop in spec) {
+						if(acx.isObject(spec[prop])) {
+							arguments.callee(path.concat(prop), spec[prop], row);
+						} else if(acx.isArray(spec[prop])) {
+							if(spec[prop].length) {
+								arguments.callee(path.concat(prop), spec[prop][0], row)
+							}
+						} else {
+							var dpath = path.concat(prop).join(".");
+							if(metadata.paths[dpath]) {
+								var field_name = metadata.paths[dpath].field_name;
+								if(! columns.contains(field_name)) {
+									columns.push(field_name);
+								}
+								row[field_name] = (spec[prop] === null ? "null" : spec[prop] ).toString();
+							} else {
+								// TODO: field not in metadata index
+							}
+						}
+					}
+					return row;
+				})([ hit._index, hit._type ], hit._source, {});
+				metaColumns.forEach(function(n) { row[n] = hit[n]; });
+				row._source = hit;
+				if (typeof hit._parent!= "undefined") {
+					(function(prefix, path, spec, row) {
+					for(var prop in spec) {
+						if(acx.isObject(spec[prop])) {
+							arguments.callee(prefix, path.concat(prop), spec[prop], row);
+						} else if(acx.isArray(spec[prop])) {
+							if(spec[prop].length) {
+								arguments.callee(prefix, path.concat(prop), spec[prop][0], row)
+							}
+						} else {
+							var dpath = path.concat(prop).join(".");
+							if(metadata.paths[dpath]) {
+								var field_name = metadata.paths[dpath].field_name;
+								var column_name = prefix+"."+field_name;
+								if(! columns.contains(column_name)) {
+									columns.push(column_name);
+								}
+								row[column_name] = (spec[prop] === null ? "null" : spec[prop] ).toString();
+							} else {
+								// TODO: field not in metadata index
+							}
+						}
+					}
+					})(hit._parent._type,[hit._parent._index, hit._parent._type], hit._parent._source, row);
+				}
+				return row;
+			}, this);
+		}
+	});
+
+})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/resultDataSourceInterface.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/resultDataSourceInterface.js
new file mode 100644
index 0000000..b985b04
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/data/resultDataSourceInterface.js
@@ -0,0 +1,40 @@
+(function( app ) {
+
+	var data = app.ns("data");
+
+	data.ResultDataSourceInterface = data.DataSourceInterface.extend({
+		results: function(res) {
+			this._getSummary(res);
+			this._getMeta(res);
+			this._getData(res);
+			this.sort = {};
+			this.fire("data", this);
+		},
+		_getData: function(res) {
+			var columns = this.columns = [];
+			this.data = res.hits.hits.map(function(hit) {
+				var row = (function(path, spec, row) {
+					for(var prop in spec) {
+						if(acx.isObject(spec[prop])) {
+							arguments.callee(path.concat(prop), spec[prop], row);
+						} else if(acx.isArray(spec[prop])) {
+							if(spec[prop].length) {
+								arguments.callee(path.concat(prop), spec[prop][0], row)
+							}
+						} else {
+							var dpath = path.concat(prop).join(".");
+							if(! columns.contains(dpath)) {
+								columns.push(dpath);
+							}
+							row[dpath] = (spec[prop] || "null").toString();
+						}
+					}
+					return row;
+				})([ hit._type ], hit, {});
+				row._source = hit;
+				return row;
+			}, this);
+		}
+	});
+
+})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/lang/en_strings.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/lang/en_strings.js
new file mode 100644
index 0000000..3679dfb
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/lang/en_strings.js
@@ -0,0 +1,177 @@
+i18n.setKeys({
+	"General.Elasticsearch": "Elasticsearch",
+	"General.LoadingAggs": "Loading Aggregations...",
+	"General.Searching": "Searching...",
+	"General.Search": "Search",
+	"General.Help": "Help",
+	"General.HelpGlyph": "?",
+	"General.CloseGlyph": "X",
+	"General.RefreshResults": "Refresh",
+	"General.ManualRefresh": "Manual Refresh",
+	"General.RefreshQuickly": "Refresh quickly",
+	"General.Refresh5seconds": "Refresh every 5 seconds",
+	"General.Refresh1minute": "Refresh every minute",
+	"AliasForm.AliasName": "Alias Name",
+	"AliasForm.NewAliasForIndex": "New Alias for {0}",
+	"AliasForm.DeleteAliasMessage": "type ''{0}'' to delete {1}. There is no undo",
+	"AnyRequest.DisplayOptions" : "Display Options",
+	"AnyRequest.AsGraph" : "Graph Results",
+	"AnyRequest.AsJson" : "Show Raw JSON",
+	"AnyRequest.AsTable" : "Show Search Results Table",
+	"AnyRequest.History" : "History",
+	"AnyRequest.RepeatRequest" : "Repeat Request",
+	"AnyRequest.RepeatRequestSelect" : "Repeat request every ",
+	"AnyRequest.Transformer" : "Result Transformer",
+	"AnyRequest.Pretty": "Pretty",
+	"AnyRequest.Query" : "Query",
+	"AnyRequest.Request": "Request",
+	"AnyRequest.Requesting": "Requesting...",
+	"AnyRequest.ValidateJSON": "Validate JSON",
+	"Browser.Title": "Browser",
+	"Browser.ResultSourcePanelTitle": "Result Source",
+	"Command.DELETE": "DELETE",
+	"Command.SHUTDOWN": "SHUTDOWN",
+	"Command.DeleteAliasMessage": "Delete Alias?",
+	"ClusterOverView.IndexName": "Index Name",
+	"ClusterOverview.NumShards": "Number of Shards",
+	"ClusterOverview.NumReplicas": "Number of Replicas",
+	"ClusterOverview.NewIndex": "New Index",
+	"IndexActionsMenu.Title": "Actions",
+	"IndexActionsMenu.NewAlias": "New Alias...",
+	"IndexActionsMenu.Refresh": "Refresh",
+	"IndexActionsMenu.Flush": "Flush",
+	"IndexActionsMenu.Optimize": "Optimize...",
+	"IndexActionsMenu.Snapshot": "Gateway Snapshot",
+	"IndexActionsMenu.Analyser": "Test Analyser",
+	"IndexActionsMenu.Open": "Open",
+	"IndexActionsMenu.Close": "Close",
+	"IndexActionsMenu.Delete": "Delete...",
+	"IndexInfoMenu.Title": "Info",
+	"IndexInfoMenu.Status": "Index Status",
+	"IndexInfoMenu.Metadata": "Index Metadata",
+	"IndexCommand.TextToAnalyze": "Text to Analyse",
+	"IndexCommand.ShutdownMessage": "type ''{0}'' to shutdown {1}. Node can NOT be restarted from this interface",
+	"IndexOverview.PageTitle": "Indices Overview",
+	"IndexSelector.NameWithDocs": "{0} ({1} docs)",
+	"IndexSelector.SearchIndexForDocs": "Search {0} for documents where:",
+	"FilterBrowser.OutputType": "Output Results: {0}",
+	"FilterBrowser.OutputSize": "Number of Results: {0}",
+	"Header.ClusterHealth": "cluster health: {0} ({1} of {2})",
+	"Header.ClusterNotConnected": "cluster health: not connected",
+	"Header.Connect": "Connect",
+	"Nav.AnyRequest": "Any Request",
+	"Nav.Browser": "Browser",
+	"Nav.ClusterHealth": "Cluster Health",
+	"Nav.ClusterState": "Cluster State",
+	"Nav.ClusterNodes": "Nodes Info",
+	"Nav.Info": "Info",
+	"Nav.NodeStats": "Nodes Stats",
+	"Nav.Overview": "Overview",
+	"Nav.Indices": "Indices",
+	"Nav.Plugins": "Plugins",
+	"Nav.Status": "Indices Stats",
+	"Nav.Templates": "Templates",
+	"Nav.StructuredQuery": "Structured Query",
+	"NodeActionsMenu.Title": "Actions",
+	"NodeActionsMenu.Shutdown": "Shutdown...",
+	"NodeInfoMenu.Title": "Info",
+	"NodeInfoMenu.ClusterNodeInfo": "Cluster Node Info",
+	"NodeInfoMenu.NodeStats": "Node Stats",
+	"NodeType.Client": "Client Node",
+	"NodeType.Coord": "Coordinator",
+	"NodeType.Master": "Master Node",
+	"NodeType.Tribe": "Tribe Node",
+	"NodeType.Worker": "Worker Node",
+	"NodeType.Unassigned": "Unassigned",
+	"OptimizeForm.OptimizeIndex": "Optimize {0}",
+	"OptimizeForm.MaxSegments": "Maximum # Of Segments",
+	"OptimizeForm.ExpungeDeletes": "Only Expunge Deletes",
+	"OptimizeForm.FlushAfter": "Flush After Optimize",
+	"OptimizeForm.WaitForMerge": "Wait For Merge",
+	"Overview.PageTitle" : "Cluster Overview",
+	"Output.JSON": "JSON",
+	"Output.Table": "Table",
+	"Output.CSV": "CSV",
+	"Output.ShowSource": "Show query source",
+	"Preference.SortCluster": "Sort Cluster",
+	"Sort.ByName": "By Name",
+	"Sort.ByAddress": "By Address",
+	"Sort.ByType": "By Type",
+	"Preference.SortIndices": "Sort Indices",
+	"SortIndices.Descending": "Descending",
+	"SortIndices.Ascending": "Ascending",
+	"Preference.ViewAliases": "View Aliases",
+	"ViewAliases.Grouped": "Grouped",
+	"ViewAliases.List": "List",
+	"ViewAliases.None": "None",
+	"Overview.IndexFilter": "Index Filter",
+	"TableResults.Summary": "Searched {0} of {1} shards. {2} hits. {3} seconds",
+	"QueryFilter.AllIndices": "All Indices",
+	"QueryFilter.AnyValue": "any",
+	"QueryFilter-Header-Indices": "Indices",
+	"QueryFilter-Header-Types": "Types",
+	"QueryFilter-Header-Fields": "Fields",
+	"QueryFilter.DateRangeHint.from": "From : {0}",
+	"QueryFilter.DateRangeHint.to": "  To : {0}",
+	"Query.FailAndUndo": "Query Failed. Undoing last changes",
+	"StructuredQuery.ShowRawJson": "Show Raw JSON"
+});
+
+i18n.setKeys({
+	"AnyRequest.TransformerHelp" : "\
+		<p>The Result Transformer can be used to post process the raw json results from a request into a more useful format.</p>\
+		<p>The transformer should contain the body of a javascript function. The return value from the function becomes the new value passed to the json printer</p>\
+		<p>Example:<br>\
+		  <code>return root.hits.hits[0];</code> would traverse a result set to show just the first match<br>\
+		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code> would return the total memory used across an entire cluster<br></p>\
+		<p>The following functions are available and can be useful processing arrays and objects<br>\
+		<ul>\
+			<li><i>Object.keys</i>(object) := array</li>\
+			<li>array.<i>forEach</i>(function(prop, index))</li>\
+			<li>array.<i>map</i>(function(prop, index)) := array</li>\
+			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
+		</ul>\
+		<p>When Repeat Request is running, an extra parameter called prev is passed to the transformation function. This allows comparisons, and cumulative graphing</p>\
+		<p>Example:<br>\
+		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code> would return the load average on the first cluster node over the last minute\
+		This could be fed into the Graph to produce a load graph for the node\
+		"
+});
+
+i18n.setKeys({
+	"AnyRequest.DisplayOptionsHelp" : "\
+		<p>Raw Json: shows complete results of the query and transformation in raw JSON format </p>\
+		<p>Graph Results: To produce a graph of your results, use the result transformer to produce an array of values</p>\
+		<p>Search Results Table: If your query is a search, you can display the results of the search in a table.</p>\
+		"
+});
+
+i18n.setKeys({
+	"QueryFilter.DateRangeHelp" : "\
+		<p>Date fields accept a natural language query to produce a From and To date that form a range that the results are queried over.</p>\
+		<p>The following formats are supported:</p>\
+		<ul>\
+			<li><b>Keywords / Key Phrases</b><br>\
+				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
+				searches for dates matching the keyword. <code>last year</code> would search all of last year.</li>\
+			<li><b>Ranges</b><br>\
+				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (spaces optional, many synonyms for range qualifiers)<br>\
+				Create a search range centered on <code>now</code> extending into the past and future by the amount specified.</li>\
+			<li><b>DateTime and Partial DateTime</b><br>\
+				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
+				these formats specify a specific date range. <code>2011</code> would search the whole of 2011, while <code>2011-01-18 12:32:45</code> would only search for results in that 1 second range</li>\
+			<li><b>Time and Time Partials</b><br>\
+				<code>12<br> 12:32<br> 12:32:45</code><br>\
+				these formats search for a particular time during the current day. <code>12:32</code> would search that minute during today</li>\
+			<li><b>Date Ranges</b><br>\
+				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
+				A Date Range is created by specifying two dates in any format (Keyword / DateTime / Time) separated by &lt; or -&gt; (both do the same thing). If either end of the date range is missing, it is the same as having no constraint in that direction.</li>\
+			<li><b>Date Range using Offset</b><br>\
+				<code>2010 -> 1yr<br> 3mins < now</code>\
+				Searches the specified date including the range in the direction specified.</li>\
+			<li><b>Anchored Ranges</b><br>\
+				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
+				Similar to above except the range is extend in both directions from the anchor date</li>\
+		</ul>\
+	"
+});
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/lang/fr_strings.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/lang/fr_strings.js
new file mode 100644
index 0000000..2cc9bbb
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/lang/fr_strings.js
@@ -0,0 +1,164 @@
+i18n.setKeys({
+//	"General.Elasticsearch": "Elasticsearch",
+	"General.LoadingAggs" : "Chargement des facettes...",
+	"General.Searching": "Recherche en cours...",
+	"General.Search": "Recherche",
+	"General.Help": "Aide",
+//	"General.HelpGlyph": "?",
+//	"General.CloseGlyph": "X",
+	"General.RefreshResults": "Rafraîchir",
+	"General.ManualRefresh": "Rafraîchissement manuel",
+	"General.RefreshQuickly": "Rafraîchissement rapide",
+	"General.Refresh5seconds": "Rafraîchissement toutes les 5 secondes",
+	"General.Refresh1minute": "Rafraîchissement toutes les minutes",
+	"AliasForm.AliasName": "Alias",
+	"AliasForm.NewAliasForIndex": "Nouvel Alias pour {0}",
+	"AliasForm.DeleteAliasMessage": "Entrez ''{0}'' pour effacer {1}. Attention, action irréversible.",
+	"AnyRequest.DisplayOptions" : "Options d'affichage",
+	"AnyRequest.AsGraph" : "En graphe",
+	"AnyRequest.AsJson" : "En JSON brut",
+	"AnyRequest.AsTable" : "En tableau",
+	"AnyRequest.History" : "Historique",
+	"AnyRequest.RepeatRequest" : "Répétition automatique de la requête",
+	"AnyRequest.RepeatRequestSelect" : "Répéter la requête toutes les ",
+	"AnyRequest.Transformer" : "Transformation des résultats",
+//	"AnyRequest.Pretty": "Pretty",
+	"AnyRequest.Query" : "Recherche",
+	"AnyRequest.Request": "Requête",
+	"AnyRequest.Requesting": "Requête en cours...",
+	"AnyRequest.ValidateJSON": "Valider le JSON",
+	"Browser.Title": "Navigateur",
+	"Browser.ResultSourcePanelTitle": "Résultat au format JSON",
+	"Command.DELETE": "SUPPRIMER",
+	"Command.SHUTDOWN": "ETEINDRE",
+	"Command.DeleteAliasMessage": "Supprimer l'Alias?",
+	"ClusterOverView.IndexName": "Index",
+	"ClusterOverview.NumShards": "Nombre de shards",
+	"ClusterOverview.NumReplicas": "Nombre de replica",
+	"ClusterOverview.NewIndex": "Nouvel Index",
+//	"IndexActionsMenu.Title": "Actions",
+	"IndexActionsMenu.NewAlias": "Nouvel Alias...",
+	"IndexActionsMenu.Refresh": "Rafraîchir",
+	"IndexActionsMenu.Flush": "Flusher",
+	"IndexActionsMenu.Optimize": "Optimiser...",
+	"IndexActionsMenu.Snapshot": "Dupliquer l'index (Snapshot)",
+	"IndexActionsMenu.Analyser": "Tester un analyseur",
+	"IndexActionsMenu.Open": "Ouvrir",
+	"IndexActionsMenu.Close": "Fermer",
+	"IndexActionsMenu.Delete": "Effacer...",
+//	"IndexInfoMenu.Title": "Info",
+	"IndexInfoMenu.Status": "Etat de l'Index",
+	"IndexInfoMenu.Metadata": "Métadonnées de l'Index",
+	"IndexCommand.TextToAnalyze": "Texte à analyser",
+	"IndexCommand.ShutdownMessage": "Entrez ''{0}'' pour éteindre {1}. Le noeud NE PEUT PAS être redémarré depuis cette interface.",
+//	"IndexSelector.NameWithDocs": "{0} ({1} docs)",
+	"IndexSelector.SearchIndexForDocs": "Chercher dans {0} les documents correspondant à",
+	"FilterBrowser.OutputType": "Format d'affichage des résultats {0}",
+	"FilterBrowser.OutputSize": "Nombre de Résultats: {0}",
+	"Header.ClusterHealth": "Santé du cluster: {0} ({1} {2})",
+	"Header.ClusterNotConnected": "Santé du cluster: non connecté",
+	"Header.Connect": "Se connecter",
+	"Nav.AnyRequest": "Autres requêtes",
+	"Nav.StructuredQuery": "Requêtes structurées",
+	"Nav.Browser": "Navigateur",
+	"Nav.ClusterHealth": "Santé du cluster",
+	"Nav.ClusterState": "Etat du cluster",
+	"Nav.ClusterNodes": "Noeuds du cluster",
+//	"Nav.Info": "Info",
+	"Nav.NodeStats": "Statistiques sur les noeuds",
+	"Nav.Overview": "Aperçu",
+	"Nav.Indices": "Index",
+	"Nav.Plugins": "Plugins",
+	"Nav.Status": "Etat",
+	"Nav.Templates": "Templates",
+	"Nav.StructuredQuery": "Recherche Structurée",
+//	"NodeActionsMenu.Title": "Actions",
+	"NodeActionsMenu.Shutdown": "Eteindre...",
+//	"NodeInfoMenu.Title": "Info",
+	"NodeInfoMenu.ClusterNodeInfo": "Infos sur le noeud du cluster",
+	"NodeInfoMenu.NodeStats": "Statistiques du noeud",
+	"NodeType.Client": "Noeud Client",
+	"NodeType.Coord": "Coordinateur",
+	"NodeType.Master": "Noeud Master",
+	"NodeType.Tribe": "Noeud Tribe",
+	"NodeType.Worker": "Noeud Worker",
+	"NodeType.Unassigned": "Non assigné",
+	"OptimizeForm.OptimizeIndex": "Optimiser {0}",
+	"OptimizeForm.MaxSegments": "Nombre maximum de segments",
+	"OptimizeForm.ExpungeDeletes": "Seulement purger les suppressions",
+	"OptimizeForm.FlushAfter": "Flusher après l'optimisation",
+	"OptimizeForm.WaitForMerge": "Attendre la fin de la fusion",
+	"Overview.PageTitle" : "Aperçu du cluster",
+//	"Output.JSON": "JSON",
+	"Output.Table": "Tableau",
+	"Output.ShowSource": "Voir la requête source",
+    "TableResults.Summary": "Recherche sur {0} des {1} shards. {2} résultats. {3} secondes",
+	"QueryFilter.AllIndices": "Tous les index",
+	"QueryFilter.AnyValue": "Tout",
+	"QueryFilter-Header-Indices": "Index",
+//	"QueryFilter-Header-Types": "Types",
+	"QueryFilter-Header-Fields": "Champs",
+	"QueryFilter.DateRangeHint.from": "De : {0}",
+	"QueryFilter.DateRangeHint.to": "  A : {0}",
+	"Query.FailAndUndo": "Requête en échec. Annulation des dernières modifications.",
+	"StructuredQuery.ShowRawJson": "Voir le JSON brut"
+});
+
+i18n.setKeys({
+	"AnyRequest.TransformerHelp" : "\
+		<p>Le transformateur de résultats peut être utilisé pour modifier a posteriori les résultats JSON bruts dans un format plus utile.</p>\
+		<p>Le transformateur devrait contenir le corps d'une fonction javascript. La valeur de retour de la fonction devient la nouvelle valeur qui sera passée à l'afficheur des documents JSON.</p>\
+		<p>Exemple:<br>\
+		  <code>return root.hits.hits[0];</code> ne renverra que le premier élément de l'ensemble des résultats.<br>\
+		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code> retournera la mémoire totale utilisée dans l'ensemble du cluster.<br></p>\
+		<p>Les fonctions suivantes sont disponibles et peuvent vous être utiles pour travailler sur les tableaux et les objets:<br>\
+		<ul>\
+			<li><i>Object.keys</i>(object) := array</li>\
+			<li>array.<i>forEach</i>(function(prop, index))</li>\
+			<li>array.<i>map</i>(function(prop, index)) := array</li>\
+			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
+		</ul>\
+		<p>Lorsque vous activez la répétition automatique de la requête, un paramètre supplémentaire nommé prev est passé à la fonction de transformation. Cela permet les comparaisons et les graphes cumulatifs.</p>\
+		<p>Exemple:<br>\
+		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code> retournera la charge moyenne du premier noeud du cluster pour la dernière minute écoulée.\
+		Cela peut alimenter ensuite le graphe pour produire un graphe de charge du noeud.\
+		"
+});
+
+i18n.setKeys({
+	"AnyRequest.DisplayOptionsHelp" : "\
+		<p>En JSON brut: affiche les résultats complets de la recherche éventuellement transformée au format JSON brut.</p>\
+		<p>En graphe: pour fabriquer un graphe de vos résultats, utilsez la transformation de résultats pour générer un tableau de valeurs.</p>\
+		<p>En tableau: si votre requête est une recherche, vous pouvez alors afficher les résultats dans un tableau.</p>\
+		"
+});
+
+i18n.setKeys({
+	"QueryFilter.DateRangeHelp" : "\
+		<p>Les champs Date acceptent une requête en langage naturel pour produire un écart de date (from/to) correspondant.</p>\
+		<p>Les formats suivants sont acceptés :</p>\
+		<ul>\
+			<li><b>Mots clés</b><br>\
+				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
+				Cherchera pour des dates correspondant au mot clé. <code>last year</code> cherchera sur toute l'année précédente.</li>\
+			<li><b>Ecarts</b><br>\
+				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (les espaces sont optionnels et il existe beaucoup de synonymes pour qualifier les écarts)<br>\
+				Créé un écart de date basé sur l'heure courante (maintenant) avec plus ou moins l'écart indiqué.</li>\
+			<li><b>Dates et Dates partielles</b><br>\
+				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
+				Ces formats indiquent un écart de date spécifique. <code>2011</code> cherchera sur toute l'année 2011, alors que <code>2011-01-18 12:32:45</code> ne cherchera que pour la date précise à la seconde près.</li>\
+			<li><b>Heures et heures partielles</b><br>\
+				<code>12<br> 12:32<br> 12:32:45</code><br>\
+				Ces formats indiquent un espace de temps pour la date du jour. <code>12:32</code> cherchera les éléments d'aujourd'hui à cette minute précise.</li>\
+			<li><b>Ecart de Date</b><br>\
+				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
+				Un écart de date est créé en spécifiant deux dates dans n'importe lequel des formats précédents (Mot clé / Dates / Heures) séparées par &lt; ou -&gt; (les deux produisent le même effet). Si la date de fin n'est pas indiquée, alors il n'y aura aucune contrainte de fin.</li>\
+			<li><b>Ecart de date avec décalage</b><br>\
+				<code>2010 -> 1yr<br> 3mins < now</code>\
+				Cherche en incluant un décalage de la date dans la direction indiquée.</li>\
+			<li><b>Ecart de date avec bornes</b><br>\
+				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
+				Similaire à ci-dessus excepté que le décalage est appliqué dans les deux sens à partir de la date indiquée.</li>\
+		</ul>\
+	"
+});
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/lang/pt_strings.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/lang/pt_strings.js
new file mode 100644
index 0000000..d4b6abf
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/lang/pt_strings.js
@@ -0,0 +1,174 @@
+i18n.setKeys({
+	"General.Elasticsearch": "Elasticsearch",
+	"General.LoadingAggs": "Carregando Facetas...",
+	"General.Searching": "Buscando...",
+	"General.Search": "Busca",
+	"General.Help": "Ajuda",
+	"General.HelpGlyph": "?",
+	"General.CloseGlyph": "X",
+	"General.RefreshResults": "Atualizar",
+	"General.ManualRefresh": "Atualização Manual",
+	"General.RefreshQuickly": "Atualização rápida",
+	"General.Refresh5seconds": "Atualização a cada 5 segundos",
+	"General.Refresh1minute": "Atualização a cada minuto",
+	"AliasForm.AliasName": "Apelido",
+	"AliasForm.NewAliasForIndex": "Novo apelido para {0}",
+	"AliasForm.DeleteAliasMessage": "digite ''{0}'' para deletar {1}. Não há como voltar atrás",
+	"AnyRequest.DisplayOptions" : "Mostrar Opções",
+	"AnyRequest.AsGraph" : "Mostrar como gráfico",
+	"AnyRequest.AsJson" : "Mostrar JSON bruto",
+	"AnyRequest.AsTable" : "Mostrar tabela de resultados da consulta",
+	"AnyRequest.History" : "Histórico",
+	"AnyRequest.RepeatRequest" : "Refazer requisição",
+	"AnyRequest.RepeatRequestSelect" : "Repetir requisição a cada ",
+	"AnyRequest.Transformer" : "Transformador de resultado",
+	"AnyRequest.Pretty": "Amigável",
+	"AnyRequest.Query" : "Consulta",
+	"AnyRequest.Request": "Requisição",
+	"AnyRequest.Requesting": "Realizando requisição...",
+	"AnyRequest.ValidateJSON": "Validar JSON",
+	"Browser.Title": "Navegador",
+	"Browser.ResultSourcePanelTitle": "Resultado",
+	"Command.DELETE": "DELETAR",
+	"Command.SHUTDOWN": "DESLIGAR",
+	"Command.DeleteAliasMessage": "Remover apelido?",
+	"ClusterOverView.IndexName": "Nome do índice",
+	"ClusterOverview.NumShards": "Número de Shards",
+	"ClusterOverview.NumReplicas": "Número de Réplicas",
+	"ClusterOverview.NewIndex": "Novo índice",
+	"IndexActionsMenu.Title": "Ações",
+	"IndexActionsMenu.NewAlias": "Novo apelido...",
+	"IndexActionsMenu.Refresh": "Atualizar",
+	"IndexActionsMenu.Flush": "Flush",
+	"IndexActionsMenu.Optimize": "Otimizar...",
+	"IndexActionsMenu.Snapshot": "Snapshot do Gateway",
+	"IndexActionsMenu.Analyser": "Analizador de teste",
+	"IndexActionsMenu.Open": "Abrir",
+	"IndexActionsMenu.Close": "Fechar",
+	"IndexActionsMenu.Delete": "Deletar...",
+	"IndexInfoMenu.Title": "Info",
+	"IndexInfoMenu.Status": "Status do índice",
+	"IndexInfoMenu.Metadata": "Metadados do índice",
+	"IndexCommand.TextToAnalyze": "Texto para analizar",
+	"IndexCommand.ShutdownMessage": "digite ''{0}'' para desligar {1}. Nó NÃO PODE ser reiniciado à partir dessa interface",
+	"IndexOverview.PageTitle": "Visão geral dos índices",
+	"IndexSelector.NameWithDocs": "{0} ({1} documentoss)",
+	"IndexSelector.SearchIndexForDocs": "Busca {0} por documentos onde:",
+	"FilterBrowser.OutputType": "Resultados: {0}",
+	"FilterBrowser.OutputSize": "Número de Resultados: {0}",
+	"Header.ClusterHealth": "saúde do cluster: {0} ({1} {2})",
+	"Header.ClusterNotConnected": "saúde do cluster: não conectado",
+	"Header.Connect": "Conectar",
+	"Nav.AnyRequest": "Qualquer requisição",
+	"Nav.Browser": "Navegador",
+	"Nav.ClusterHealth": "Saúde do Cluster",
+	"Nav.ClusterState": "Estado do Cluster",
+	"Nav.ClusterNodes": "Nós do Cluster",
+	"Nav.Info": "Informações",
+	"Nav.NodeStats": "Estatísticas do nó",
+	"Nav.Overview": "Visão Geral",
+	"Nav.Indices": "Índices",
+	"Nav.Plugins": "Plugins",
+	"Nav.Status": "Status",
+	"Nav.Templates": "Modelos",
+	"Nav.StructuredQuery": "Consulta Estruturada",
+	"NodeActionsMenu.Title": "Ações",
+	"NodeActionsMenu.Shutdown": "Desligar...",
+	"NodeInfoMenu.Title": "Informações",
+	"NodeInfoMenu.ClusterNodeInfo": "Informações do Nó do Cluster",
+	"NodeInfoMenu.NodeStats": "Estatísticas do Nó",
+	"NodeType.Client": "Nó cliente",
+	"NodeType.Coord": "Coordenador",
+	"NodeType.Master": "Nó mestre",
+	"NodeType.Tribe": "Nó tribo",
+	"NodeType.Worker": "Nó trabalhador",
+	"NodeType.Unassigned": "Não atribuido",
+	"OptimizeForm.OptimizeIndex": "Otimizar {0}",
+	"OptimizeForm.MaxSegments": "# Máximo De Segmentos",
+	"OptimizeForm.ExpungeDeletes": "Apenas Expurgar Exclusões",
+	"OptimizeForm.FlushAfter": "Flush após Otimizar",
+	"OptimizeForm.WaitForMerge": "Esperar Por Merge",
+	"Overview.PageTitle": "Visão geral do Cluster",
+	"Output.JSON": "JSON",
+	"Output.Table": "Tabela",
+	"Output.CSV": "CSV",
+	"Output.ShowSource": "Mostrar consulta original",
+	"Preference.SortCluster": "Ordenar Cluster",
+	"Sort.ByName": "Por nome",
+	"Sort.ByAddress": "Por endereço",
+	"Sort.ByType": "Por tipo",
+	"Preference.ViewAliases": "Ver Alias",
+	"ViewAliases.Grouped": "Agrupado",
+	"ViewAliases.List": "Lista",
+	"ViewAliases.None": "Nenhum",
+	"Overview.IndexFilter": "Filtar Índice",
+	"TableResults.Summary": "Buscado {0} de {1} shards. {2} resultados. {3} segundos",
+	"QueryFilter.AllIndices": "Todos os Índices",
+	"QueryFilter.AnyValue": "qualquer",
+	"QueryFilter-Header-Indices": "Índices",
+	"QueryFilter-Header-Types": "Tipos",
+	"QueryFilter-Header-Fields": "Campos",
+	"QueryFilter.DateRangeHint.from": "De : {0}",
+	"QueryFilter.DateRangeHint.to": "  A : {0}",
+	"Query.FailAndUndo": "Consulta falhou. Desfazendo últimas alterações",
+	"StructuredQuery.ShowRawJson": "Mostrar JSON bruto"
+});
+
+i18n.setKeys({
+	"AnyRequest.TransformerHelp" : "\
+		<p>O Transformador de Resultados pode ser usado para transformar os resultados de uma consulta de json bruto para um formato mais útil.</p>\
+		<p>O transformador deve possuir o corpo de uma função javascript. O retorno da função se torna o novo valor passado para o json printer</p>\
+		<p>Exemplo:<br>\
+		  <code>return root.hits.hits[0];</code> irá alterar a resposta para mostrar apenas o primeiro resultado<br>\
+		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code> irá retornar o total de memória utilizada pelo cluster<br></p>\
+		<p>As seguintes funções estão disponíveis e podem ser úteis no processamento de vetores e objetos<br>\
+		<ul>\
+			<li><i>Object.keys</i>(object) := array</li>\
+			<li>array.<i>forEach</i>(function(prop, index))</li>\
+			<li>array.<i>map</i>(function(prop, index)) := array</li>\
+			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
+		</ul>\
+		<p>Durante a execução da opção Refazer Requisição, um parâmetro extra chamado prev é passado para a função de transformação. Isso permite fazer comparações e marcações cumulativas</p>\
+		<p>Exemplo:<br>\
+		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code> irá retornar a carga média no primeiro nó do cluster no último minuto\
+		Essa informação pode ser inserida no Gráfico para fazer um gráfico de carga do nó\
+		"
+});
+
+i18n.setKeys({
+	"AnyRequest.DisplayOptionsHelp" : "\
+		<p>Json Bruto: Exibe o resultado completo da consulta e da transformação no formato de JSON bruto</p>\
+		<p>Gráfico de Resultados: Para gerar um gráfico com seus resultados, utilize o tranformador de resultados para produzir um vetor de valores</p>\
+		<p>Tabela de Resultados da Consulta: Se sua consulta for uma busca, você pode exibir seus resultados no formato de uma tabela.</p>\
+		"
+});
+
+i18n.setKeys({
+	"QueryFilter.DateRangeHelp" : "\
+		<p>Campos do tipo Data aceitam consultas em linguagem natural (em inglês) para produzir um <i>From</i> e um <i>To</i> de modo a formar um intervalo dentro do qual os resultados são filtrados.</p>\
+		<p>Os seguintes formatos são suportados:</p>\
+		<ul>\
+			<li><b>Palavras-chave</b><br>\
+				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
+				buscam por datas de acordo com a palavra-chave. <code>last year</code> irá buscar tudo do último ano.</li>\
+			<li><b>Intervalos</b><br>\
+				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (espaços são opcionais, diversos sinônimos para qualificadores de intervalo)<br>\
+				Cria um intervalo de busca a partir de agora (<code>now</code>), extendendo este intervalo no passado e no futuro de acordo com intervalo especificado.</li>\
+			<li><b>Data/Hora (<i>DateTime</i>) e Data/Hora parcial</b><br>\
+				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
+				esses formatos especificam um intervalo especifico. <code>2011</code> irá buscar todo o ano de 2011, enquanto <code>2011-01-18 12:32:45</code> irá buscar apenas por resultados dentro deste intervalo de 1 segundo</li>\
+			<li><b>Tempo (<i>Time</i>) e Tempo parcial</b><br>\
+				<code>12<br> 12:32<br> 12:32:45</code><br>\
+				esses formatos buscam por um horário específico no dia atual. <code>12:32</code> irá buscar este minuto específico do dia</li>\
+			<li><b>Intervalos de Data</b><br>\
+				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
+				Um intervalo de data é criado especificando-se duas datas em qualquer formato (Palavras-chave, Data/Hora ou Tempo) separados por &lt; ou -&gt; (ambos fazem a mesma coisa). Se a data de início ou fim do intervalo não for especificada é a mesma coisa que não impor limites na busca nesta direção.</li>\
+			<li><b>Intervalo de Data com Deslocamento</b><br>\
+				<code>2010 -> 1yr<br> 3mins < now</code>\
+				Busca a data especificada incluindo o intervalo na direção determinada pelo deslocamento</li>\
+			<li><b>Intervalos Bidirecionais</b><br>\
+				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
+				Idêntico ao exemplo anterior porém o intervalo é extendido em ambas as direções a partir da data especificada</li>\
+		</ul>\
+	"
+});
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/lang/tr_strings.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/lang/tr_strings.js
new file mode 100644
index 0000000..f611956
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/lang/tr_strings.js
@@ -0,0 +1,177 @@
+i18n.setKeys({
+	"General.Elasticsearch": "Elasticsearch",
+	"General.LoadingAggs": "Gruplar Yükleniyor...",
+	"General.Searching": "Aranıyor...",
+	"General.Search": "Ara",
+	"General.Help": "Yardım",
+	"General.HelpGlyph": "?",
+	"General.CloseGlyph": "X",
+	"General.RefreshResults": "Yenile",
+	"General.ManualRefresh": "Manuel Yenileme",
+	"General.RefreshQuickly": "Hızlı yenile",
+	"General.Refresh5seconds": "5 saniyede bir yenile",
+	"General.Refresh1minute": "Her dakika yenile",
+	"AliasForm.AliasName": "Alternatif İsim",
+	"AliasForm.NewAliasForIndex": "{0} için yeni alternatif isim",
+	"AliasForm.DeleteAliasMessage": "{1} silmek için ''{0}'' . Geriye dönüş yoktur.",
+	"AnyRequest.DisplayOptions" : "Seçenekleri Göster",
+	"AnyRequest.AsGraph" : "Sonuçları Çizdir",
+	"AnyRequest.AsJson" : "JSON formatında göster",
+	"AnyRequest.AsTable" : "Arama sonuçlarını tablo halinde göster",
+	"AnyRequest.History" : "Geçmiş",
+	"AnyRequest.RepeatRequest" : "İsteği Tekrarla",
+	"AnyRequest.RepeatRequestSelect" : "İsteği sürekli tekrarla ",
+	"AnyRequest.Transformer" : "Sonuç Dönüştürücü",
+	"AnyRequest.Pretty": "Düzenli",
+	"AnyRequest.Query" : "Sorgu",
+	"AnyRequest.Request": "Gönder",
+	"AnyRequest.Requesting": "İsteniyor...",
+	"AnyRequest.ValidateJSON": "JSON Doğrula",
+	"Browser.Title": "Browser",
+	"Browser.ResultSourcePanelTitle": "Sonuç Kaynağı",
+	"Command.DELETE": "SİL",
+	"Command.SHUTDOWN": "KAPA",
+	"Command.DeleteAliasMessage": "Alternatif ismi sil?",
+	"ClusterOverView.IndexName": "Indeks İsmi",
+	"ClusterOverview.NumShards": "Sektör Sayısı",
+	"ClusterOverview.NumReplicas": "Yedek Sayısı",
+	"ClusterOverview.NewIndex": "Yeni Indeks",
+	"IndexActionsMenu.Title": "İşlemler",
+	"IndexActionsMenu.NewAlias": "Yeni Alternatif İsim...",
+	"IndexActionsMenu.Refresh": "Yenile",
+	"IndexActionsMenu.Flush": "Boşalt",
+	"IndexActionsMenu.Optimize": "Optimize et...",
+	"IndexActionsMenu.Snapshot": "Gateway Snapshot (Kopya Al)",
+	"IndexActionsMenu.Analyser": "Analizi test et",
+	"IndexActionsMenu.Open": "Aç",
+	"IndexActionsMenu.Close": "Kapa",
+	"IndexActionsMenu.Delete": "Sil...",
+	"IndexInfoMenu.Title": "Bilgi",
+	"IndexInfoMenu.Status": "Indeks Durumu",
+	"IndexInfoMenu.Metadata": "Indeks Metaveri",
+	"IndexCommand.TextToAnalyze": "Analiz edilecek metin",
+	"IndexCommand.ShutdownMessage": "{1} kapatmak için ''{0}'' yazın . Nod bu arayüzden tekrar BAŞLATILAMAZ",
+	"IndexOverview.PageTitle": "Indeksler Genel Bakış",
+	"IndexSelector.NameWithDocs": "{0} ({1} döküman)",
+	"IndexSelector.SearchIndexForDocs": "{0} indeksinde ara:",
+	"FilterBrowser.OutputType": "Sonuç Formatı: {0}",
+	"FilterBrowser.OutputSize": "Sonuç Sayısı: {0}",
+	"Header.ClusterHealth": "Küme Durumu: {0} ({1} de {2})",
+	"Header.ClusterNotConnected": "Küme Durumu: Bağlı Değil",
+	"Header.Connect": "Bağlan",
+	"Nav.AnyRequest": "Özel Sorgu",
+	"Nav.Browser": "Görüntüle",
+	"Nav.ClusterHealth": "Küme Durumu",
+	"Nav.ClusterState": "Küme Statüsü",
+	"Nav.ClusterNodes": "Nod Bilgileri",
+	"Nav.Info": "Bilgi",
+	"Nav.NodeStats": "Nod İstatistikleri",
+	"Nav.Overview": "Genel Bakış",
+	"Nav.Indices": "Indeksler",
+	"Nav.Plugins": "Eklentiler",
+	"Nav.Status": "Indeks İstatistikleri",
+	"Nav.Templates": "Şablonlar",
+	"Nav.StructuredQuery": "Yapılandırılmış Sorgu",
+	"NodeActionsMenu.Title": "İşlemler",
+	"NodeActionsMenu.Shutdown": "Kapat...",
+	"NodeInfoMenu.Title": "Bilgi",
+	"NodeInfoMenu.ClusterNodeInfo": "Küme Nod Bilgileri",
+	"NodeInfoMenu.NodeStats": "Nod İstatistikleri",
+	"NodeType.Client": "Client Nod",
+	"NodeType.Coord": "Coordinator",
+	"NodeType.Master": "Master Nod",
+	"NodeType.Tribe": "Tribe Nod",
+	"NodeType.Worker": "Worker Nod",
+	"NodeType.Unassigned": "Sahipsiz",
+	"OptimizeForm.OptimizeIndex": "{0} Optimize Et",
+	"OptimizeForm.MaxSegments": "Maksimum Segment Sayısı",
+	"OptimizeForm.ExpungeDeletes": "Silme İşlemi Artıklarını Temizle",
+	"OptimizeForm.FlushAfter": "Optimize Ettikten Sonra Boşalt",
+	"OptimizeForm.WaitForMerge": "Birleştirme İçin Bekle",
+	"Overview.PageTitle" : "Kümeler Genelbakış",
+	"Output.JSON": "JSON",
+	"Output.Table": "Tablo",
+	"Output.CSV": "CSV",
+	"Output.ShowSource": "Sorgu kaynağını göster",
+	"Preference.SortCluster": "Kümeyi Sırala",
+	"Sort.ByName": "İsme göre",
+	"Sort.ByAddress": "Adrese göre",
+	"Sort.ByType": "Tipe göre",
+	"Preference.SortIndices": "Indeksleri sırala",
+	"SortIndices.Descending": "Azalan",
+	"SortIndices.Ascending": "Artan",
+	"Preference.ViewAliases": "Alternatif isimleri görüntüle",
+	"ViewAliases.Grouped": "Gruplanmış",
+	"ViewAliases.List": "Liste",
+	"ViewAliases.None": "Karışık",
+	"Overview.IndexFilter": "Indeks Filtresi",
+	"TableResults.Summary": "{0} parçanın {1} tanesi arandı. {2} sonuç. {3} saniye",
+	"QueryFilter.AllIndices": "Tüm Indeksler",
+	"QueryFilter.AnyValue": "herhangi",
+	"QueryFilter-Header-Indices": "Indeksler",
+	"QueryFilter-Header-Types": "Tipler",
+	"QueryFilter-Header-Fields": "Alanlar",
+	"QueryFilter.DateRangeHint.from": "{0}'dan",
+	"QueryFilter.DateRangeHint.to": "  {0}'a",
+	"Query.FailAndUndo": "Sorgu Başarısız. Son değişiklikler geri alınıyor.",
+	"StructuredQuery.ShowRawJson": "Formatsız JSON göster"
+});
+
+i18n.setKeys({
+	"AnyRequest.TransformerHelp" : "\
+		<p>Sonuç Dönüştürücü sorgudan dönen JSON sonuçlarını işleyip daha kullanışlı bir formata dönüştürmek için kullanılabilir.</p>\
+		<p>Dönüştürücü içierisinde javascript fonksiyonu tanımlanmalıdır. Bu fonksiyondan dönen yeni sonuç çıktı kısmına yazdırılır.</p>\
+		<p>Örnek:<br>\
+		  <code>return root.hits.hits[0];</code> sonucu dolaşarak ilk eşleşmeyi göster<br>\
+		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code> tüm kümede kullanılan toplam belleği gösterir<br></p>\
+		<p>Aşağıdaki fonksiyonlar dizi ve objelerin işlenmesinde yardımcı olması için kullanılabilir<br>\
+		<ul>\
+			<li><i>Object.keys</i>(object) := array</li>\
+			<li>array.<i>forEach</i>(function(prop, index))</li>\
+			<li>array.<i>map</i>(function(prop, index)) := array</li>\
+			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
+		</ul>\
+		<p>Sorgu tekrarlama çalışırken, prev isimli ekstra bir parametre dönüştürücü fonksiyonuna verilir. Bu sayede karşılaştırmalar ve toplu grafik gösterimleri yapılabilir.</p>\
+		<p>Örnek:<br>\
+		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code> önceki dakika boyunca kümede bulunan ilk nod üzerindeki averaj yükü verir.\
+		Bu sonuç nod için yük grafiği yaratılmasında kullanılabilir.\
+		"
+});
+
+i18n.setKeys({
+	"AnyRequest.DisplayOptionsHelp" : "\
+		<p>Sade Json: Sorgunun tüm sonuçlarını ve (yapıldıysa) dönüştürüldükten sonraki halini sade JSON formatında gösterir </p>\
+		<p>Sonuçları Çizdir: Sonuçları grafiksel olarak görüntülemek için sonuç dörücüyü kullanarak değerleri dizi haline getirin.</p>\
+		<p>Arama Sonuçları Tablosu: Eğer sorgunuz bir arama ise, sonuçları bir tabloda görüntüleyebilirsiniz.</p>\
+		"
+});
+
+i18n.setKeys({
+	"QueryFilter.DateRangeHelp" : "\
+		<p>Tarih alanları ana dile yakın kelimeler kullanarak iki tarih aralığında sorgu yapılabilmesini sağlar.</p>\
+		<p>Aşağıdaki tanımlar kullanılabilir:</p>\
+		<ul>\
+			<li><b>Anahtar Kelimeler</b><br>\
+				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
+				kelimeleri eşleşen tarihleri verir. Örneğin <code>last year</code> geçen yıl tarihli bütün verileri döndürür.</li>\
+			<li><b>Aralıklar</b><br>\
+				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (boşluklar isteğe bağlıdır, ayni kelime için farklı yazım şekilleri kullanılabilir)<br>\
+				Şu anki tarihi (<code>now</code>) baz alarak geçmiş veya ileriki bir tarih aralığındaki kayıtları verir.</li>\
+			<li><b>Tarih ve Kısmi Tarihler</b><br>\
+				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
+				bu formatlar spesifik bir tarihi tanımlarlar. <code>2011</code> tüm 2011 yılını ararken, <code>2011-01-18 12:32:45</code> şeklinde bir sorgu sadece o saniyedeki sonuçları verir.</li>\
+			<li><b>Zaman ve Kısmi Zamanlar</b><br>\
+				<code>12<br> 12:32<br> 12:32:45</code><br>\
+				bu formatlar gün içerisinde spesifik bir zamanı tanımlarlar. Örneğin <code>12:32</code> sadece bu saat ve dakikadaki kayıtları verir.</li>\
+			<li><b>Tarih Aralıkları</b><br>\
+				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
+				Tarih aralıkları yukarda belirtilen herhangi bir formatı &lt; or -&gt;  ile ayırarak yapılabilir. Eğer aralığın bir tarafı eksikse, sorgu ucu açıkmış gibi davranır.</li>\
+			<li><b>Ofsetli Tarih Aralığı</b><br>\
+				<code>2010 -> 1yr<br> 3mins < now</code>\
+				Verilen yöndeki tarih aralığına bakar.</li>\
+			<li><b>Çakılı Aralıklar</b><br>\
+				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
+				Yukarıdakiyle ayni fakat belirtilen tarihten her iki yöne de bakılır.</li>\
+		</ul>\
+	"
+});
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/lang/zh_strings.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/lang/zh_strings.js
new file mode 100644
index 0000000..0038de1
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/lang/zh_strings.js
@@ -0,0 +1,172 @@
+i18n.setKeys({
+	"General.Elasticsearch": "Elasticsearch",
+	"General.LoadingAggs": "加载聚合查询...",
+	"General.Searching": "搜索中...",
+	"General.Search": "搜索",
+	"General.Help": "帮助",
+	"General.HelpGlyph": "?",
+	"General.CloseGlyph": "X",
+	"General.RefreshResults": "刷新",
+	"General.ManualRefresh": "手动刷新",
+	"General.RefreshQuickly": "快速刷新",
+	"General.Refresh5seconds": "每5秒刷新",
+	"General.Refresh1minute": "每1分钟刷新",
+	"AliasForm.AliasName": "别名",
+	"AliasForm.NewAliasForIndex": "为 {0} 创建新别名",
+	"AliasForm.DeleteAliasMessage": "输入 ''{0}''  删除 {1}. 此操作无法恢复",
+	"AnyRequest.DisplayOptions" : "显示选项",
+	"AnyRequest.AsGraph" : "图形视图",
+	"AnyRequest.AsJson" : "原始 JSON",
+	"AnyRequest.AsTable" : "表格视图",
+	"AnyRequest.History" : "历史记录",
+	"AnyRequest.RepeatRequest" : "重复请求",
+	"AnyRequest.RepeatRequestSelect" : "重复周期 ",
+	"AnyRequest.Transformer" : "结果转换器",
+	"AnyRequest.Pretty": "易读",
+	"AnyRequest.Query" : "查询",
+	"AnyRequest.Request": "提交请求",
+	"AnyRequest.Requesting": "请求中...",
+	"AnyRequest.ValidateJSON": "验证 JSON",
+	"Browser.Title": "数据浏览",
+	"Browser.ResultSourcePanelTitle": "原始数据",
+	"Command.DELETE": "删除",
+	"Command.SHUTDOWN": "关闭",
+	"Command.DeleteAliasMessage": "删除别名?",
+	"ClusterOverView.IndexName": "索引名称",
+	"ClusterOverview.NumShards": "分片数",
+	"ClusterOverview.NumReplicas": "副本数",
+	"ClusterOverview.NewIndex": "新建索引",
+	"IndexActionsMenu.Title": "动作",
+	"IndexActionsMenu.NewAlias": "新建别名...",
+	"IndexActionsMenu.Refresh": "刷新",
+	"IndexActionsMenu.Flush": "Flush刷新",
+	"IndexActionsMenu.Optimize": "优化...",
+	"IndexActionsMenu.Snapshot": "网关快照",
+	"IndexActionsMenu.Analyser": "测试分析器",
+	"IndexActionsMenu.Open": "开启",
+	"IndexActionsMenu.Close": "关闭",
+	"IndexActionsMenu.Delete": "删除...",
+	"IndexInfoMenu.Title": "信息",
+	"IndexInfoMenu.Status": "索引状态",
+	"IndexInfoMenu.Metadata": "索引信息",
+	"IndexCommand.TextToAnalyze": "文本分析",
+	"IndexCommand.ShutdownMessage": "输入 ''{0}'' 以关闭 {1} 节点. 关闭的节点无法从此界面重新启动",
+	"IndexOverview.PageTitle": "索引概览",
+	"IndexSelector.NameWithDocs": "{0} ({1} 个文档)",
+	"IndexSelector.SearchIndexForDocs": "搜索 {0} 的文档， 查询条件:",
+	"FilterBrowser.OutputType": "返回格式: {0}",
+	"FilterBrowser.OutputSize": "显示数量: {0}",
+	"Header.ClusterHealth": "集群健康值: {0} ({1} of {2})",
+	"Header.ClusterNotConnected": "集群健康值: 未连接",
+	"Header.Connect": "连接",
+	"Nav.AnyRequest": "复合查询",
+	"Nav.Browser": "数据浏览",
+	"Nav.ClusterHealth": "集群健康值",
+	"Nav.ClusterState": "群集状态",
+	"Nav.ClusterNodes": "集群节点",
+	"Nav.Info": "信息",
+	"Nav.NodeStats": "节点状态",
+	"Nav.Overview": "概览",
+	"Nav.Indices": "索引",
+	"Nav.Plugins": "插件",
+	"Nav.Status": "状态",
+	"Nav.Templates": "模板",
+	"Nav.StructuredQuery": "基本查询",
+	"NodeActionsMenu.Title": "动作",
+	"NodeActionsMenu.Shutdown": "关停...",
+	"NodeInfoMenu.Title": "信息",
+	"NodeInfoMenu.ClusterNodeInfo": "集群节点信息",
+	"NodeInfoMenu.NodeStats": "节点状态",
+	"NodeType.Client": "节点客户端",
+	"NodeType.Coord": "协调器",
+	"NodeType.Master": "主节点",
+	"NodeType.Tribe": "分支结点",
+	"NodeType.Worker": "工作节点",
+	"NodeType.Unassigned": "未分配",
+	"OptimizeForm.OptimizeIndex": "优化 {0}",
+	"OptimizeForm.MaxSegments": "最大索引段数",
+	"OptimizeForm.ExpungeDeletes": "只删除被标记为删除的",
+	"OptimizeForm.FlushAfter": "优化后刷新",
+	"OptimizeForm.WaitForMerge": "等待合并",
+	"Overview.PageTitle" : "集群概览",
+	"Output.JSON": "JSON",
+	"Output.Table": "Table",
+	"Output.CSV": "CSV",
+	"Output.ShowSource": "显示查询语句",
+	"Preference.SortCluster": "集群排序",
+	"Sort.ByName": "按名称",
+	"Sort.ByAddress": "按地址",
+	"Sort.ByType": "按类型",
+	"TableResults.Summary": "查询 {1} 个分片中用的 {0} 个. {2} 命中. 耗时 {3} 秒",
+	"QueryFilter.AllIndices": "所有索引",
+	"QueryFilter.AnyValue": "任意",
+	"QueryFilter-Header-Indices": "索引",
+	"QueryFilter-Header-Types": "类型",
+	"QueryFilter-Header-Fields": "字段",
+	"QueryFilter.DateRangeHint.from": "从 : {0}",
+	"QueryFilter.DateRangeHint.to": "  到 : {0}",
+	"Query.FailAndUndo": "查询失败. 撤消最近的更改",
+	"StructuredQuery.ShowRawJson": "显示原始 JSON"
+});
+
+i18n.setKeys({
+	"AnyRequest.TransformerHelp" : "\
+		<p>结果转换器用于返回结果原始JSON的后续处理, 将结果转换为更有用的格式.</p>\
+		<p>转换器应当包含javascript函数体. 函数的返回值将传递给json分析器</p>\
+		<p>Example:<br>\
+		  <code>return root.hits.hits[0];</code><br>\
+		  遍历结果并只显示第一个元素<br>\
+		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code><br>\
+		  将返回整个集群使用的总内存<br></p>\
+		<p>以下函数可以方便的处理数组与对象<br>\
+		<ul>\
+			<li><i>Object.keys</i>(object) := array</li>\
+			<li>array.<i>forEach</i>(function(prop, index))</li>\
+			<li>array.<i>map</i>(function(prop, index)) := array</li>\
+			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
+		</ul>\
+		<p>当启用重复请求时, prev 参数将会传递给转换器函数. 这将用于比较并累加图形</p>\
+		<p>Example:<br>\
+		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code><br>\
+		将返回第一个集群节点最近一分钟内的平均负载\
+		将会把结果送人图表以产生一个负载曲线图\
+		"
+});
+
+i18n.setKeys({
+	"AnyRequest.DisplayOptionsHelp" : "\
+		<p>原始 Json: 将完整的查询结果转换为原始JSON格式 </p>\
+		<p>图形视图: 将查询结果图形化, 将查询结果转换为数组值的形式</p>\
+		<p>表格视图: 如果查询是一个搜索, 可以将搜索结果以表格形式显示.</p>\
+		"
+});
+
+i18n.setKeys({
+	"QueryFilter.DateRangeHelp" : "\
+		<p>Date 字段接受日期范围的形式查询.</p>\
+		<p>一下格式被支持:</p>\
+		<ul>\
+			<li><b>关键词 / 关键短语</b><br>\
+				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
+				搜索关键字匹配的日期. <code>last year</code> 将搜索过去全年.</li>\
+			<li><b>范围</b><br>\
+				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (空格可选, 同等于多个范围修饰词)<br>\
+				创建一个指定时间范围的搜索, 将围绕<code>现在</code> 并延伸至过去与未来时间段.</li>\
+			<li><b>DateTime 与 DateTime局部</b><br>\
+				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
+				指定一个特定的日期范围. <code>2011</code>会搜索整个 2011年, 而 <code>2011-01-18 12:32:45</code> 将只搜索1秒范围内</li>\
+			<li><b>Time 与 Time局部</b><br>\
+				<code>12<br> 12:32<br> 12:32:45</code><br>\
+				这些格式只搜索当天的特定时间. <code>12:32</code> 将搜索当天的那一分钟</li>\
+			<li><b>日期范围</b><br>\
+				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
+				日期范围是将两个日期格式串 (日期关键字 / DateTime / Time) 用  &lt; 或 -&gt; (效果相同) 分隔. 如果缺少任意一端，那么在这个方向上时间将没有限制.</li>\
+			<li><b>偏移日期范围</b><br>\
+				<code>2010 -> 1yr<br> 3mins < now</code>\
+				搜索包括指定方向上偏移的日期.</li>\
+			<li><b>锚定范围</b><br>\
+				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
+				类似于上面的便宜日期，在两个方向上将锚定的日期延长</li>\
+		</ul>\
+	"
+});
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/services/cluster/cluster.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/services/cluster/cluster.js
new file mode 100644
index 0000000..c4ddf65
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/services/cluster/cluster.js
@@ -0,0 +1,47 @@
+(function( $, app ) {
+
+	var services = app.ns("services");
+	var ux = app.ns("ux");
+
+	function parse_version( v ) {
+		return v.match(/^(\d+)\.(\d+)\.(\d+)/).slice(1,4).map( function(d) { return parseInt(d || 0, 10); } );
+	}
+
+	services.Cluster = ux.Class.extend({
+		defaults: {
+			base_uri: null
+		},
+		init: function() {
+			this.base_uri = this.config.base_uri;
+		},
+		setVersion: function( v ) {
+			this.version = v;
+			this._version_parts = parse_version( v );
+		},
+		versionAtLeast: function( v ) {
+			var testVersion = parse_version( v );
+			for( var i = 0; i < 3; i++ ) {
+				if( testVersion[i] !== this._version_parts[i] ) {
+					return testVersion[i] < this._version_parts[i];
+				}
+			}
+			return true;
+		},
+		request: function( params ) {
+			return $.ajax( $.extend({
+				url: this.base_uri + params.path,
+				dataType: "json",
+				error: function(xhr, type, message) {
+					if("console" in window) {
+						console.log({ "XHR Error": type, "message": message });
+					}
+				}
+			},  params) );
+		},
+		"get": function(path, success) { return this.request( { type: "GET", path: path, success: success } ); },
+		"post": function(path, data, success) { return this.request( { type: "POST", path: path, data: data, success: success } ); },
+		"put": function(path, data, success) { return this.request( { type: "PUT", path: path, data: data, success: success } ); },
+		"delete": function(path, data, success) { return this.request( { type: "DELETE", path: path, data: data, success: success } ); }
+	});
+
+})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/services/cluster/clusterSpec.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/services/cluster/clusterSpec.js
new file mode 100644
index 0000000..ff4e8a9
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/services/cluster/clusterSpec.js
@@ -0,0 +1,65 @@
+describe("app.services.Cluster", function() {
+
+	var Cluster = window.app.services.Cluster;
+	var test = window.test;
+
+	var cluster;
+
+	beforeEach( function() {
+		cluster = new Cluster({ base_uri: "http://localhost:9200/" });
+	});
+
+	describe( "when it is initialised", function() {
+
+		it("should have a localhost base_uri", function() {
+			expect( cluster.base_uri ).toBe( "http://localhost:9200/" );
+		});
+
+		it("should have no version", function() {
+			expect( cluster.version ).toBe( undefined );
+		});
+
+	});
+
+	describe( "setVersion()", function() {
+
+		it("have a version", function() {
+			cluster.setVersion( "1.12.3-5" );
+			expect( cluster.version ).toBe( "1.12.3-5" );
+		});
+
+	});
+
+	describe("versionAtLeast()", function() {
+		var vs = [ "0.0.3", "0.13.5", "0.90.3", "1.0.0", "1.1.0", "1.2.3", "1.12.4.rc2", "13.0.0" ];
+
+		it("should return true for versions that are less than or equal to the current version", function() {
+			cluster.setVersion("1.12.5");
+			expect( cluster.versionAtLeast("1.12.5" ) ).toBe( true );
+			expect( cluster.versionAtLeast("1.12.5rc2" ) ).toBe( true );
+			expect( cluster.versionAtLeast("1.12.5-6" ) ).toBe( true );
+			expect( cluster.versionAtLeast("1.12.5-6.beta7" ) ).toBe( true );
+			expect( cluster.versionAtLeast("1.12.4" ) ).toBe( true );
+			expect( cluster.versionAtLeast("0.12.4" ) ).toBe( true );
+			expect( cluster.versionAtLeast("1.1.8" ) ).toBe( true );
+
+			for( var i = 0; i < vs.length - 1; i++ ) {
+				cluster.setVersion( vs[i+1] );
+				expect( cluster.versionAtLeast( vs[i] ) ).toBe( true );
+			}
+		});
+
+		it("should return false for versions that are greater than the current version", function() {
+			cluster.setVersion("1.12.5");
+			expect( cluster.versionAtLeast("1.12.6" ) ).toBe( false );
+			expect( cluster.versionAtLeast("1.13.4" ) ).toBe( false );
+			expect( cluster.versionAtLeast("2.0.0" ) ).toBe( false );
+
+			for( var i = 0; i < vs.length - 1; i++ ) {
+				cluster.setVersion( vs[i] );
+				expect( cluster.versionAtLeast( vs[i+1] ) ).toBe( false );
+			}
+		});
+	});
+
+});
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterState.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterState.js
new file mode 100644
index 0000000..1d7334e
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterState.js
@@ -0,0 +1,73 @@
+	(function( app ) {
+
+	var services = app.ns("services");
+	var ux = app.ns("ux");
+
+	services.ClusterState = ux.Observable.extend({
+		defaults: {
+			cluster: null
+		},
+		init: function() {
+			this._super();
+			this.cluster = this.config.cluster;
+			this.clusterState = null;
+			this.status = null;
+			this.nodeStats = null;
+			this.clusterNodes = null;
+		},
+		refresh: function() {
+			var self = this, clusterState, status, nodeStats, clusterNodes, clusterHealth;
+			function updateModel() {
+				if( clusterState && status && nodeStats && clusterNodes && clusterHealth ) {
+					this.clusterState = clusterState;
+					this.status = status;
+					this.nodeStats = nodeStats;
+					this.clusterNodes = clusterNodes;
+					this.clusterHealth = clusterHealth;
+					this.fire( "data", this );
+				}
+			}
+			this.cluster.get("_cluster/state", function( data ) {
+				clusterState = data;
+				updateModel.call( self );
+			});
+			this.cluster.get("_stats", function( data ) {
+				status = data;
+				updateModel.call( self );
+			});
+			this.cluster.get("_nodes/stats", function( data ) {
+				nodeStats = data;
+				updateModel.call( self );
+			});
+			this.cluster.get("_nodes", function( data ) {
+				clusterNodes = data;
+				updateModel.call( self );
+			});
+			this.cluster.get("_cluster/health", function( data ) {
+				clusterHealth = data;
+				updateModel.call( self );
+			});
+		},
+		_clusterState_handler: function(state) {
+			this.clusterState = state;
+			this.redraw("clusterState");
+		},
+		_status_handler: function(status) {
+			this.status = status;
+			this.redraw("status");
+		},
+		_clusterNodeStats_handler: function(stats) {
+			this.nodeStats = stats;
+			this.redraw("nodeStats");
+		},
+		_clusterNodes_handler: function(nodes) {
+			this.clusterNodes = nodes;
+			this.redraw("clusterNodes");
+		},
+		_clusterHealth_handler: function(health) {
+			this.clusterHealth = health;
+			this.redraw("status");
+		}
+	});
+
+})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterStateSpec.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterStateSpec.js
new file mode 100644
index 0000000..b91237c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterStateSpec.js
@@ -0,0 +1,64 @@
+describe("app.services.ClusterState", function() {
+
+	var ClusterState = window.app.services.ClusterState;
+	var test = window.test;
+
+	var c;
+	var dummyData = {};
+	var dataEventCallback;
+
+	function expectAllDataToBeNull() {
+		expect( c.clusterState ).toBe( null );
+		expect( c.status ).toBe( null );
+		expect( c.nodeStats ).toBe( null );
+		expect( c.clusterNodes ).toBe( null );
+	}
+
+	beforeEach( function() {
+		test.cb.use();
+		dataEventCallback = jasmine.createSpy("onData");
+		c = new ClusterState({
+			cluster: {
+				get: test.cb.createSpy("get", 1, [ dummyData ] )
+			},
+			onData: dataEventCallback
+		});
+	});
+
+	describe( "when it is initialised", function() {
+
+		it("should have null data", function() {
+			expectAllDataToBeNull();
+		});
+
+	});
+
+	describe( "when refresh is called", function() {
+
+		beforeEach( function() {
+			c.refresh();
+		});
+
+		it("should not not update models until all network requests have completed", function() {			
+			test.cb.execOne();
+			expectAllDataToBeNull();
+			test.cb.execOne();
+			expectAllDataToBeNull();
+			test.cb.execOne();
+			expectAllDataToBeNull();
+			test.cb.execOne();
+			expectAllDataToBeNull();
+			test.cb.execOne();
+			expect( c.clusterState ).toBe( dummyData );
+			expect( c.status ).toBe( dummyData );
+			expect( c.nodeStats ).toBe( dummyData );
+			expect( c.clusterNodes ).toBe( dummyData );
+		});
+
+		it("should fire a 'data' event when all data is ready", function() {
+			test.cb.execAll();
+			expect( dataEventCallback ).toHaveBeenCalledWith( c );
+		});
+	});
+
+});
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/services/preferences/preferenceSpec.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/services/preferences/preferenceSpec.js
new file mode 100644
index 0000000..968815d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/services/preferences/preferenceSpec.js
@@ -0,0 +1,23 @@
+describe("app.services.Preferences", function(){
+
+var Preferences = window.app.services.Preferences;
+
+	var prefs;
+
+	beforeEach( function() {
+		spyOn(window.localStorage, "getItem").and.returnValue( '{"foo":true}' );
+		spyOn(window.localStorage, "setItem");
+		prefs = Preferences.instance();
+	});
+
+	it("should return a preference from localStorage", function() {
+		expect( prefs.get("foo") ).toEqual( {foo:true} );
+	});
+
+	it("should set a preference in localStorage", function() {
+		prefs.set("foo", { foo: false } );
+		expect( window.localStorage.setItem ).toHaveBeenCalledWith('foo', '{"foo":false}');
+	});
+
+
+});
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/services/preferences/preferences.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/services/preferences/preferences.js
new file mode 100644
index 0000000..a45eb96
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/services/preferences/preferences.js
@@ -0,0 +1,35 @@
+(function( app ) {
+	
+	var ux = app.ns("ux");
+	var services = app.ns("services");
+
+	services.Preferences = ux.Singleton.extend({
+		init: function() {
+			this._storage = window.localStorage;
+			this._setItem("__version", 1 );
+		},
+		get: function( key ) {
+			return this._getItem( key );
+		},
+		set: function( key, val ) {
+			return this._setItem( key, val );
+		},
+		_getItem: function( key ) {
+			try {
+				return JSON.parse( this._storage.getItem( key ) );
+			} catch(e) {
+				console.warn( e );
+				return undefined;
+			}
+		},
+		_setItem: function( key, val ) {
+			try {
+				return this._storage.setItem( key, JSON.stringify( val ) );
+			} catch(e) {
+				console.warn( e );
+				return undefined;
+			}
+		}
+	});
+
+})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.css
new file mode 100644
index 0000000..3042e7b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.css
@@ -0,0 +1 @@
+.require { color: #a00; }
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.js
new file mode 100644
index 0000000..3d629b7
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.js
@@ -0,0 +1,49 @@
+(function( $, app, joey ) {
+
+	var ui = app.ns("ui");
+
+	ui.AbstractField = ui.AbstractWidget.extend({
+
+		defaults: {
+			name : "",			// (required) - name of the field
+			require: false,	// validation requirements (false, true, regexp, function)
+			value: "",			// default value
+			label: ""				// human readable label of this field
+		},
+
+		init: function(parent) {
+			this._super();
+			this.el = $.joey(this._main_template());
+			this.field = this.el.find("[name="+this.config.name+"]");
+			this.label = this.config.label;
+			this.require = this.config.require;
+			this.name = this.config.name;
+			this.val( this.config.value );
+			this.attach( parent );
+		},
+
+		val: function( val ) {
+			if(val === undefined) {
+				return this.field.val();
+			} else {
+				this.field.val( val );
+				return this;
+			}
+		},
+
+		validate: function() {
+			var val = this.val(), req = this.require;
+			if( req === false ) {
+				return true;
+			} else if( req === true ) {
+				return val.length > 0;
+			} else if( req.test && $.isFunction(req.test) ) {
+				return req.test( val );
+			} else if( $.isFunction(req) ) {
+				return req( val, this );
+			}
+		}
+
+	});
+
+})( this.jQuery, this.app, this.joey );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.css
new file mode 100644
index 0000000..6cce209
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.css
@@ -0,0 +1,43 @@
+#uiModal {
+	background: black;
+}
+
+.uiPanel {
+	box-shadow: -1px 2.5px 4px -3px black, -1px -2.5px 4px -3px black, 3px 2.5px 4px -3px black, 3px -2.5px 4px -3px black;
+	position: absolute;
+	background: #eee;
+	border: 1px solid #666;
+}
+
+.uiPanel-titleBar {
+	text-align: center;
+	font-weight: bold;
+	padding: 2px 0;
+	background: rgba(223, 223, 223, 0.75);
+	background: -moz-linear-gradient(top, rgba(223, 223, 223, 0.75), rgba(193, 193, 193, 0.75), rgba(223, 223, 223, 0.75));
+	background: -webkit-linear-gradient(top, rgba(223, 223, 223, 0.75), rgba(193, 193, 193, 0.75), rgba(223, 223, 223, 0.75));
+	border-bottom: 1px solid #bbb;
+}
+
+.uiPanel-close {
+	cursor: pointer;
+	border: 1px solid #aaa;
+	background: #fff;
+	color: #fff;
+	float: left;
+	height: 10px;
+	left: 3px;
+	line-height: 9px;
+	padding: 1px 0;
+	position: relative;
+	text-shadow: 0 0 1px #000;
+	top: 0px;
+	width: 12px;
+}
+.uiPanel-close:hover {
+	background: #eee;
+}
+
+.uiPanel-body {
+	overflow: auto;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.js
new file mode 100644
index 0000000..17f62a7
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.js
@@ -0,0 +1,83 @@
+(function( $, app ) {
+
+	var ui = app.ns("ui");
+
+	ui.AbstractPanel = ui.AbstractWidget.extend({
+		defaults: {
+			body: null,            // initial content of the body
+			modal: true,           // create a modal panel - creates a div that blocks interaction with page
+			height: 'auto',        // panel height
+			width: 400,            // panel width (in pixels)
+			open: false,           // show the panel when it is created
+			parent: 'BODY',        // node that panel is attached to
+			autoRemove: false      // remove the panel from the dom and destroy it when the widget is closed
+		},
+		shared: {  // shared data for all instances of ui.Panel and decendants
+			stack: [], // array of all open panels
+			modal: $( { tag: "DIV", id: "uiModal", css: { opacity: 0.2, position: "absolute", top: "0px", left: "0px" } } )
+		},
+		init: function() {
+			this._super();
+		},
+		open: function( ev ) {
+			this.el
+				.css( { visibility: "hidden" } )
+				.appendTo( this.config.parent )
+				.css( this._getPosition( ev ) )
+				.css( { zIndex: (this.shared.stack.length ? (+this.shared.stack[this.shared.stack.length - 1].el.css("zIndex") + 10) : 100) } )
+				.css( { visibility: "visible", display: "block" } );
+			this.shared.stack.remove(this);
+			this.shared.stack.push(this);
+			this._setModal();
+			$(document).bind("keyup", this._close_handler );
+			this.fire("open", { source: this, event: ev } );
+			return this;
+		},
+		close: function() {
+			var index = this.shared.stack.indexOf(this);
+			if(index !== -1) {
+				this.shared.stack.splice(index, 1);
+				this.el.css( { left: "-2999px" } ); // move the dialog to the left rather than hiding to prevent ie6 rendering artifacts
+				this._setModal();
+				this.fire("close", this );
+				if(this.config.autoRemove) {
+					this.remove();
+				}
+			}
+			return this;
+		},
+		// close the panel and remove it from the dom, destroying it (you can not reuse the panel after calling remove)
+		remove: function() {
+			this.close();
+			$(document).unbind("keyup", this._close_handler );
+			this._super();
+		},
+		// starting at the top of the stack, find the first panel that wants a modal and put it just underneath, otherwise remove the modal
+		_setModal: function() {
+			for(var stackPtr = this.shared.stack.length - 1; stackPtr >= 0; stackPtr--) {
+				if(this.shared.stack[stackPtr].config.modal) {
+					this.shared.modal
+						.appendTo( document.body )
+						.css( { zIndex: this.shared.stack[stackPtr].el.css("zIndex") - 5 } )
+						.css( $(document).vSize().asSize() );
+					return;
+				}
+			}
+			this.shared.modal.remove(); // no panels that want a modal were found
+		},
+		_getPosition: function() {
+			return $(window).vSize()                        // get the current viewport size
+				.sub(this.el.vSize())                         // subtract the size of the panel
+				.mod(function(s) { return s / 2; })           // divide by 2 (to center it)
+				.add($(document).vScroll())                   // add the current scroll offset
+				.mod(function(s) { return Math.max(5, s); })  // make sure the panel is not off the edge of the window
+				.asOffset();                                  // and return it as a {top, left} object
+		},
+		_close_handler: function( ev ) {
+			if( ev.type === "keyup" && ev.keyCode !== 27) { return; } // press esc key to close
+			$(document).unbind("keyup", this._close_handler);
+			this.close( ev );
+		}
+	});
+
+})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/abstractWidget/abstractWidget.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/abstractWidget/abstractWidget.js
new file mode 100644
index 0000000..bf3b4c8
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/abstractWidget/abstractWidget.js
@@ -0,0 +1,49 @@
+(function( $, joey, app ) {
+
+	var ui = app.ns("ui");
+	var ux = app.ns("ux");
+
+	ui.AbstractWidget = ux.Observable.extend({
+		defaults : {
+			id: null     // the id of the widget
+		},
+
+		el: null,       // this is the jquery wrapped dom element(s) that is the root of the widget
+
+		init: function() {
+			this._super();
+			for(var prop in this) {       // automatically bind all the event handlers
+				if(prop.contains("_handler")) {
+					this[prop] = this[prop].bind(this);
+				}
+			}
+		},
+
+		id: function(suffix) {
+			return this.config.id ? (this.config.id + (suffix ? "-" + suffix : "")) : undefined;
+		},
+
+		attach: function( parent, method ) {
+			if( parent ) {
+				this.el[ method || "appendTo"]( parent );
+			}
+			this.fire("attached", this );
+			return this;
+		},
+
+		remove: function() {
+			this.el.remove();
+			this.fire("removed", this );
+			this.removeAllObservers();
+			this.el = null;
+			return this;
+		}
+	});
+
+	joey.plugins.push( function( obj ) {
+		if( obj instanceof ui.AbstractWidget ) {
+			return obj.el[0];
+		}
+	});
+
+})( this.jQuery, this.joey, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.css
new file mode 100644
index 0000000..f00412c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.css
@@ -0,0 +1,38 @@
+.uiAnyRequest-request {
+	float: left;
+	width: 350px;
+	padding: 5px;
+	background: #d8e7ff;
+	background: -moz-linear-gradient(left, #d8e7ff, #e8f1ff);
+	background: -webkit-linear-gradient(left, #d8e7ff, #e8f1ff);
+}
+
+.uiAnyRequest-request INPUT[type=text],
+.uiAnyRequest-request TEXTAREA {
+	width: 340px;
+}
+
+.anyRequest INPUT[name=path] {
+	width: 259px;
+}
+
+.uiAnyRequest-out {
+	margin-left: 365px;
+}
+
+.uiAnyRequest-out P {
+	margin-top: 0;
+}
+
+.uiAnyRequest-jsonErr {
+	color: red;
+}
+
+.uiAnyRequest-history {
+	margin: 0;
+	padding: 0;
+	list-style: none;
+	max-height: 100px;
+	overflow-x: hidden;
+	overflow-y: auto;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.js
new file mode 100644
index 0000000..926bbcc
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.js
@@ -0,0 +1,235 @@
+(function( $, app, i18n, raphael ) {
+
+	var ui = app.ns("ui");
+	var ut = app.ns("ut");
+	var services = app.ns("services");
+
+	ui.AnyRequest = ui.Page.extend({
+		defaults: {
+			cluster: null,       // (required) instanceof app.services.Cluster
+			path: "_search",     // default uri to send a request to
+			query: { query: { match_all: { }}},
+			transform: "  return root;" // default transformer function (does nothing)
+		},
+		init: function(parent) {
+			this._super();
+			this.prefs = services.Preferences.instance();
+			this.history = this.prefs.get("anyRequest-history") || [ { type: "POST", path: this.config.path, query : JSON.stringify(this.config.query), transform: this.config.transform } ];
+			this.el = $.joey(this._main_template());
+			this.base_uriEl = this.el.find("INPUT[name=base_uri]");
+			this.pathEl = this.el.find("INPUT[name=path]");
+			this.typeEl = this.el.find("SELECT[name=method]");
+			this.dataEl = this.el.find("TEXTAREA[name=body]");
+			this.prettyEl = this.el.find("INPUT[name=pretty]");
+			this.transformEl = this.el.find("TEXTAREA[name=transform]");
+			this.asGraphEl = this.el.find("INPUT[name=asGraph]");
+			this.asTableEl = this.el.find("INPUT[name=asTable]");
+			this.asJsonEl = this.el.find("INPUT[name=asJson]");
+			this.cronEl = this.el.find("SELECT[name=cron]");
+			this.outEl = this.el.find("DIV.uiAnyRequest-out");
+			this.errEl = this.el.find("DIV.uiAnyRequest-jsonErr");
+			this.typeEl.val("GET");
+			this.attach(parent);
+			this.setHistoryItem(this.history[this.history.length - 1]);
+		},
+		setHistoryItem: function(item) {
+			this.pathEl.val(item.path);
+			this.typeEl.val(item.type);
+			this.dataEl.val(item.query);
+			this.transformEl.val(item.transform);
+		},
+		_request_handler: function( ev ) {
+			if(! this._validateJson_handler()) {
+				return;
+			}
+			var path = this.pathEl.val(),
+					type = this.typeEl.val(),
+					query = JSON.stringify(JSON.parse(this.dataEl.val())),
+					transform = this.transformEl.val(),
+					base_uri = this.base_uriEl.val();
+			if( ev ) { // if the user click request
+				if(this.timer) {
+					window.clearTimeout(this.timer); // stop any cron jobs
+				}
+				delete this.prevData; // remove data from previous cron runs
+				this.outEl.text(i18n.text("AnyRequest.Requesting"));
+				if( ! /\/$/.test( base_uri )) {
+					base_uri += "/";
+					this.base_uriEl.val( base_uri );
+				}
+				for(var i = 0; i < this.history.length; i++) {
+					if(this.history[i].path === path &&
+						this.history[i].type === type &&
+						this.history[i].query === query &&
+						this.history[i].transform === transform) {
+						this.history.splice(i, 1);
+					}
+				}
+				this.history.push({
+					path: path,
+					type: type,
+					query: query,
+					transform: transform
+				});
+				this.history.slice(250); // make sure history does not get too large
+				this.prefs.set( "anyRequest-history", this.history );
+				this.el.find("UL.uiAnyRequest-history")
+					.empty()
+					.append($( { tag: "UL", children: this.history.map(this._historyItem_template, this) }).children())
+					.children().find(":last-child").each(function(i, j) { j.scrollIntoView(false); }).end()
+					.scrollLeft(0);
+			}
+			this.config.cluster.request({
+				url: base_uri + path,
+				type: type,
+				data: query,
+				success: this._responseWriter_handler,
+				error: this._responseError_handler
+			});
+		},
+		_responseError_handler: function (response) {
+			var obj;
+			try {
+				obj = JSON.parse(response.responseText);
+				if (obj) {
+					this._responseWriter_handler(obj);
+				}
+			} catch (err) {
+			}
+		},
+		_responseWriter_handler: function(data) {
+			this.outEl.empty();
+			try {
+				data = (new Function("root", "prev", this.transformEl.val()))(data, this.prevData)
+			} catch(e) {
+				this.errEl.text(e.message);
+				return;
+			}
+			if(this.asGraphEl.attr("checked")) {
+				var w = this.outEl.width();
+				raphael(this.outEl[0], w - 10, 300)
+					.g.barchart(10, 10, w - 20, 280, [data]);
+			}
+			if(this.asTableEl.attr("checked")) {
+				try {
+					var store = new app.data.ResultDataSourceInterface();
+					this.outEl.append(new app.ui.ResultTable({
+						width: this.outEl.width() - 23,
+						store: store
+					} ) );
+					store.results(data);
+				} catch(e) {
+					this.errEl.text("Results Table Failed: " + e.message);
+				}
+			}
+			if(this.asJsonEl.attr("checked")) {
+				this.outEl.append(new ui.JsonPretty({ obj: data }));
+			}
+			if(this.cronEl.val() > 0) {
+				this.timer = window.setTimeout(function(){
+					this._request_handler();
+				}.bind(this), this.cronEl.val());
+			}
+			this.prevData = data;
+		},
+		_validateJson_handler: function( ev ) {
+			/* if the textarea is empty, we replace its value by an empty JSON object : "{}" and the request goes on as usual */
+			var jsonData = this.dataEl.val().trim();
+			var j;
+			if(jsonData === "") {
+				jsonData = "{}";
+				this.dataEl.val( jsonData );
+			}
+			try {
+				j = JSON.parse(jsonData);
+			} catch(e) {
+				this.errEl.text(e.message);
+				return false;
+			}
+			this.errEl.text("");
+			if(this.prettyEl.attr("checked")) {
+				this.dataEl.val(JSON.stringify(j, null, "  "));
+			}
+			return true;
+		},
+		_historyClick_handler: function( ev ) {
+			var item = $( ev.target ).closest( "LI" ).data( "item" );
+			this.setHistoryItem( item );
+		},
+		_main_template: function() {
+			return { tag: "DIV", cls: "anyRequest", children: [
+				{ tag: "DIV", cls: "uiAnyRequest-request", children: [
+					new app.ui.SidebarSection({
+						open: false,
+						title: i18n.text("AnyRequest.History"),
+						body: { tag: "UL", onclick: this._historyClick_handler, cls: "uiAnyRequest-history", children: this.history.map(this._historyItem_template, this)	}
+					}),
+					new app.ui.SidebarSection({
+						open: true,
+						title: i18n.text("AnyRequest.Query"),
+						body: { tag: "DIV", children: [
+							{ tag: "INPUT", type: "text", name: "base_uri", value: this.config.cluster.config.base_uri },
+							{ tag: "BR" },
+							{ tag: "INPUT", type: "text", name: "path", value: this.config.path },
+							{ tag: "SELECT", name: "method", children: ["POST", "GET", "PUT", "HEAD", "DELETE"].map(ut.option_template) },
+							{ tag: "TEXTAREA", name: "body", rows: 20, text: JSON.stringify(this.config.query) },
+							{ tag: "BUTTON", css: { cssFloat: "right" }, type: "button", children: [ { tag: "B", text: i18n.text("AnyRequest.Request") } ], onclick: this._request_handler },
+							{ tag: "BUTTON", type: "button", text: i18n.text("AnyRequest.ValidateJSON"), onclick: this._validateJson_handler },
+							{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", name: "pretty" }, i18n.text("AnyRequest.Pretty") ] },
+							{ tag: "DIV", cls: "uiAnyRequest-jsonErr" }
+						]}
+					}),
+					new app.ui.SidebarSection({
+						title: i18n.text("AnyRequest.Transformer"),
+						help: "AnyRequest.TransformerHelp",
+						body: { tag: "DIV", children: [
+							{ tag: "CODE", text: "function(root, prev) {" },
+							{ tag: "BR" },
+							{ tag: "TEXTAREA", name: "transform", rows: 5, text: this.config.transform },
+							{ tag: "BR" },
+							{ tag: "CODE", text: "}" }
+						] }
+					}),
+					new app.ui.SidebarSection({
+						title: i18n.text("AnyRequest.RepeatRequest"),
+						body: { tag: "DIV", children: [
+							i18n.text("AnyRequest.RepeatRequestSelect"), " ",
+							{ tag: "SELECT", name: "cron", children: [
+								{ value: 0, text: "do not repeat" },
+								{ value: 1000, text: "second" },
+								{ value: 1000 * 2, text: "2 seconds" },
+								{ value: 1000 * 5, text: "5 seconds" },
+								{ value: 1000 * 20, text: "20 seconds" },
+								{ value: 1000 * 60, text: "minute" },
+								{ value: 1000 * 60 * 10, text: "10 minutes" },
+								{ value: 1000 * 60 * 60, text: "hour" }
+							].map(function(op) { return $.extend({ tag: "OPTION"}, op); }) }
+						] }
+					}),
+					new app.ui.SidebarSection({
+						title: i18n.text("AnyRequest.DisplayOptions"),
+						help: "AnyRequest.DisplayOptionsHelp",
+						body: { tag: "DIV", children: [
+							{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", checked: true, name: "asJson" }, i18n.text("AnyRequest.AsJson") ] },
+							{ tag: "BR" },
+							{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", name: "asGraph" }, i18n.text("AnyRequest.AsGraph") ] },
+							{ tag: "BR" },
+							{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", name: "asTable" }, i18n.text("AnyRequest.AsTable") ] }
+						] }
+					})
+				] },
+				{ tag: "DIV", cls: "uiAnyRequest-out" }
+			] };
+		},
+		_historyItem_template: function(item) {
+			return { tag: "LI", cls: "booble", data: { item: item }, children: [
+				{ tag: "SPAN", text: item.path },
+				" ",
+				{ tag: "EM", text: item.query },
+				" ",
+				{ tag: "SPAN", text: item.transform }
+			] };
+		}
+	});
+	
+})( this.jQuery, this.app, this.i18n, this.Raphael );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.css
new file mode 100644
index 0000000..66e2110
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.css
@@ -0,0 +1,7 @@
+.uiBrowser-filter {
+	float: left;
+}
+
+.uiBrowser-table {
+	margin-left: 365px;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.js
new file mode 100644
index 0000000..329aa4d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.js
@@ -0,0 +1,58 @@
+(function( $, app, i18n ){
+
+	var ui = app.ns("ui");
+	var data = app.ns("data");
+
+	ui.Browser = ui.Page.extend({
+		defaults: {
+			cluster: null  // (required) instanceof app.services.Cluster
+		},
+		init: function() {
+			this._super();
+			this.cluster = this.config.cluster;
+			this.query = new app.data.Query( { cluster: this.cluster } );
+			this._refreshButton = new ui.Button({
+				label: i18n.text("General.RefreshResults"),
+				onclick: function( btn ) {
+					this.query.query();
+				}.bind(this)
+			});
+			this.el = $(this._main_template());
+			new data.MetaDataFactory({
+				cluster: this.cluster,
+				onReady: function(metadata) {
+					this.metadata = metadata;
+					this.store = new data.QueryDataSourceInterface( { metadata: metadata, query: this.query } );
+					this.queryFilter = new ui.QueryFilter({ metadata: metadata, query: this.query });
+					this.queryFilter.attach(this.el.find("> .uiBrowser-filter") );
+					this.resultTable = new ui.ResultTable( {
+						onHeaderClick: this._changeSort_handler,
+						store: this.store
+					} );
+					this.resultTable.attach( this.el.find("> .uiBrowser-table") );
+					this.updateResults();
+				}.bind(this)
+			});
+		},
+		updateResults: function() {
+			this.query.query();
+		},
+		_changeSort_handler: function(table, wEv) {
+			this.query.setSort(wEv.column, wEv.dir === "desc");
+			this.query.setPage(1);
+			this.query.query();
+		},
+		_main_template: function() {
+			return { tag: "DIV", cls: "uiBrowser", children: [
+				new ui.Toolbar({
+					label: i18n.text("Browser.Title"),
+					left: [ ],
+					right: [ this._refreshButton ]
+				}),
+				{ tag: "DIV", cls: "uiBrowser-filter" },
+				{ tag: "DIV", cls: "uiBrowser-table" }
+			] };
+		}
+	});
+
+})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/button/button.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/button/button.css
new file mode 100644
index 0000000..17123dc
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/button/button.css
@@ -0,0 +1,50 @@
+.uiButton {
+	padding: 0;
+	border: 0;
+	margin: 3px;
+	width: auto;
+	overflow: visible;
+	cursor: pointer;
+	background: transparent;
+}
+
+.uiButton-content {
+	height: 20px;
+	border: 1px solid #668dc6;
+	border-radius: 2px;
+	background: #96c6eb;
+	background: -moz-linear-gradient(top, #96c6eb, #5296c7);
+	background: -webkit-linear-gradient(top, #96c6eb, #5296c7);
+	color: white;
+	font-weight: bold;
+}
+
+.moz .uiButton-content { margin: 0 -2px; }
+
+.uiButton-label {
+		padding: 2px 6px;
+		white-space: nowrap;
+}
+.uiButton:hover .uiButton-content {
+	background: #2777ba;
+	background: -moz-linear-gradient(top, #6aaadf, #2777ba);
+	background: -webkit-linear-gradient(top, #6aaadf, #2777ba);
+}
+.uiButton.active .uiButton-content,
+.uiButton:active .uiButton-content {
+	background: #2575b7;
+	background: -moz-linear-gradient(top, #2576b8, #2575b7);
+	background: -webkit-linear-gradient(top, #2576b8, #2575b7);
+}
+.uiButton.disabled .uiButton-content,
+.uiButton.disabled:active .uiButton-content {
+		border-color: #c6c6c6;
+		color: #999999;
+		background: #ddd;
+		background: -moz-linear-gradient(top, #ddd, #ddd);
+		background: -webkit-linear-gradient(top, #ddd, #ddd);
+}
+
+.uiButton.disabled {
+		cursor: default;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/button/button.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/button/button.js
new file mode 100644
index 0000000..57f83a0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/button/button.js
@@ -0,0 +1,53 @@
+(function( $, joey, app ) {
+
+	var ui = app.ns("ui");
+
+	ui.Button = ui.AbstractWidget.extend({
+		defaults : {
+			label: "",                 // the label text
+			disabled: false,           // create a disabled button
+			autoDisable: false         // automatically disable the button when clicked
+		},
+
+		_baseCls: "uiButton",
+
+		init: function(parent) {
+			this._super();
+			this.el = $.joey(this.button_template())
+				.bind("click", this.click_handler);
+			this.config.disabled && this.disable();
+			this.attach( parent );
+		},
+
+		click_handler: function(jEv) {
+			if(! this.disabled) {
+				this.fire("click", jEv, this);
+				this.config.autoDisable && this.disable();
+			}
+		},
+
+		enable: function() {
+			this.el.removeClass("disabled");
+			this.disabled = false;
+			return this;
+		},
+
+		disable: function(disable) {
+			if(disable === false) {
+					return this.enable();
+			}
+			this.el.addClass("disabled");
+			this.disabled = true;
+			return this;
+		},
+
+		button_template: function() { return (
+			{ tag: 'BUTTON', type: 'button', id: this.id(), cls: this._baseCls, children: [
+				{ tag: 'DIV', cls: 'uiButton-content', children: [
+					{ tag: 'DIV', cls: 'uiButton-label', text: this.config.label }
+				] }
+			] }
+		); }
+	});
+
+})( this.jQuery, this.joey, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/button/buttonDemo.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/button/buttonDemo.js
new file mode 100644
index 0000000..060e8f6
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/button/buttonDemo.js
@@ -0,0 +1,9 @@
+$( function() {
+
+	var ui = window.app.ns("ui");
+
+	window.builder = function() {
+		return new ui.Button({	label: "Default" });
+	}	;
+
+});
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkField.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkField.js
new file mode 100644
index 0000000..d5f5012
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkField.js
@@ -0,0 +1,25 @@
+(function( app ) {
+
+	var ui = app.ns("ui");
+
+	ui.CheckField = ui.AbstractField.extend({
+		_main_template: function() { return (
+			{ tag: "DIV", id: this.id(), cls: "uiCheckField", children: [
+				{ tag: "INPUT", type: "checkbox", name: this.config.name, checked: !!this.config.value }
+			] }
+		); },
+		validate: function() {
+			return this.val() || ( ! this.require );
+		},
+		val: function( val ) {
+			if( val === undefined ) {
+				return !!this.field.attr( "checked" );
+			} else {
+				this.field.attr( "checked", !!val );
+			}
+		}
+	});
+
+})( this.app );
+
+
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldDemo.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldDemo.js
new file mode 100644
index 0000000..9a3b3ca
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldDemo.js
@@ -0,0 +1,45 @@
+$( function() {
+
+	var ui = window.app.ns("ui");
+	var ux = window.app.ns("ux");
+	var ut = window.app.ns("ut");
+
+	window.builder = function() {
+		var form = new ux.FieldCollection({
+			fields: [
+				new ui.CheckField({
+					label: "default",
+					name: "check_default"
+				}),
+				new ui.CheckField({
+					label: "checked",
+					name: "check_true",
+					value: true
+				}),
+				new ui.CheckField({
+					label: "unchecked",
+					name: "check_false",
+					value: false
+				}),
+				new ui.CheckField({
+					label: "required",
+					name: "check_required",
+					require: true
+				})
+			]
+		});
+
+		return (
+			{ tag: "DIV", children: form.fields.map( function( field ) {
+				return { tag: "LABEL", cls: "uiPanelForm-field", children: [
+					{ tag: "DIV", cls: "uiPanelForm-label", children: [ field.label, ut.require_template(field) ] },
+					field
+				]};
+			}).concat( new ui.Button({
+				label: "Evaluate Form",
+				onclick: function() { console.log( "valid=" + form.validate(), form.getData() ); }
+			})) }
+		);
+	};
+
+});
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldSpec.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldSpec.js
new file mode 100644
index 0000000..26ddc6f
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldSpec.js
@@ -0,0 +1,34 @@
+describe("app.ui.CheckField", function() {
+
+	var CheckField = window.app.ui.CheckField;
+
+	it("should have a label", function() {
+		expect( ( new CheckField({ label: "foo" }) ).label ).toBe( "foo" );
+	});
+
+	it("should have a name", function() {
+		expect( ( new CheckField({ name: "foo" }) ).name ).toBe( "foo" );
+	});
+
+	it("should have a val that is false when then field is not checked", function() {
+		expect( ( new CheckField({ name: "foo", value: false }) ).val() ).toBe( false );
+	});
+
+	it("should have a val that is true when the field is checked", function() {
+		expect( ( new CheckField({ name: "foo", value: true }) ).val() ).toBe( true );
+	});
+
+	it("should be valid if the field value is true", function() {
+		expect( ( new CheckField({ name: "foo", value: true }) ).validate() ).toBe( true );
+	});
+
+	it("should be valid if require is false", function() {
+		expect( ( new CheckField({ name: "foo", require: false, value: true }) ).validate() ).toBe( true );
+		expect( ( new CheckField({ name: "foo", require: false, value: false }) ).validate() ).toBe( true );
+	});
+
+	it("should be invalid if require is true and value is false", function() {
+		expect( ( new CheckField({ name: "foo", require: true, value: false }) ).validate() ).toBe( false );
+	});
+
+});
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.css
new file mode 100644
index 0000000..e5b8fb4
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.css
@@ -0,0 +1,3 @@
+.uiClusterConnect-uri {
+	width: 280px;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.js
new file mode 100644
index 0000000..63d0977
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.js
@@ -0,0 +1,43 @@
+(function( $, app, i18n ) {
+
+	var ui = app.ns("ui");
+	var services = app.ns("services");
+
+	ui.ClusterConnect = ui.AbstractWidget.extend({
+		defaults: {
+			cluster: null
+		},
+		init: function() {
+			this._super();
+			this.prefs = services.Preferences.instance();
+			this.cluster = this.config.cluster;
+			this.el = $.joey(this._main_template());
+			this.cluster.get( "", this._node_handler );
+		},
+		
+		_node_handler: function(data) {
+			if(data) {
+				this.prefs.set("app-base_uri", this.cluster.base_uri);
+			}
+		},
+		
+		_reconnect_handler: function() {
+			var base_uri = this.el.find(".uiClusterConnect-uri").val();
+			$("body").empty().append(new app.App("body", { id: "es", base_uri: base_uri }));
+		},
+		
+		_main_template: function() {
+			return { tag: "SPAN", cls: "uiClusterConnect", children: [
+				{ tag: "INPUT", type: "text", cls: "uiClusterConnect-uri", onkeyup: function( ev ) {
+					if(ev.which === 13) {
+						ev.preventDefault();
+						this._reconnect_handler();
+					}
+				}.bind(this), id: this.id("baseUri"), value: this.cluster.base_uri },
+				{ tag: "BUTTON", type: "button", text: i18n.text("Header.Connect"), onclick: this._reconnect_handler }
+			]};
+		}
+	});
+
+})( this.jQuery, this.app, this.i18n );
+
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnectSpec.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnectSpec.js
new file mode 100644
index 0000000..8b8be82
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnectSpec.js
@@ -0,0 +1,38 @@
+describe("clusterConnect", function() {
+
+	var ClusterConnect = window.app.ui.ClusterConnect;
+
+	describe("when created", function() {
+
+		var prefs, success_callback, cluster, clusterConnect;
+
+		beforeEach( function() {
+			prefs = {
+				set: jasmine.createSpy("set")
+			};
+			spyOn( window.app.services.Preferences, "instance" ).and.callFake( function() {
+				return prefs;
+			});
+			cluster = {
+				get: jasmine.createSpy("get").and.callFake( function(uri, success) {
+					success_callback = success;
+				})
+			};
+			clusterConnect = new ClusterConnect({
+				base_uri: "http://localhost:9200",
+				cluster: cluster
+			});
+		});
+
+		it("should test the connection to the cluster", function() {
+			expect( cluster.get ).toHaveBeenCalled();
+		});
+
+		it("should store successful connection in preferences", function() {
+			success_callback("fakePayload");
+			expect( prefs.set ).toHaveBeenCalled();
+		});
+
+	});
+
+});
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/clusterOverview/clusterOverview.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/clusterOverview/clusterOverview.css
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/clusterOverview/clusterOverview.css
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/clusterOverview/clusterOverview.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/clusterOverview/clusterOverview.js
new file mode 100644
index 0000000..745ab42
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/clusterOverview/clusterOverview.js
@@ -0,0 +1,302 @@
+(function( $, app, i18n ) {
+
+	var ui = app.ns("ui");
+	var services = app.ns("services");
+
+	// ( master ) master = true, data = true 
+	// ( coordinator ) master = true, data = false
+	// ( worker ) master = false, data = true;
+	// ( client ) master = false, data = false;
+	// http enabled ?
+
+	function nodeSort_name(a, b) {
+		if (!(a.cluster && b.cluster)) {
+			return 0;
+		}
+		return a.cluster.name.toString().localeCompare( b.cluster.name.toString() );
+	}
+
+	function nodeSort_addr( a, b ) {
+		if (!(a.cluster && b.cluster)) {
+			return 0;
+		}
+		return a.cluster.transport_address.toString().localeCompare( b.cluster.transport_address.toString() );
+	}
+
+	function nodeSort_type( a, b ) {
+		if (!(a.cluster && b.cluster)) {
+			return 0;
+		}
+		if( a.master_node ) {
+			return -1;
+		} else if( b.master_node ) {
+			return 1;
+		} else if( a.data_node && !b.data_node ) {
+			return -1;
+		} else if( b.data_node && !a.data_node ) {
+			return 1;
+		} else {
+			return a.cluster.name.toString().localeCompare( b.cluster.name.toString() );
+		}
+	}
+
+	var NODE_SORT_TYPES = {
+		"Sort.ByName": nodeSort_name,
+		"Sort.ByAddress": nodeSort_addr,
+		"Sort.ByType": nodeSort_type
+	};
+
+	function nodeFilter_none( a ) {
+		return true;
+	}
+
+	function nodeFilter_clients( a ) {
+		return (a.master_node || a.data_node );
+	}
+
+
+	ui.ClusterOverview = ui.Page.extend({
+		defaults: {
+			cluster: null // (reqired) an instanceof app.services.Cluster
+		},
+		init: function() {
+			this._super();
+			this.cluster = this.config.cluster;
+			this.prefs = services.Preferences.instance();
+			this._clusterState = this.config.clusterState;
+			this._clusterState.on("data", this.draw_handler );
+			this._refreshButton = new ui.RefreshButton({
+				onRefresh: this.refresh.bind(this),
+				onChange: function( btn ) {
+					if( btn.value === -1 ) {
+						this.draw_handler();
+					}
+				}.bind( this )
+			});
+			var nodeSortPref = this.prefs.get("clusterOverview-nodeSort") || Object.keys(NODE_SORT_TYPES)[0];
+			this._nodeSort = NODE_SORT_TYPES[ nodeSortPref ];
+			this._nodeSortMenu = new ui.MenuButton({
+				label: i18n.text( "Preference.SortCluster" ),
+				menu: new ui.SelectMenuPanel({
+					value: nodeSortPref,
+					items: Object.keys( NODE_SORT_TYPES ).map( function( k ) {
+						return { text: i18n.text( k ), value: k };
+					}),
+					onSelect: function( panel, event ) {
+						this._nodeSort = NODE_SORT_TYPES[ event.value ];
+						this.prefs.set("clusterOverview-nodeSort", event.value );
+						this.draw_handler();
+					}.bind(this)
+				})
+			});
+			this._indicesSort = this.prefs.get( "clusterOverview-indicesSort") || "desc";
+			this._indicesSortMenu = new ui.MenuButton({
+				label: i18n.text( "Preference.SortIndices" ),
+				menu: new ui.SelectMenuPanel({
+					value: this._indicesSort,
+					items: [
+						{ value: "desc", text: i18n.text( "SortIndices.Descending" ) },
+						{ value: "asc", text: i18n.text( "SortIndices.Ascending" ) } ],
+					onSelect: function( panel, event ) {
+						this._indicesSort = event.value;
+						this.prefs.set( "clusterOverview-indicesSort", this._indicesSort );
+						this.draw_handler();
+					}.bind(this)
+				})
+			});
+			this._aliasRenderer = this.prefs.get( "clusterOverview-aliasRender" ) || "full";
+			this._aliasMenu = new ui.MenuButton({
+				label: i18n.text( "Preference.ViewAliases" ),
+				menu: new ui.SelectMenuPanel({
+					value: this._aliasRenderer,
+					items: [
+						{ value: "full", text: i18n.text( "ViewAliases.Grouped" ) },
+						{ value: "list", text: i18n.text( "ViewAliases.List" ) },
+						{ value: "none", text: i18n.text( "ViewAliases.None" ) } ],
+					onSelect: function( panel, event ) {
+						this._aliasRenderer = event.value;
+						this.prefs.set( "clusterOverview-aliasRender", this._aliasRenderer );
+						this.draw_handler();
+					}.bind(this)
+				})
+			});
+			this._indexFilter = new ui.TextField({
+				value: this.prefs.get("clusterOverview-indexFilter"),
+				placeholder: i18n.text( "Overview.IndexFilter" ),
+				onchange: function( indexFilter ) {
+					this.prefs.set("clusterOverview-indexFilter", indexFilter.val() );
+					this.draw_handler();
+				}.bind(this)
+			});
+			this.el = $(this._main_template());
+			this.tablEl = this.el.find(".uiClusterOverview-table");
+			this.refresh();
+		},
+		remove: function() {
+			this._clusterState.removeObserver( "data", this.draw_handler );
+		},
+		refresh: function() {
+			this._refreshButton.disable();
+			this._clusterState.refresh();
+		},
+		draw_handler: function() {
+			var data = this._clusterState;
+			var indexFilter;
+			try {
+				var indexFilterRe = new RegExp( this._indexFilter.val() );
+				indexFilter = function(s) { return indexFilterRe.test(s); };
+			} catch(e) {
+				indexFilter = function() { return true; };
+			}
+			var clusterState = data.clusterState;
+			var status = data.status;
+			var nodeStats = data.nodeStats;
+			var clusterNodes = data.clusterNodes;
+			var nodes = [];
+			var indices = [];
+			var cluster = {};
+			var nodeIndices = {};
+			var indexIndices = {}, indexIndicesIndex = 0;
+			function newNode(n) {
+				return {
+					name: n,
+					routings: [],
+					master_node: clusterState.master_node === n
+				};
+			}
+			function newIndex(i) {
+				return {
+					name: i,
+					replicas: []
+				};
+			}
+			function getIndexForNode(n) {
+				return nodeIndices[n] = (n in nodeIndices) ? nodeIndices[n] : nodes.push(newNode(n)) - 1;
+			}
+			function getIndexForIndex(routings, i) {
+				var index = indexIndices[i] = (i in indexIndices) ?
+						(routings[indexIndices[i]] = routings[indexIndices[i]] || newIndex(i)) && indexIndices[i]
+						: ( ( routings[indexIndicesIndex] = newIndex(i) )  && indexIndicesIndex++ );
+				indices[index] = i;
+				return index;
+			}
+			$.each(clusterNodes.nodes, function(name, node) {
+				getIndexForNode(name);
+			});
+
+			var indexNames = [];
+			$.each(clusterState.routing_table.indices, function(name, index){
+				indexNames.push(name);
+			});
+			indexNames.sort();
+			if (this._indicesSort === "desc") indexNames.reverse();
+			indexNames.filter( indexFilter ).forEach(function(name) {
+				var indexObject = clusterState.routing_table.indices[name];
+				$.each(indexObject.shards, function(name, shard) {
+					shard.forEach(function(replica){
+						var node = replica.node;
+						if(node === null) { node = "Unassigned"; }
+						var index = replica.index;
+						var shard = replica.shard;
+						var routings = nodes[getIndexForNode(node)].routings;
+						var indexIndex = getIndexForIndex(routings, index);
+						var replicas = routings[indexIndex].replicas;
+						if(node === "Unassigned" || !indexObject.shards[shard]) {
+							replicas.push({ replica: replica });
+						} else {
+							replicas[shard] = {
+								replica: replica,
+								status: indexObject.shards[shard].filter(function(replica) {
+									return replica.node === node;
+								})[0]
+							};
+						}
+					});
+				});
+			});
+			indices = indices.map(function(index){
+				return {
+					name: index,
+					state: "open",
+					metadata: clusterState.metadata.indices[index],
+					status: status.indices[index]
+				};
+			}, this);
+			$.each(clusterState.metadata.indices, function(name, index) {
+				if(index.state === "close" && indexFilter( name )) {
+					indices.push({
+						name: name,
+						state: "close",
+						metadata: index,
+						status: null
+					});
+				}
+			});
+			nodes.forEach(function(node) {
+				node.stats = nodeStats.nodes[node.name];
+				var cluster = clusterNodes.nodes[node.name];
+				node.cluster = cluster || { name: "<unknown>" };
+				node.data_node = !( cluster && cluster.attributes && cluster.attributes.data === "false" );
+				for(var i = 0; i < indices.length; i++) {
+					node.routings[i] = node.routings[i] || { name: indices[i].name, replicas: [] };
+					node.routings[i].max_number_of_shards = indices[i].metadata.settings["index.number_of_shards"];
+					node.routings[i].open = indices[i].state === "open";
+				}
+			});
+			var aliasesIndex = {};
+			var aliases = [];
+			var indexClone = indices.map(function() { return false; });
+			$.each(clusterState.metadata.indices, function(name, index) {
+				index.aliases.forEach(function(alias) {
+					var aliasIndex = aliasesIndex[alias] = (alias in aliasesIndex) ? aliasesIndex[alias] : aliases.push( { name: alias, max: -1, min: 999, indices: [].concat(indexClone) }) - 1;
+					var indexIndex = indexIndices[name];
+					var aliasRow = aliases[aliasIndex];
+					aliasRow.min = Math.min(aliasRow.min, indexIndex);
+					aliasRow.max = Math.max(aliasRow.max, indexIndex);
+					aliasRow.indices[indexIndex] = indices[indexIndex];
+				});
+			});
+			cluster.aliases = aliases;
+			cluster.nodes = nodes
+				.filter( nodeFilter_none )
+				.sort( this._nodeSort );
+			indices.unshift({ name: null });
+			this._drawNodesView( cluster, indices );
+			this._refreshButton.enable();
+		},
+		_drawNodesView: function( cluster, indices ) {
+			this._nodesView && this._nodesView.remove();
+			this._nodesView = new ui.NodesView({
+				onRedraw: function() {
+					this.refresh();
+				}.bind(this),
+				interactive: ( this._refreshButton.value === -1 ),
+				aliasRenderer: this._aliasRenderer,
+				cluster: this.cluster,
+				data: {
+					cluster: cluster,
+					indices: indices
+				}
+			});
+			this._nodesView.attach( this.tablEl );
+		},
+		_main_template: function() {
+			return { tag: "DIV", id: this.id(), cls: "uiClusterOverview", children: [
+				new ui.Toolbar({
+					label: i18n.text("Overview.PageTitle"),
+					left: [
+						this._nodeSortMenu,
+						this._indicesSortMenu,
+						this._aliasMenu,
+						this._indexFilter
+					],
+					right: [
+						this._refreshButton
+					]
+				}),
+				{ tag: "DIV", cls: "uiClusterOverview-table" }
+			] };
+		}
+	});
+
+})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/csvTable/csvTable.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/csvTable/csvTable.js
new file mode 100644
index 0000000..2daaf5c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/csvTable/csvTable.js
@@ -0,0 +1,84 @@
+( function( $, app, joey ) {
+
+	var ui = app.ns("ui");
+
+	var CELL_SEPARATOR = ",";
+	var CELL_QUOTE = '"';
+	var LINE_SEPARATOR = "\r\n";
+
+	ui.CSVTable = ui.AbstractWidget.extend({
+		defaults: {
+			results: null
+		},
+		_baseCls: "uiCSVTable",
+		init: function( parent ) {
+			this._super();
+			var results = this.config.results.hits.hits;
+			var columns = this._parseResults( results );
+			this._downloadButton = new ui.Button({
+				label: "Generate Download Link",
+				onclick: this._downloadLinkGenerator_handler
+			});
+			this._downloadLink = $.joey( { tag: "A", text: "download", });
+			this._downloadLink.hide();
+			this._csvText = this._csv_template( columns, results );
+			this.el = $.joey( this._main_template() );
+			this.attach( parent );
+		},
+		_downloadLinkGenerator_handler: function() {
+			var csvData = new Blob( [ this._csvText ], { type: 'text/csv' });
+			var csvURL = URL.createObjectURL( csvData );
+			this._downloadLink.attr( "href", csvURL );
+			this._downloadLink.show();
+		},
+		_parseResults: function( results ) {
+			var columnPaths = {};
+			(function parse( path, obj ) {
+				if( obj instanceof Array ) {
+					for( var i = 0; i < obj.length; i++ ) {
+						parse( path, obj[i] );
+					}
+				} else if( typeof obj === "object" ) {
+					for( var prop in obj ) {
+						parse( path + "." + prop, obj[ prop ] );
+					}
+				} else {
+					columnPaths[ path ] = true;
+				}
+			})( "root", results );
+			var columns = [];
+			for( var column in columnPaths ) {
+				columns.push( column.split(".").slice(1) );
+			}
+			return columns;
+		},
+		_main_template: function() { return (
+			{ tag: "DIV", cls: this._baseCls, id: this.id(), children: [
+				this._downloadButton,
+				this._downloadLink,
+				{ tag: "PRE", text: this._csvText }
+			] }
+		); },
+		_csv_template: function( columns, results ) {
+			return this._header_template( columns ) + LINE_SEPARATOR + this._results_template( columns, results );
+		},
+		_header_template: function( columns ) {
+			return columns.map( function( column ) {
+				return column.join(".");
+			}).join( CELL_SEPARATOR );
+		},
+		_results_template: function( columns, results ) {
+			return results.map( function( result ) {
+				return columns.map( function( column ) {
+					var l = 0,
+						ptr = result;
+					while( l !== column.length && ptr != null ) {
+						ptr = ptr[ column[ l++ ] ];
+					}
+					return ( ptr == null ) ? "" : ( CELL_QUOTE + ptr.toString().replace(/"/g, '""') + CELL_QUOTE );
+				}).join( CELL_SEPARATOR );
+			}).join( LINE_SEPARATOR );
+		}
+	});
+
+})( this.jQuery, this.app, this.joey );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/dateHistogram/dateHistogram.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/dateHistogram/dateHistogram.js
new file mode 100644
index 0000000..7c750b6
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/dateHistogram/dateHistogram.js
@@ -0,0 +1,104 @@
+(function( app, i18n, raphael ) {
+
+	var ui = app.ns("ui");
+
+	ui.DateHistogram = ui.AbstractWidget.extend({
+		defaults: {
+			printEl: null, // (optional) if supplied, clicking on elements in the histogram changes the query
+			cluster: null, // (required)
+			query: null,   // (required) the current query
+			spec: null     // (required) // date field spec
+		},
+		init: function() {
+			this._super();
+			this.el = $(this._main_template());
+			this.query = this.config.query.clone();
+			// check if the index/types have changed and rebuild the histogram
+			this.config.query.on("results", function(query) {
+				if(this.queryChanged) {
+					this.buildHistogram(query);
+					this.queryChanged = false;
+				}
+			}.bind(this));
+			this.config.query.on("setIndex", function(query, params) {
+				this.query.setIndex(params.index, params.add);
+				this.queryChanged = true;
+			}.bind(this));
+			this.config.query.on("setType", function(query, params) {
+				this.query.setType(params.type, params.add);
+				this.queryChanged = true;
+			}.bind(this));
+			this.query.search.size = 0;
+			this.query.on("results", this._stat_handler);
+			this.query.on("results", this._aggs_handler);
+			this.buildHistogram();
+		},
+		buildHistogram: function(query) {
+			this.statAggs = this.query.addAggs({
+				stats: { field: this.config.spec.field_name }
+			});
+			this.query.query();
+			this.query.removeAggs(this.statAggs);
+		},
+		_stat_handler: function(query, results) {
+			if(! results.aggregations[this.statAggs]) { return; }
+			this.stats = results.aggregations[this.statAggs];
+			// here we are calculating the approximate range  that will give us less than 121 columns
+			var rangeNames = [ "year", "year", "month", "day", "hour", "minute" ];
+			var rangeFactors = [100000, 12, 30, 24, 60, 60000 ];
+			this.intervalRange = 1;
+			var range = this.stats.max - this.stats.min;
+			do {
+				this.intervalName = rangeNames.pop();
+				var factor = rangeFactors.pop();
+				this.intervalRange *= factor;
+				range = range / factor;
+			} while(range > 70);
+			this.dateAggs = this.query.addAggs({
+				date_histogram : {
+					field: this.config.spec.field_name,
+					interval: this.intervalName
+				}
+			});
+			this.query.query();
+			this.query.removeAggs(this.dateAggs);
+		},
+		_aggs_handler: function(query, results) {
+			if(! results.aggregations[this.dateAggs]) { return; }
+			var buckets = [], range = this.intervalRange;
+			var min = Math.floor(this.stats.min / range) * range;
+			var prec = [ "year", "month", "day", "hour", "minute", "second" ].indexOf(this.intervalName);
+			results.aggregations[this.dateAggs].buckets.forEach(function(entry) {
+				buckets[parseInt((entry.key - min) / range , 10)] = entry.doc_count;
+			}, this);
+			for(var i = 0; i < buckets.length; i++) {
+				buckets[i] = buckets[i] || 0;
+			}
+			this.el.removeClass("loading");
+			var el = this.el.empty();
+			var w = el.width(), h = el.height();
+			var r = raphael(el[0], w, h );
+			var printEl = this.config.printEl;
+			query = this.config.query;
+			r.g.barchart(0, 0, w, h, [buckets], { gutter: "0", vgutter: 0 }).hover(
+				function() {
+					this.flag = r.g.popup(this.bar.x, h - 5, this.value || "0").insertBefore(this);
+				}, function() {
+					this.flag.animate({opacity: 0}, 200, ">", function () {this.remove();});
+				}
+			).click(function() {
+				if(printEl) {
+					printEl.val(window.dateRangeParser.print(min + this.bar.index * range, prec));
+					printEl.trigger("keyup");
+					query.query();
+				}
+			});
+		},
+		_main_template: function() { return (
+			{ tag: "DIV", cls: "uiDateHistogram loading", css: { height: "50px" }, children: [
+				i18n.text("General.LoadingAggs")
+			] }
+		); }
+	});
+
+})( this.app, this.i18n, this.Raphael );
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/dialogPanel/dialogPanel.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/dialogPanel/dialogPanel.js
new file mode 100644
index 0000000..80176fd
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/dialogPanel/dialogPanel.js
@@ -0,0 +1,22 @@
+(function( app ) {
+
+	var ui = app.ns("ui");
+
+	ui.DialogPanel = ui.DraggablePanel.extend({
+		_commit_handler: function(jEv) {
+			this.fire("commit", this, { jEv: jEv });
+		},
+		_main_template: function() {
+			var t = this._super();
+			t.children.push(this._actionsBar_template());
+			return t;
+		},
+		_actionsBar_template: function() {
+			return { tag: "DIV", cls: "pull-right", children: [
+				new app.ui.Button({ label: "Cancel", onclick: this._close_handler }),
+				new app.ui.Button({ label: "OK", onclick: this._commit_handler })
+			]};
+		}
+	});
+
+})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/draggablePanel/draggablePanel.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/draggablePanel/draggablePanel.js
new file mode 100644
index 0000000..ee0a98a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/draggablePanel/draggablePanel.js
@@ -0,0 +1,42 @@
+(function( $, app ) {
+
+	var ui = app.ns("ui");
+
+	ui.DraggablePanel = ui.AbstractPanel.extend({
+		defaults: {
+	//		title: ""   // (required) text for the panel title
+		},
+
+		_baseCls: "uiPanel",
+
+		init: function() {
+			this._super();
+			this.body = $(this._body_template());
+			this.title = $(this._title_template());
+			this.el = $.joey( this._main_template() );
+			this.el.css( { width: this.config.width } );
+			this.dd = new app.ux.DragDrop({
+				pickupSelector: this.el.find(".uiPanel-titleBar"),
+				dragObj: this.el
+			});
+			// open the panel if set in configuration
+			this.config.open && this.open();
+		},
+
+		setBody: function(body) {
+				this.body.empty().append(body);
+		},
+		_body_template: function() { return { tag: "DIV", cls: "uiPanel-body", css: { height: this.config.height + (this.config.height === 'auto' ? "" : "px" ) }, children: [ this.config.body ] }; },
+		_title_template: function() { return { tag: "SPAN", cls: "uiPanel-title", text: this.config.title }; },
+		_main_template: function() { return (
+			{ tag: "DIV", id: this.id(), cls: this._baseCls, children: [
+				{ tag: "DIV", cls: "uiPanel-titleBar", children: [
+					{ tag: "DIV", cls: "uiPanel-close", onclick: this._close_handler, text: "x" },
+					this.title
+				]},
+				this.body
+			] }
+		); }
+	});
+
+})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.css
new file mode 100644
index 0000000..d9acccf
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.css
@@ -0,0 +1,9 @@
+.uiFilterBrowser-row * {
+	margin-right: 0.4em;
+}
+
+.uiFilterBrowser-row BUTTON {
+	height: 22px;
+	position: relative;
+	top: 1px;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.js
new file mode 100644
index 0000000..ca03154
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.js
@@ -0,0 +1,205 @@
+(function( $, app, i18n ) {
+
+	var ui = app.ns("ui");
+	var data = app.ns("data");
+	var ut = app.ns("ut");
+
+	ui.FilterBrowser = ui.AbstractWidget.extend({
+		defaults: {
+			cluster: null,  // (required) instanceof app.services.Cluster
+			index: "" // (required) name of the index to query
+		},
+
+		init: function(parent) {
+			this._super();
+			this._cluster = this.config.cluster;
+			this.el = $(this._main_template());
+			this.filtersEl = this.el.find(".uiFilterBrowser-filters");
+			this.attach( parent );
+			new data.MetaDataFactory({ cluster: this._cluster, onReady: function(metadata, eventData) {
+				this.metadata = metadata;
+				this._createFilters_handler(eventData.originalData.metadata.indices);
+			}.bind(this) });
+		},
+
+		_createFilters_handler: function(data) {
+			var filters = [];
+			function scan_properties(path, obj) {
+				if (obj.properties) {
+					for (var prop in obj.properties) {
+						scan_properties(path.concat(prop), obj.properties[prop]);
+					}
+				} else {
+					// handle multi_field 
+					if (obj.fields) {
+						for (var subField in obj.fields) {
+							filters.push({ path: (path[path.length - 1] !== subField) ? path.concat(subField) : path, type: obj.fields[subField].type, meta: obj.fields[subField] });
+						}
+					} else {
+						filters.push({ path: path, type: obj.type, meta: obj });
+					}
+				}
+			}
+			for(var type in data[this.config.index].mappings) {
+				scan_properties([type], data[this.config.index].mappings[type]);
+			}
+
+			filters.sort( function(a, b) {
+				var x = a.path.join(".");
+				var y = b.path.join(".");
+				return (x < y) ? -1 : (x > y) ? 1 : 0;
+			});
+
+			this.filters = [
+				{ path: ["match_all"], type: "match_all", meta: {} },
+				{ path: ["_all"], type: "_all", meta: {}}
+			].concat(filters);
+
+			this._addFilterRow_handler();
+		},
+		
+		_addFilterRow_handler: function() {
+			this.filtersEl.append(this._filter_template());
+		},
+		
+		_removeFilterRow_handler: function(jEv) {
+			$(jEv.target).closest("DIV.uiFilterBrowser-row").remove();
+			if(this.filtersEl.children().length === 0) {
+				this._addFilterRow_handler();
+			}
+		},
+		
+		_search_handler: function() {
+			var search = new data.BoolQuery();
+			search.setSize( this.el.find(".uiFilterBrowser-outputSize").val() )
+			this.fire("startingSearch");
+			this.filtersEl.find(".uiFilterBrowser-row").each(function(i, row) {
+				row = $(row);
+				var bool = row.find(".bool").val();
+				var field = row.find(".field").val();
+				var op = row.find(".op").val();
+				var value = {};
+				if(field === "match_all") {
+					op = "match_all";
+				} else if(op === "range") {
+					var lowqual = row.find(".lowqual").val(),
+						highqual = row.find(".highqual").val();
+					if(lowqual.length) {
+						value[row.find(".lowop").val()] = lowqual;
+					}
+					if(highqual.length) {
+						value[row.find(".highop").val()] = highqual;
+					}
+				} else if(op === "fuzzy") {
+					var qual = row.find(".qual").val(),
+						fuzzyqual = row.find(".fuzzyqual").val();
+					if(qual.length) {
+						value["value"] = qual;
+					}
+					if(fuzzyqual.length) {
+						value[row.find(".fuzzyop").val()] = fuzzyqual;
+					}
+				} else {
+					value = row.find(".qual").val();
+				}
+				search.addClause(value, field, op, bool);
+			});
+			if(this.el.find(".uiFilterBrowser-showSrc").attr("checked")) {
+				this.fire("searchSource", search.search);
+			}
+			this._cluster.post( this.config.index + "/_search", search.getData(), this._results_handler );
+		},
+		
+		_results_handler: function( data ) {
+			var type = this.el.find(".uiFilterBrowser-outputFormat").val();
+			this.fire("results", this, { type: type, data: data, metadata: this.metadata });
+		},
+		
+		_changeQueryField_handler: function(jEv) {
+			var select = $(jEv.target);
+			var spec = select.children(":selected").data("spec");
+			select.siblings().remove(".op,.qual,.range,.fuzzy");
+			var ops = [];
+			if(spec.type === 'match_all') {
+			} else if(spec.type === '_all') {
+				ops = ["query_string"];
+			} else if(spec.type === 'string' || spec.type === 'text' || spec.type === 'keyword') {
+				ops = ["term", "wildcard", "prefix", "fuzzy", "range", "query_string", "text", "missing"];
+			} else if(spec.type === 'long' || spec.type === 'integer' || spec.type === 'float' ||
+					spec.type === 'byte' || spec.type === 'short' || spec.type === 'double') {
+				ops = ["term", "range", "fuzzy", "query_string", "missing"];
+			} else if(spec.type === 'date') {
+				ops = ["term", "range", "fuzzy", "query_string", "missing"];
+			} else if(spec.type === 'geo_point') {
+				ops = ["missing"];
+			} else if(spec.type === 'ip') {
+				ops = ["term", "range", "fuzzy", "query_string", "missing"];
+			} else if(spec.type === 'boolean') {
+				ops = ["term"]
+			}
+			select.after({ tag: "SELECT", cls: "op", onchange: this._changeQueryOp_handler, children: ops.map(ut.option_template) });
+			select.next().change();
+		},
+		
+		_changeQueryOp_handler: function(jEv) {
+			var op = $(jEv.target), opv = op.val();
+			op.siblings().remove(".qual,.range,.fuzzy");
+			if(opv === 'term' || opv === 'wildcard' || opv === 'prefix' || opv === "query_string" || opv === 'text') {
+				op.after({ tag: "INPUT", cls: "qual", type: "text" });
+			} else if(opv === 'range') {
+				op.after(this._range_template());
+			} else if(opv === 'fuzzy') {
+				op.after(this._fuzzy_template());
+			}
+		},
+		
+		_main_template: function() {
+			return { tag: "DIV", children: [
+				{ tag: "DIV", cls: "uiFilterBrowser-filters" },
+				{ tag: "BUTTON", type: "button", text: i18n.text("General.Search"), onclick: this._search_handler },
+				{ tag: "LABEL", children:
+					i18n.complex("FilterBrowser.OutputType", { tag: "SELECT", cls: "uiFilterBrowser-outputFormat", children: [
+						{ text: i18n.text("Output.Table"), value: "table" },
+						{ text: i18n.text("Output.JSON"), value: "json" },
+						{ text: i18n.text("Output.CSV"), value: "csv" }
+					].map(function( o ) { return $.extend({ tag: "OPTION" }, o ); } ) } )
+				},
+				{ tag: "LABEL", children:
+					i18n.complex("FilterBrowser.OutputSize", { tag: "SELECT", cls: "uiFilterBrowser-outputSize",
+						children: [ "10", "50", "250", "1000", "5000", "25000" ].map( ut.option_template )
+					} )
+				},
+				{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", cls: "uiFilterBrowser-showSrc" }, i18n.text("Output.ShowSource") ] }
+			]};
+		},
+		
+		_filter_template: function() {
+			return { tag: "DIV", cls: "uiFilterBrowser-row", children: [
+				{ tag: "SELECT", cls: "bool", children: ["must", "must_not", "should"].map(ut.option_template) },
+				{ tag: "SELECT", cls: "field", onchange: this._changeQueryField_handler, children: this.filters.map(function(f) {
+					return { tag: "OPTION", data: { spec: f }, value: f.path.join("."), text: f.path.join(".") };
+				})},
+				{ tag: "BUTTON", type: "button", text: "+", onclick: this._addFilterRow_handler },
+				{ tag: "BUTTON", type: "button", text: "-", onclick: this._removeFilterRow_handler }
+			]};
+		},
+		
+		_range_template: function() {
+			return { tag: "SPAN", cls: "range", children: [
+				{ tag: "SELECT", cls: "lowop", children: ["gt", "gte"].map(ut.option_template) },
+				{ tag: "INPUT", type: "text", cls: "lowqual" },
+				{ tag: "SELECT", cls: "highop", children: ["lt", "lte"].map(ut.option_template) },
+				{ tag: "INPUT", type: "text", cls: "highqual" }
+			]};
+		},
+
+		_fuzzy_template: function() {
+			return { tag: "SPAN", cls: "fuzzy", children: [
+				{ tag: "INPUT", cls: "qual", type: "text" },
+				{ tag: "SELECT", cls: "fuzzyop", children: ["max_expansions", "min_similarity"].map(ut.option_template) },
+				{ tag: "INPUT", cls: "fuzzyqual", type: "text" }
+			]};
+		}
+	});
+	
+})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/header/header.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/header/header.css
new file mode 100644
index 0000000..b61badf
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/header/header.css
@@ -0,0 +1,10 @@
+.uiHeader {
+	padding: 3px 10px;
+}
+
+.uiHeader-name, .uiHeader-status {
+	font-size: 1.2em;
+	font-weight: bold;
+	padding: 0 10px;
+}
+
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/header/header.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/header/header.js
new file mode 100644
index 0000000..a6e1155
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/header/header.js
@@ -0,0 +1,73 @@
+(function( $, app, i18n ) {
+
+	var ui = app.ns("ui");
+
+	ui.Header = ui.AbstractWidget.extend({
+		defaults: {
+			cluster: null,
+			clusterState: null
+		},
+		_baseCls: "uiHeader",
+		init: function() {
+			this._clusterConnect = new ui.ClusterConnect({
+				cluster: this.config.cluster
+			});
+			var quicks = [
+				{ text: i18n.text("Nav.Info"), path: "" },
+				{ text: i18n.text("Nav.Status"), path: "_stats" },
+				{ text: i18n.text("Nav.NodeStats"), path: "_nodes/stats" },
+				{ text: i18n.text("Nav.ClusterNodes"), path: "_nodes" },
+				{ text: i18n.text("Nav.Plugins"), path: "_nodes/plugins" },
+				{ text: i18n.text("Nav.ClusterState"), path: "_cluster/state" },
+				{ text: i18n.text("Nav.ClusterHealth"), path: "_cluster/health" },
+				{ text: i18n.text("Nav.Templates"), path: "_template" }
+			];
+			var cluster = this.config.cluster;
+			var quickPanels = {};
+			var menuItems = quicks.map( function( item ) {
+				return { text: item.text, onclick: function() {
+					cluster.get( item.path, function( data ) {
+						quickPanels[ item.path ] && quickPanels[ item.path ].el && quickPanels[ item.path ].remove();
+						quickPanels[ item.path ] = new ui.JsonPanel({
+							title: item.text,
+							json: data
+						});
+					} );
+				} };
+			}, this );
+			this._quickMenu = new ui.MenuButton({
+				label: i18n.text("NodeInfoMenu.Title"),
+				menu: new ui.MenuPanel({
+					items: menuItems
+				})
+			});
+			this.el = $.joey( this._main_template() );
+			this.nameEl = this.el.find(".uiHeader-name");
+			this.statEl = this.el.find(".uiHeader-status");
+			this._clusterState = this.config.clusterState;
+			this._clusterState.on("data", function( state ) {
+				var shards = state.status._shards;
+				var colour = state.clusterHealth.status;
+				var name = state.clusterState.cluster_name;
+				this.nameEl.text( name );
+				this.statEl
+					.text( i18n.text("Header.ClusterHealth", colour, shards.successful, shards.total ) )
+					.css( "background", colour );
+			}.bind(this));
+			this.statEl.text( i18n.text("Header.ClusterNotConnected") ).css("background", "grey");
+			this._clusterState.refresh();
+		},
+		_main_template: function() { return (
+			{ tag: "DIV", cls: this._baseCls, children: [
+				this._clusterConnect,
+				{ tag: "SPAN", cls: "uiHeader-name" },
+				{ tag: "SPAN", cls: "uiHeader-status" },
+				{ tag: "H1", text: i18n.text("General.Elasticsearch") },
+				{ tag: "SPAN", cls: "pull-right", children: [
+					this._quickMenu
+				] }
+			] }
+		); }
+	} );
+
+})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/helpPanel/helpPanel.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/helpPanel/helpPanel.js
new file mode 100644
index 0000000..a76be2d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/helpPanel/helpPanel.js
@@ -0,0 +1,21 @@
+(function( app ){
+
+	var ui = app.ns("ui");
+
+	ui.HelpPanel = ui.InfoPanel.extend({
+		defaults: {
+			ref: "",
+			open: true,
+			autoRemove: true,
+			modal: false,
+			width: 500,
+			height: 450,
+			title: i18n.text("General.Help")
+		},
+		init: function() {
+			this._super();
+			this.body.append(i18n.text(this.config.ref));
+		}
+	});
+
+})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/indexOverview/indexOverview.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/indexOverview/indexOverview.js
new file mode 100644
index 0000000..3eab4f5
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/indexOverview/indexOverview.js
@@ -0,0 +1,115 @@
+(function( $, app, i18n ) {
+	
+	var ui = app.ns("ui");
+	var ut = app.ns("ut");
+
+	ui.IndexOverview = ui.Page.extend({
+		defaults: {
+			cluster: null
+		},
+		init: function() {
+			this._super();
+			this.cluster = this.config.cluster;
+			this._clusterState = this.config.clusterState;
+			this._clusterState.on("data", this._refresh_handler );
+			this.el = $(this._main_template());
+			this._refresh_handler();
+		},
+		remove: function() {
+			this._clusterState.removeObserver( "data", this._refresh_handler );
+		},
+		_refresh_handler: function() {
+			var state = this._clusterState;
+			var view = {
+				indices: acx.eachMap( state.status.indices, function( name, index ) {
+					return {
+						name: name,
+						state: index
+					};
+				}).sort( function( a, b ) {
+					return a.name < b.name ? -1 : 1;
+				})
+			};
+			this._indexViewEl && this._indexViewEl.remove();
+			this._indexViewEl = $( this._indexTable_template( view ) );
+			this.el.find(".uiIndexOverview-table").append( this._indexViewEl );
+		},
+		_newIndex_handler: function() {
+			var fields = new app.ux.FieldCollection({
+				fields: [
+					new ui.TextField({ label: i18n.text("ClusterOverView.IndexName"), name: "_name", require: true }),
+					new ui.TextField({
+						label: i18n.text("ClusterOverview.NumShards"),
+						name: "number_of_shards",
+						value: "5",
+						require: function( val ) { return parseInt( val, 10 ) >= 1; }
+					}),
+					new ui.TextField({
+						label: i18n.text("ClusterOverview.NumReplicas"),
+						name: "number_of_replicas",
+						value: "1",
+						require: function( val ) { return parseInt( val, 10 ) >= 0; }
+					})
+				]
+			});
+			var dialog = new ui.DialogPanel({
+				title: i18n.text("ClusterOverview.NewIndex"),
+				body: new ui.PanelForm({ fields: fields }),
+				onCommit: function(panel, args) {
+					if(fields.validate()) {
+						var data = fields.getData();
+						var name = data["_name"];
+						delete data["_name"];
+						this.config.cluster.put( encodeURIComponent( name ), JSON.stringify({ settings: { index: data } }), function(d) {
+							dialog.close();
+							alert(JSON.stringify(d));
+							this._clusterState.refresh();
+						}.bind(this) );
+					}
+				}.bind(this)
+			}).open();
+		},
+		_indexTable_template: function( view ) { return (
+			{ tag: "TABLE", cls: "table", children: [
+				{ tag: "THEAD", children: [
+					{ tag: "TR", children: [
+						{ tag: "TH" },
+						{ tag: "TH", children: [
+							{ tag: "H3", text: "Size" }
+						] },
+						{ tag: "TH", children: [
+							{ tag: "H3", text: "Docs" }
+						] }
+					] }
+				] },
+				{ tag: "TBODY", cls: "striped", children: view.indices.map( this._index_template, this ) }
+			] }
+		); },
+
+		_index_template: function( index ) { return (
+			{ tag: "TR", children: [
+				{ tag: "TD", children: [
+					{ tag: "H3", text: index.name }
+				] },
+				{ tag: "TD", text: ut.byteSize_template( index.state.primaries.store.size_in_bytes ) + "/" + ut.byteSize_template( index.state.total.store.size_in_bytes ) },
+				{ tag: "TD", text: ut.count_template( index.state.primaries.docs.count ) }
+			] }
+		); },
+		_main_template: function() {
+			return { tag: "DIV", id: this.id(), cls: "uiIndexOverview", children: [
+				new ui.Toolbar({
+					label: i18n.text("IndexOverview.PageTitle"),
+					left: [
+						new ui.Button({
+							label: i18n.text("ClusterOverview.NewIndex"),
+							onclick: this._newIndex_handler
+						}),
+					]
+				}),
+				{ tag: "DIV", cls: "uiIndexOverview-table", children: this._indexViewEl }
+			] };
+		}
+
+	});
+
+})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/indexSelector/indexSelector.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/indexSelector/indexSelector.js
new file mode 100644
index 0000000..7f51d5f
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/indexSelector/indexSelector.js
@@ -0,0 +1,45 @@
+(function( $, app, i18n ) {
+
+	var ui = app.ns("ui");
+
+	ui.IndexSelector = ui.AbstractWidget.extend({
+		init: function(parent) {
+			this._super();
+			this.el = $(this._main_template());
+			this.attach( parent );
+			this.cluster = this.config.cluster;
+			this.update();
+		},
+		update: function() {
+			this.cluster.get( "_stats", this._update_handler );
+		},
+		
+		_update_handler: function(data) {
+			var options = [];
+			var index_names = Object.keys(data.indices).sort();
+			for(var i=0; i < index_names.length; i++) { 
+				name = index_names[i];
+				options.push(this._option_template(name, data.indices[name])); 
+			}
+			this.el.find(".uiIndexSelector-select").empty().append(this._select_template(options));
+			this._indexChanged_handler();
+		},
+		
+		_main_template: function() {
+			return { tag: "DIV", cls: "uiIndexSelector", children: i18n.complex( "IndexSelector.SearchIndexForDocs", { tag: "SPAN", cls: "uiIndexSelector-select" } ) };
+		},
+
+		_indexChanged_handler: function() {
+			this.fire("indexChanged", this.el.find("SELECT").val());
+		},
+
+		_select_template: function(options) {
+			return { tag: "SELECT", children: options, onChange: this._indexChanged_handler };
+		},
+		
+		_option_template: function(name, index) {
+			return  { tag: "OPTION", value: name, text: i18n.text("IndexSelector.NameWithDocs", name, index.primaries.docs.count ) };
+		}
+	});
+
+})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.css
new file mode 100644
index 0000000..7d4a86c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.css
@@ -0,0 +1,38 @@
+
+.uiInfoPanel {
+	background: rgba(0, 0, 0, 0.75);
+	color: white;
+	border-radius: 8px;
+	padding: 1px;
+}
+.uiInfoPanel .uiPanel-titleBar {
+	background: rgba(74, 74, 74, 0.75);
+	background: -moz-linear-gradient(top, rgba(84, 84, 84, 0.75), rgba(54, 54, 54, 0.75), rgba(64, 64, 64, 0.75));
+	background: -webkit-linear-gradient(top, rgba(84, 84, 84, 0.75), rgba(54, 54, 54, 0.75), rgba(64, 64, 64, 0.75));
+	border-radius: 8px 8px 0 0;
+	padding: 1px 0 2px 0;
+	border-bottom: 0;
+}
+.uiInfoPanel .uiPanel-close {
+	border-radius: 6px;
+	height: 13px;
+	width: 13px;
+	background: #ccc;
+	left: 3px;
+	top: 1px;
+	color: #333;
+	text-shadow: #222 0 0 1px;
+	line-height: 11px;
+	border: 0;
+	padding: 0;
+}
+.uiInfoPanel .uiPanel-close:hover {
+	background: #eee;
+}
+
+.uiInfoPanel .uiPanel-body {
+	background: transparent;
+	padding: 20px;
+	border-radius: 0 0 8px 8px;
+	border: 1px solid #222;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.js
new file mode 100644
index 0000000..db24400
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.js
@@ -0,0 +1,9 @@
+(function( app ) {
+
+	var ui = app.ns("ui");
+
+	ui.InfoPanel = ui.DraggablePanel.extend({
+		_baseCls: "uiPanel uiInfoPanel"
+	});
+
+})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.css
new file mode 100644
index 0000000..20aff88
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.css
@@ -0,0 +1,4 @@
+.uiJsonPanel SPAN.uiJsonPretty-string { color: #6F6; }
+.uiJsonPanel SPAN.uiJsonPretty-number { color: #66F; }
+.uiJsonPanel SPAN.uiJsonPretty-null { color: #F66; }
+.uiJsonPanel SPAN.uiJsonPretty-boolean { color: #F6F; }
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.js
new file mode 100644
index 0000000..4e83baa
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.js
@@ -0,0 +1,24 @@
+(function( app ) {
+
+	var ui = app.ns("ui");
+
+	ui.JsonPanel = ui.InfoPanel.extend({
+		defaults: {
+			json: null, // (required)
+			modal: false,
+			open: true,
+			autoRemove: true,
+			height: 500,
+			width: 600
+		},
+
+		_baseCls: "uiPanel uiInfoPanel uiJsonPanel",
+
+		_body_template: function() {
+			var body = this._super();
+			body.children = [ new ui.JsonPretty({ obj: this.config.json }) ];
+			return body;
+		}
+	});
+
+})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.css
new file mode 100644
index 0000000..7a1a0ba
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.css
@@ -0,0 +1,22 @@
+DIV.uiJsonPretty-object { font-size: 1.26em; font-family: monospace; }
+UL.uiJsonPretty-object,
+UL.uiJsonPretty-array { margin: 0; padding: 0 0 0 2em; list-style: none; }
+UL.uiJsonPretty-object LI,
+UL.uiJsonPretty-array LI { padding: 0; margin: 0; }
+.expando > SPAN.uiJsonPretty-name:before { content: "\25bc\a0"; color: #555; position: relative; top: 2px; }
+.expando.uiJsonPretty-minimised > SPAN.uiJsonPretty-name:before { content: "\25ba\a0"; top: 0; }
+.uiJsonPretty-minimised > UL SPAN.uiJsonPretty-name:before,
+.expando .uiJsonPretty-minimised > UL SPAN.uiJsonPretty-name:before { content: ""; }
+SPAN.uiJsonPretty-string,
+SPAN.uiJsonPretty-string A { color: green; }
+SPAN.uiJsonPretty-string A { text-decoration: underline;}
+SPAN.uiJsonPretty-number { color: blue; }
+SPAN.uiJsonPretty-null { color: red; }
+SPAN.uiJsonPretty-boolean { color: purple; }
+.expando > .uiJsonPretty-name { cursor: pointer; }
+.expando > .uiJsonPretty-name:hover { text-decoration: underline; }
+.uiJsonPretty-minimised { white-space: nowrap; overflow: hidden; }
+.uiJsonPretty-minimised > UL { opacity: 0.6; }
+.uiJsonPretty-minimised .uiJsonPretty-minimised > UL { opacity: 1; }
+.uiJsonPretty-minimised UL, .uiJsonPretty-minimised LI { display: inline; padding: 0; }
+
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.js
new file mode 100644
index 0000000..76820bb
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.js
@@ -0,0 +1,89 @@
+(function( $, app ) {
+
+	var ui = app.ns("ui");
+
+	ui.JsonPretty = ui.AbstractWidget.extend({
+		defaults: {
+			obj: null
+		},
+		init: function(parent) {
+			this._super();
+			this.el = $(this._main_template());
+			this.attach(parent);
+			this.el.click(this._click_handler);
+		},
+		
+		_click_handler: function(jEv) {
+			var t = $(jEv.target).closest(".uiJsonPretty-name").closest("LI");
+			if(t.length === 0 || t.parents(".uiJsonPretty-minimised").length > 0) { return; }
+			t.toggleClass("uiJsonPretty-minimised");
+			jEv.stopPropagation();
+		},
+		
+		_main_template: function() {
+			try {
+					return { tag: "DIV", cls: "uiJsonPretty", children: this.pretty.parse(this.config.obj) };
+			}	catch (error) {
+					throw "JsonPretty error: " + error.message;
+			}
+		},
+		
+		pretty: { // from https://github.com/RyanAmos/Pretty-JSON/blob/master/pretty_json.js
+			"expando" : function(value) {
+				return (value && (/array|object/i).test(value.constructor.name)) ? "expando" : "";
+			},
+			"parse": function (member) {
+				return this[(member == null) ? 'null' : member.constructor.name.toLowerCase()](member);
+			},
+			"null": function (value) {
+				return this['value']('null', 'null');
+			},
+			"array": function (value) {
+				var results = [];
+				var lastItem = value.length - 1;
+				value.forEach(function( v, i ) {
+					results.push({ tag: "LI", cls: this.expando(v), children: [ this['parse'](v) ] });
+					if( i !== lastItem ) {
+						results.push(",");
+					}
+				}, this);
+				return [ "[ ", ((results.length > 0) ? { tag: "UL", cls: "uiJsonPretty-array", children: results } : null), "]" ];
+			},
+			"object": function (value) {
+				var results = [];
+				var keys = Object.keys( value );
+				var lastItem = keys.length - 1;
+				keys.forEach( function( key, i ) {
+					var children = [ this['value']( 'name', '"' + key + '"' ), ": ", this['parse']( value[ key ]) ];
+					if( i !== lastItem ) {
+						children.push(",");
+					}
+					results.push( { tag: "LI", cls: this.expando( value[ key ] ), children: children } );
+				}, this);
+				return [ "{ ", ((results.length > 0) ? { tag: "UL", cls: "uiJsonPretty-object", children: results } : null ),  "}" ];
+			},
+			"number": function (value) {
+				return this['value']('number', value.toString());
+			},
+			"string": function (value) {
+				if (/^(http|https|file):\/\/[^\s]+$/.test(value)) {
+					return this['link']( value );
+				} else {
+					return this['value']('string', '"' + value.toString() + '"');
+				}
+			},
+			"boolean": function (value) {
+				return this['value']('boolean', value.toString());
+			},
+			"link": function( value ) {
+					return this['value']("string", { tag: "A", href: value, target: "_blank", text: '"' + value + '"' } );
+			},
+			"value": function (type, value) {
+				if (/^(http|https|file):\/\/[^\s]+$/.test(value)) {
+				}
+				return { tag: "SPAN", cls: "uiJsonPretty-" + type, text: value };
+			}
+		}
+	});
+
+})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.css
new file mode 100644
index 0000000..21c36bc
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.css
@@ -0,0 +1,11 @@
+.uiMenuButton {
+	display: inline-block;
+}
+
+.uiMenuButton .uiButton-label {
+	background-image: url('data:image/gif;base64,R0lGODlhDwAPAIABAP///////yH5BAEAAAEALAAAAAAPAA8AAAITjI+py+0P4wG0gmavq1HLD4ZiAQA7');
+	background-position: right 50%;
+	background-repeat: no-repeat;
+	padding-right: 17px;
+	text-align: left;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.js
new file mode 100644
index 0000000..aa7fc8a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.js
@@ -0,0 +1,22 @@
+(function( $, app ) {
+
+	var ui = app.ns("ui");
+
+	ui.MenuButton = app.ui.Button.extend({
+		defaults: {
+			menu: null
+		},
+		_baseCls: "uiButton uiMenuButton",
+		init: function(parent) {
+			this._super(parent);
+			this.menu = this.config.menu;
+			this.on("click", this.openMenu_handler);
+			this.menu.on("open", function() { this.el.addClass("active"); }.bind(this));
+			this.menu.on("close", function() { this.el.removeClass("active"); }.bind(this));
+		},
+		openMenu_handler: function(jEv) {
+			this.menu && this.menu.open(jEv);
+		}
+	});
+
+})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.css
new file mode 100644
index 0000000..8236a85
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.css
@@ -0,0 +1,30 @@
+.uiMenuPanel {
+	border: 1px solid #668dc6;
+	position: absolute;
+	background: #96c6eb;
+	color: white;
+}
+
+.uiMenuPanel LI {
+	list-style: none;
+	border-bottom: 1px solid #668dc6;
+}
+
+.uiMenuPanel LI:hover {
+	background: #2575b7;
+}
+
+.uiMenuPanel LI:last-child {
+	border-bottom: 0;
+} 
+
+.uiMenuPanel-label {
+	white-space: nowrap;
+	padding: 2px 10px 2px 10px;
+	cursor: pointer;
+}
+
+.disabled .uiMenuPanel-label {
+	cursor: auto;
+	color: #888;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.js
new file mode 100644
index 0000000..631ea5b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.js
@@ -0,0 +1,43 @@
+(function( app ) {
+
+	var ui = app.ns("ui");
+
+	ui.MenuPanel = ui.AbstractPanel.extend({
+		defaults: {
+			items: [],		// (required) an array of menu items
+			modal: false
+		},
+		_baseCls: "uiMenuPanel",
+		init: function() {
+			this._super();
+			this.el = $(this._main_template());
+		},
+		open: function(jEv) {
+			this._super(jEv);
+			var cx = this; setTimeout(function() { $(document).bind("click", cx._close_handler); }, 50);
+		},
+		_getItems: function() {
+			return this.config.items;
+		},
+		_close_handler: function(jEv) {
+			this._super(jEv);
+			$(document).unbind("click", this._close_handler);
+		},
+		_main_template: function() {
+			return { tag: "DIV", cls: this._baseCls, children: this._getItems().map(this._menuItem_template, this) };
+		},
+		_menuItem_template: function(item) {
+			var dx = item.disabled ? { onclick: function() {} } : {};
+			return { tag: "LI", cls: "uiMenuPanel-item" + (item.disabled ? " disabled" : "") + (item.selected ? " selected" : ""), children: [ $.extend({ tag: "DIV", cls: "uiMenuPanel-label" }, item, dx ) ] };
+		},
+		_getPosition: function(jEv) {
+			var right = !! $(jEv.target).parents(".pull-right").length;
+			var parent = $(jEv.target).closest("BUTTON");
+			return parent.vOffset()
+				.addY(parent.vSize().y)
+				.addX( right ? parent.vSize().x - this.el.vOuterSize().x : 0 )
+				.asOffset();
+		}
+	});
+
+})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.css
new file mode 100644
index 0000000..e7a7778
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.css
@@ -0,0 +1,88 @@
+.uiNodesView TH,
+.uiNodesView TD {
+	vertical-align: top;
+	padding: 2px 20px;
+}
+
+.uiNodesView TH.close,
+.uiNodesView TD.close {
+	color: #888;
+	background: #f2f2f2;
+}
+
+.uiNodesView .uiMenuButton .uiButton-content {
+	padding-right: 3px;
+	border-radius: 8px;
+	height: 14px;
+}
+
+.uiNodesView .uiMenuButton.active .uiButton-content,
+.uiNodesView .uiMenuButton:active .uiButton-content {
+	border-bottom-right-radius: 0px;
+	border-bottom-left-radius: 0px;
+}
+
+.uiNodesView .uiMenuButton .uiButton-label {
+	padding: 0px 17px 0px 7px;
+}
+
+.uiNodesView-hasAlias {
+	text-align: center;
+}
+.uiNodesView-hasAlias.max {
+	border-top-right-radius: 8px;
+	border-bottom-right-radius: 8px;
+}
+.uiNodesView-hasAlias.min {
+	border-top-left-radius: 8px;
+	border-bottom-left-radius: 8px;
+}
+.uiNodesView-hasAlias-remove {
+	float: right;
+	font-weight: bold;
+	cursor: pointer;
+}
+
+.uiNodesView TD.uiNodesView-icon {
+	padding: 20px 0px 15px 20px;
+}
+
+.uiNodesView-node:nth-child(odd) {
+	background: #eee;
+}
+
+.uiNodesView-routing {
+	position: relative;
+	min-width: 90px;
+}
+
+.uiNodesView-nullReplica,
+.uiNodesView-replica {
+	box-sizing: border-box;
+	cursor: pointer;
+	float: left;
+	height: 40px;
+	width: 35px;
+	margin: 4px;
+	border: 2px solid #444;
+	padding: 2px;
+	font-size: 32px;
+	line-height: 32px;
+	text-align: center;
+	letter-spacing: -5px;
+	text-indent: -7px;
+}
+
+.uiNodesView-replica.primary {
+	border-width: 4px;
+	line-height: 29px;
+}
+
+.uiNodesView-nullReplica {
+	border-color: transparent;
+}
+
+.uiNodesView-replica.state-UNASSIGNED { background: #eeeeee; color: #999; border-color: #666; float: none; display: inline-block; }
+.uiNodesView-replica.state-INITIALIZING { background: #dddc88; }
+.uiNodesView-replica.state-STARTED { background: #99dd88; }
+.uiNodesView-replica.state-RELOCATING { background: #dc88dd; }
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.js
new file mode 100644
index 0000000..08ce1d3
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.js
@@ -0,0 +1,277 @@
+(function( app, i18n, joey ) {
+
+	var ui = app.ns("ui");
+	var ut = app.ns("ut");
+
+	ui.NodesView = ui.AbstractWidget.extend({
+		defaults: {
+			interactive: true,
+			aliasRenderer: "list",
+			scaleReplicas: 1,
+			cluster: null,
+			data: null
+		},
+		init: function() {
+			this._super();
+			this.interactive = this.config.interactive;
+			this.cluster = this.config.cluster;
+			this._aliasRenderFunction = {
+				"none": this._aliasRender_template_none,
+				"list": this._aliasRender_template_list,
+				"full": this._aliasRender_template_full
+			}[ this.config.aliasRenderer ];
+			this._styleSheetEl = joey({ tag: "STYLE", text: ".uiNodesView-nullReplica, .uiNodesView-replica { zoom: " + this.config.scaleReplicas + " }" });
+			this.el = $( this._main_template( this.config.data.cluster, this.config.data.indices ) );
+		},
+
+		_newAliasAction_handler: function( index ) {
+			var fields = new app.ux.FieldCollection({
+				fields: [
+					new ui.TextField({ label: i18n.text("AliasForm.AliasName"), name: "alias", require: true })
+				]
+			});
+			var dialog = new ui.DialogPanel({
+				title: i18n.text("AliasForm.NewAliasForIndexName", index.name),
+				body: new ui.PanelForm({ fields: fields }),
+				onCommit: function(panel, args) {
+					if(fields.validate()) {
+						var data = fields.getData();
+						var command = {
+							"actions" : [
+								{ "add" : { "index" : index.name, "alias" : data["alias"] } }
+							]
+						};
+						this.config.cluster.post('_aliases', JSON.stringify(command), function(d) {
+							dialog.close();
+							alert(JSON.stringify(d));
+							this.fire("redraw");
+						}.bind(this) );
+					}
+				}.bind(this)
+			}).open();
+		},
+		_postIndexAction_handler: function(action, index, redraw) {
+			this.cluster.post(encodeURIComponent( index.name ) + "/" + encodeURIComponent( action ), null, function(r) {
+				alert(JSON.stringify(r));
+				redraw && this.fire("redraw");
+			}.bind(this));
+		},
+		_optimizeIndex_handler: function(index) {
+			var fields = new app.ux.FieldCollection({
+				fields: [
+					new ui.TextField({ label: i18n.text("OptimizeForm.MaxSegments"), name: "max_num_segments", value: "1", require: true }),
+					new ui.CheckField({ label: i18n.text("OptimizeForm.ExpungeDeletes"), name: "only_expunge_deletes", value: false }),
+					new ui.CheckField({ label: i18n.text("OptimizeForm.FlushAfter"), name: "flush", value: true }),
+					new ui.CheckField({ label: i18n.text("OptimizeForm.WaitForMerge"), name: "wait_for_merge", value: false })
+				]
+			});
+			var dialog = new ui.DialogPanel({
+				title: i18n.text("OptimizeForm.OptimizeIndex", index.name),
+				body: new ui.PanelForm({ fields: fields }),
+				onCommit: function( panel, args ) {
+					if(fields.validate()) {
+						this.cluster.post(encodeURIComponent( index.name ) + "/_optimize", fields.getData(), function(r) {
+							alert(JSON.stringify(r));
+						});
+						dialog.close();
+					}
+				}.bind(this)
+			}).open();
+		},
+		_testAnalyser_handler: function(index) {
+			this.cluster.get(encodeURIComponent( index.name ) + "/_analyze?text=" + encodeURIComponent( prompt( i18n.text("IndexCommand.TextToAnalyze") ) ), function(r) {
+				alert(JSON.stringify(r, true, "  "));
+			});
+		},
+		_deleteIndexAction_handler: function(index) {
+			if( prompt( i18n.text("AliasForm.DeleteAliasMessage", i18n.text("Command.DELETE"), index.name ) ) === i18n.text("Command.DELETE") ) {
+				this.cluster["delete"](encodeURIComponent( index.name ), null, function(r) {
+					alert(JSON.stringify(r));
+					this.fire("redraw");
+				}.bind(this) );
+			}
+		},
+		_shutdownNode_handler: function(node) {
+			if(prompt( i18n.text("IndexCommand.ShutdownMessage", i18n.text("Command.SHUTDOWN"), node.cluster.name ) ) === i18n.text("Command.SHUTDOWN") ) {
+				this.cluster.post( "_cluster/nodes/" + encodeURIComponent( node.name ) + "/_shutdown", null, function(r) {
+					alert(JSON.stringify(r));
+					this.fire("redraw");
+				}.bind(this));
+			}
+		},
+		_deleteAliasAction_handler: function( index, alias ) {
+			if( confirm( i18n.text("Command.DeleteAliasMessage" ) ) ) {
+				var command = {
+					"actions" : [
+						{ "remove" : { "index" : index.name, "alias" : alias.name } }
+					]
+				};
+				this.config.cluster.post('_aliases', JSON.stringify(command), function(d) {
+					alert(JSON.stringify(d));
+					this.fire("redraw");
+				}.bind(this) );
+			}
+		},
+
+		_replica_template: function(replica) {
+			var r = replica.replica;
+			return { tag: "DIV",
+				cls: "uiNodesView-replica" + (r.primary ? " primary" : "") + ( " state-" + r.state ),
+				text: r.shard.toString(),
+				onclick: function() { new ui.JsonPanel({
+					json: replica.status || r,
+					title: r.index + "/" + r.node + " [" + r.shard + "]" });
+				}
+			};
+		},
+		_routing_template: function(routing) {
+			var cell = { tag: "TD", cls: "uiNodesView-routing" + (routing.open ? "" : " close"), children: [] };
+			for(var i = 0; i < routing.replicas.length; i++) {
+				if(i % routing.max_number_of_shards === 0 && i > 0) {
+					cell.children.push({ tag: "BR" });
+				}
+				if( routing.replicas[i] ) {
+					cell.children.push(this._replica_template(routing.replicas[i]));
+				} else {
+					cell.children.push( { tag: "DIV", cls: "uiNodesView-nullReplica" } );
+				}
+			}
+			return cell;
+		},
+		_nodeControls_template: function( node ) { return (
+			{ tag: "DIV", cls: "uiNodesView-controls", children: [
+				new ui.MenuButton({
+					label: i18n.text("NodeInfoMenu.Title"),
+					menu: new ui.MenuPanel({
+						items: [
+							{ text: i18n.text("NodeInfoMenu.ClusterNodeInfo"), onclick: function() { new ui.JsonPanel({ json: node.cluster, title: node.name });} },
+							{ text: i18n.text("NodeInfoMenu.NodeStats"), onclick: function() { new ui.JsonPanel({ json: node.stats, title: node.name });} }
+						]
+					})
+				}),
+				new ui.MenuButton({
+					label: i18n.text("NodeActionsMenu.Title"),
+					menu: new ui.MenuPanel({
+						items: [
+							{ text: i18n.text("NodeActionsMenu.Shutdown"), onclick: function() { this._shutdownNode_handler(node); }.bind(this) }
+						]
+					})
+				})
+			] }
+		); },
+		_nodeIcon_template: function( node ) {
+			var icon, alt;
+			if( node.name === "Unassigned" ) {
+				icon = "fa-exclamation-triangle";
+				alt = i18n.text( "NodeType.Unassigned" );
+			} else if( node.cluster.settings && "tribe" in node.cluster.settings) {
+				icon = "fa-sitemap";
+				alt = i18n.text("NodeType.Tribe" );
+			} else {
+				icon = "fa-" + (node.master_node ? "star" : "circle") + (node.data_node ? "" : "-o" );
+				alt = i18n.text( node.master_node ? ( node.data_node ? "NodeType.Master" : "NodeType.Coord" ) : ( node.data_node ? "NodeType.Worker" : "NodeType.Client" ) );
+			}
+			return { tag: "TD", title: alt, cls: "uiNodesView-icon", children: [
+				{ tag: "SPAN", cls: "fa fa-2x " + icon }
+			] };
+		},
+		_node_template: function(node) {
+			return { tag: "TR", cls: "uiNodesView-node" + (node.master_node ? " master": ""), children: [
+				this._nodeIcon_template( node ),
+				{ tag: "TH", children: node.name === "Unassigned" ? [
+					{ tag: "H3", text: node.name }
+				] : [
+					{ tag: "H3", text: node.cluster.name },
+					{ tag: "DIV", text: node.cluster.hostname },
+					this.interactive ? this._nodeControls_template( node ) : null
+				] }
+			].concat(node.routings.map(this._routing_template, this))};
+		},
+		_indexHeaderControls_template: function( index ) { return (
+			{ tag: "DIV", cls: "uiNodesView-controls", children: [
+				new ui.MenuButton({
+					label: i18n.text("IndexInfoMenu.Title"),
+					menu: new ui.MenuPanel({
+						items: [
+							{ text: i18n.text("IndexInfoMenu.Status"), onclick: function() { new ui.JsonPanel({ json: index.status, title: index.name }); } },
+							{ text: i18n.text("IndexInfoMenu.Metadata"), onclick: function() { new ui.JsonPanel({ json: index.metadata, title: index.name }); } }
+						]
+					})
+				}),
+				new ui.MenuButton({
+					label: i18n.text("IndexActionsMenu.Title"),
+					menu: new ui.MenuPanel({
+						items: [
+							{ text: i18n.text("IndexActionsMenu.NewAlias"), onclick: function() { this._newAliasAction_handler(index); }.bind(this) },
+							{ text: i18n.text("IndexActionsMenu.Refresh"), onclick: function() { this._postIndexAction_handler("_refresh", index, false); }.bind(this) },
+							{ text: i18n.text("IndexActionsMenu.Flush"), onclick: function() { this._postIndexAction_handler("_flush", index, false); }.bind(this) },
+							{ text: i18n.text("IndexActionsMenu.Optimize"), onclick: function () { this._optimizeIndex_handler(index); }.bind(this) },
+							{ text: i18n.text("IndexActionsMenu.Snapshot"), disabled: closed, onclick: function() { this._postIndexAction_handler("_gateway/snapshot", index, false); }.bind(this) },
+							{ text: i18n.text("IndexActionsMenu.Analyser"), onclick: function() { this._testAnalyser_handler(index); }.bind(this) },
+							{ text: (index.state === "close") ? i18n.text("IndexActionsMenu.Open") : i18n.text("IndexActionsMenu.Close"), onclick: function() { this._postIndexAction_handler((index.state === "close") ? "_open" : "_close", index, true); }.bind(this) },
+							{ text: i18n.text("IndexActionsMenu.Delete"), onclick: function() { this._deleteIndexAction_handler(index); }.bind(this) }
+						]
+					})
+				})
+			] }
+		); },
+		_indexHeader_template: function( index ) {
+			var closed = index.state === "close";
+			var line1 = closed ? "index: close" : ( "size: " + (index.status && index.status.primaries && index.status.total ? ut.byteSize_template( index.status.primaries.store.size_in_bytes ) + " (" + ut.byteSize_template( index.status.total.store.size_in_bytes ) + ")" : "unknown" ) );
+			var line2 = closed ? "\u00A0" : ( "docs: " + (index.status && index.status.primaries && index.status.primaries.docs && index.status.total && index.status.total.docs ? index.status.primaries.docs.count.toLocaleString() + " (" + (index.status.total.docs.count + index.status.total.docs.deleted).toLocaleString() + ")" : "unknown" ) );
+			return index.name ? { tag: "TH", cls: (closed ? "close" : ""), children: [
+				{ tag: "H3", text: index.name },
+				{ tag: "DIV", text: line1 },
+				{ tag: "DIV", text: line2 },
+				this.interactive ? this._indexHeaderControls_template( index ) : null
+			] } : [ { tag: "TD" }, { tag: "TH" } ];
+		},
+		_aliasRender_template_none: function( cluster, indices ) {
+			return null;
+		},
+		_aliasRender_template_list: function( cluster, indices ) {
+			return cluster.aliases.length && { tag: "TBODY", children: [
+				{ tag: "TR", children: [
+					{ tag: "TD" }
+				].concat( indices.map( function( index ) {
+					return { tag: "TD", children: index.metadata && index.metadata.aliases.map( function( alias ) {
+						return { tag: "LI", text: alias };
+					} ) };
+				})) }
+			] };
+		},
+		_aliasRender_template_full: function( cluster, indices ) {
+			return cluster.aliases.length && { tag: "TBODY", children: cluster.aliases.map( function(alias, row) {
+				return { tag: "TR", children: [ { tag: "TD" },{ tag: "TD" } ].concat(alias.indices.map(function(index, i) {
+					if (index) {
+						return {
+							tag: "TD",
+							css: { background: "#" + "9ce9c7fc9".substr((row+6)%7,3) },
+							cls: "uiNodesView-hasAlias" + ( alias.min === i ? " min" : "" ) + ( alias.max === i ? " max" : "" ),
+							text: alias.name,
+							children: this.interactive ? [
+								{	tag: 'SPAN',
+									text: i18n.text("General.CloseGlyph"),
+									cls: 'uiNodesView-hasAlias-remove',
+									onclick: this._deleteAliasAction_handler.bind( this, index, alias )
+								}
+							]: null
+						};
+					}	else {
+						return { tag: "TD" };
+					}
+				}, this ) ) };
+			}, this )	};
+		},
+		_main_template: function(cluster, indices) {
+			return { tag: "TABLE", cls: "table uiNodesView", children: [
+				this._styleSheetEl,
+				{ tag: "THEAD", children: [ { tag: "TR", children: indices.map(this._indexHeader_template, this) } ] },
+				this._aliasRenderFunction( cluster, indices ),
+				{ tag: "TBODY", children: cluster.nodes.map(this._node_template, this) }
+			] };
+		}
+
+	});
+
+})( this.app, this.i18n, this.joey );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesViewDemo.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesViewDemo.js
new file mode 100644
index 0000000..9049163
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesViewDemo.js
@@ -0,0 +1,17 @@
+$( function() {
+
+	var ui = window.app.ns("ui");
+
+	var data = {
+		"cluster":{"nodes":[{"name":"cqTmT9GLSlSWx-B7pvM--w","routings":[{"name":"_river","replicas":[],"max_number_of_shards":"1","open":true},{"name":"ag_01","replicas":[null,{"replica":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_01"},"status":{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_01"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731712637,"operations":0},"docs":{"num_docs":10328420,"max_doc":10329720,"deleted_docs":4},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"643ms","total_time_in_millis":643}}}],"max_number_of_shards":"2","open":true},{"name":"ag_02","replicas":[null,{"replica":{"state":"STARTED","primary":false,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_02"},"status":{"routing":{"state":"STARTED","primary":false,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663385,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"75ms","total_time_in_millis":75}}}],"max_number_of_shards":"3","open":true},{"name":"ag_03","replicas":[null,{"replica":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_03"},"status":{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"86ms","total_time_in_millis":86}}}],"max_number_of_shards":"2","open":true},{"name":"twitter_river","replicas":[],"max_number_of_shards":"5","open":false}],"master_node":false,"stats":{"timestamp":1381790346979,"name":"Elathan","transport_address":"inet[/127.0.0.1:9301]","hostname":"server","indices":{"docs":{"count":0,"deleted":0},"store":{"size":"277b","size_in_bytes":277,"throttle_time":"0s","throttle_time_in_millis":0},"indexing":{"index_total":0,"index_time":"0s","index_time_in_millis":0,"index_current":0,"delete_total":0,"delete_time":"0s","delete_time_in_millis":0,"delete_current":0},"get":{"total":0,"get_time":"0s","time_in_millis":0,"exists_total":0,"exists_time":"0s","exists_time_in_millis":0,"missing_total":0,"missing_time":"0s","missing_time_in_millis":0,"current":0},"search":{"open_contexts":0,"query_total":6,"query_time":"19ms","query_time_in_millis":19,"query_current":0,"fetch_total":0,"fetch_time":"0s","fetch_time_in_millis":0,"fetch_current":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":10,"total_time":"0s","total_time_in_millis":0},"flush":{"total":186,"total_time":"9.1s","total_time_in_millis":9191},"warmer":{"current":0,"total":3,"total_time":"6ms","total_time_in_millis":6},"filter_cache":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"id_cache":{"memory_size":"0b","memory_size_in_bytes":0},"fielddata":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"completion":{"size":"0b","size_in_bytes":0}},"os":{"timestamp":1381790346979,"uptime":"15.5m","uptime_in_millis":932146,"load_average":[1.79736328125,1.95166015625,1.904296875],"cpu":{"sys":22,"user":6,"idle":70,"stolen":0},"mem":{"free":"3.7gb","free_in_bytes":4065169408,"used":"4.2gb","used_in_bytes":4524765184,"free_percent":51,"used_percent":48,"actual_free":"4.1gb","actual_free_in_bytes":4426321920,"actual_used":"3.8gb","actual_used_in_bytes":4163612672},"swap":{"used":"2.8gb","used_in_bytes":3025272832,"free":"1.1gb","free_in_bytes":1269694464}},"process":{"timestamp":1381790346979,"open_file_descriptors":266,"cpu":{"percent":0,"sys":"2.8m","sys_in_millis":172614,"user":"2.3m","user_in_millis":142295,"total":"5.2m","total_in_millis":314909},"mem":{"resident":"21.6mb","resident_in_bytes":22728704,"share":"-1b","share_in_bytes":-1,"total_virtual":"3.6gb","total_virtual_in_bytes":3900530688}},"jvm":{"timestamp":1381790346980,"uptime":"4d","uptime_in_millis":349028405,"mem":{"heap_used":"31.3mb","heap_used_in_bytes":32851896,"heap_committed":"265.5mb","heap_committed_in_bytes":278462464,"non_heap_used":"39.3mb","non_heap_used_in_bytes":41210896,"non_heap_committed":"63.7mb","non_heap_committed_in_bytes":66809856,"pools":{"Code Cache":{"used":"2mb","used_in_bytes":2120704,"max":"48mb","max_in_bytes":50331648,"peak_used":"2mb","peak_used_in_bytes":2131520,"peak_max":"48mb","peak_max_in_bytes":50331648},"Par Eden Space":{"used":"24mb","used_in_bytes":25224136,"max":"66.5mb","max_in_bytes":69795840,"peak_used":"27mb","peak_used_in_bytes":28311552,"peak_max":"66.5mb","peak_max_in_bytes":69795840},"Par Survivor Space":{"used":"816.5kb","used_in_bytes":836128,"max":"8.3mb","max_in_bytes":8716288,"peak_used":"2mb","peak_used_in_bytes":2162688,"peak_max":"8.3mb","peak_max_in_bytes":8716288},"CMS Old Gen":{"used":"6.4mb","used_in_bytes":6791632,"max":"940.8mb","max_in_bytes":986513408,"peak_used":"8.2mb","peak_used_in_bytes":8653824,"peak_max":"940.8mb","peak_max_in_bytes":986513408},"CMS Perm Gen":{"used":"37.2mb","used_in_bytes":39090192,"max":"82mb","max_in_bytes":85983232,"peak_used":"37.2mb","peak_used_in_bytes":39090192,"peak_max":"82mb","peak_max_in_bytes":85983232}}},"threads":{"count":51,"peak_count":56},"gc":{"collection_count":43,"collection_time":"374ms","collection_time_in_millis":374,"collectors":{"ParNew":{"collection_count":41,"collection_time":"374ms","collection_time_in_millis":374},"ConcurrentMarkSweep":{"collection_count":2,"collection_time":"0s","collection_time_in_millis":0}}}},"thread_pool":{"generic":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":3,"completed":7505},"index":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"get":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"snapshot":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"merge":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"suggest":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"bulk":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"optimize":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"warmer":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":16},"flush":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":2,"completed":188},"search":{"threads":6,"queue":0,"active":0,"rejected":0,"largest":6,"completed":6},"percolate":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"management":{"threads":5,"queue":0,"active":1,"rejected":0,"largest":5,"completed":8593},"refresh":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0}},"network":{"tcp":{"active_opens":91033,"passive_opens":3206,"curr_estab":824,"in_segs":9438878,"out_segs":7330495,"retrans_segs":10420,"estab_resets":4179,"attempt_fails":2304,"in_errs":15,"out_rsts":-1}},"fs":{"timestamp":1381790347004,"data":[{"path":"/var/elasticsearch/es2/data/elasticsearch/nodes/0","mount":"/","dev":"/dev/disk0s2","total":"465.1gb","total_in_bytes":499418034176,"free":"215.3gb","free_in_bytes":231241613312,"available":"215.1gb","available_in_bytes":230979469312,"disk_reads":2641856,"disk_writes":3231915,"disk_read_size":"75.9gb","disk_read_size_in_bytes":81593427456,"disk_write_size":"76.2gb","disk_write_size_in_bytes":81856144384}]},"transport":{"server_open":60,"rx_count":155197,"rx_size":"6.9mb","rx_size_in_bytes":7339947,"tx_count":155195,"tx_size":"11.6mb","tx_size_in_bytes":12251491},"http":{"current_open":0,"total_opened":0}},"cluster":{"name":"Elathan","transport_address":"inet[/127.0.0.1:9301]","hostname":"server","version":"0.90.5","http_address":"inet[server/127.0.0.1:9203]"}},{"name":"jw4owU-ZQgOYdM7ElauDTg","routings":[{"name":"_river","replicas":[],"max_number_of_shards":"1","open":true},{"name":"ag_01","replicas":[null,{"replica":{"state":"STARTED","primary":false,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":1,"index":"ag_01"},"status":{"routing":{"state":"STARTED","primary":false,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":1,"index":"ag_01"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731712637,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"194ms","total_time_in_millis":194}}}],"max_number_of_shards":"2","open":true},{"name":"ag_02","replicas":[{"replica":{"state":"STARTED","primary":true,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":0,"index":"ag_02"},"status":{"routing":{"state":"STARTED","primary":true,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":0,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663369,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"107ms","total_time_in_millis":107}}}],"max_number_of_shards":"3","open":true},{"name":"ag_03","replicas":[],"max_number_of_shards":"2","open":true},{"name":"twitter_river","replicas":[],"max_number_of_shards":"5","open":false}],"master_node":false,"stats":{"timestamp":1381790346963,"name":"Numinus","transport_address":"inet[/127.0.0.1:9303]","hostname":"server","indices":{"docs":{"count":0,"deleted":0},"store":{"size":"178b","size_in_bytes":178,"throttle_time":"0s","throttle_time_in_millis":0},"indexing":{"index_total":2,"index_time":"50ms","index_time_in_millis":50,"index_current":0,"delete_total":0,"delete_time":"0s","delete_time_in_millis":0,"delete_current":0},"get":{"total":0,"get_time":"0s","time_in_millis":0,"exists_total":0,"exists_time":"0s","exists_time_in_millis":0,"missing_total":0,"missing_time":"0s","missing_time_in_millis":0,"current":0},"search":{"open_contexts":0,"query_total":12,"query_time":"32ms","query_time_in_millis":32,"query_current":0,"fetch_total":0,"fetch_time":"0s","fetch_time_in_millis":0,"fetch_current":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":9,"total_time":"66ms","total_time_in_millis":66},"flush":{"total":218,"total_time":"5.6s","total_time_in_millis":5697},"warmer":{"current":0,"total":2,"total_time":"4ms","total_time_in_millis":4},"filter_cache":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"id_cache":{"memory_size":"0b","memory_size_in_bytes":0},"fielddata":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"completion":{"size":"0b","size_in_bytes":0}},"os":{"timestamp":1381790346963,"uptime":"15.5m","uptime_in_millis":932146,"load_average":[1.79736328125,1.95166015625,1.904296875],"cpu":{"sys":22,"user":6,"idle":70,"stolen":0},"mem":{"free":"3.7gb","free_in_bytes":4058091520,"used":"4.2gb","used_in_bytes":4531843072,"free_percent":51,"used_percent":48,"actual_free":"4.1gb","actual_free_in_bytes":4419244032,"actual_used":"3.8gb","actual_used_in_bytes":4170690560},"swap":{"used":"2.8gb","used_in_bytes":3025272832,"free":"1.1gb","free_in_bytes":1269694464}},"process":{"timestamp":1381790346963,"open_file_descriptors":264,"cpu":{"percent":0,"sys":"2.9m","sys_in_millis":174208,"user":"2.3m","user_in_millis":139440,"total":"5.2m","total_in_millis":313648},"mem":{"resident":"27.2mb","resident_in_bytes":28606464,"share":"-1b","share_in_bytes":-1,"total_virtual":"3.6gb","total_virtual_in_bytes":3903823872}},"jvm":{"timestamp":1381790346978,"uptime":"4d","uptime_in_millis":349026382,"mem":{"heap_used":"12.8mb","heap_used_in_bytes":13428352,"heap_committed":"265.5mb","heap_committed_in_bytes":278462464,"non_heap_used":"39.8mb","non_heap_used_in_bytes":41791784,"non_heap_committed":"55.2mb","non_heap_committed_in_bytes":57950208,"pools":{"Code Cache":{"used":"1.9mb","used_in_bytes":2065280,"max":"48mb","max_in_bytes":50331648,"peak_used":"1.9mb","peak_used_in_bytes":2074880,"peak_max":"48mb","peak_max_in_bytes":50331648},"Par Eden Space":{"used":"2.4mb","used_in_bytes":2564176,"max":"66.5mb","max_in_bytes":69795840,"peak_used":"27mb","peak_used_in_bytes":28311552,"peak_max":"66.5mb","peak_max_in_bytes":69795840},"Par Survivor Space":{"used":"646.5kb","used_in_bytes":662048,"max":"8.3mb","max_in_bytes":8716288,"peak_used":"2.8mb","peak_used_in_bytes":3029584,"peak_max":"8.3mb","peak_max_in_bytes":8716288},"CMS Old Gen":{"used":"9.7mb","used_in_bytes":10202128,"max":"940.8mb","max_in_bytes":986513408,"peak_used":"9.7mb","peak_used_in_bytes":10202128,"peak_max":"940.8mb","peak_max_in_bytes":986513408},"CMS Perm Gen":{"used":"37.8mb","used_in_bytes":39726504,"max":"82mb","max_in_bytes":85983232,"peak_used":"37.8mb","peak_used_in_bytes":39726504,"peak_max":"82mb","peak_max_in_bytes":85983232}}},"threads":{"count":60,"peak_count":66},"gc":{"collection_count":42,"collection_time":"512ms","collection_time_in_millis":512,"collectors":{"ParNew":{"collection_count":40,"collection_time":"512ms","collection_time_in_millis":512},"ConcurrentMarkSweep":{"collection_count":2,"collection_time":"0s","collection_time_in_millis":0}}}},"thread_pool":{"generic":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":3,"completed":7490},"index":{"threads":2,"queue":0,"active":0,"rejected":0,"largest":2,"completed":2},"get":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"snapshot":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"merge":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"suggest":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"bulk":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"optimize":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"warmer":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":18},"flush":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":2,"completed":221},"search":{"threads":12,"queue":0,"active":0,"rejected":0,"largest":12,"completed":12},"percolate":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"management":{"threads":3,"queue":0,"active":1,"rejected":0,"largest":5,"completed":8597},"refresh":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2}},"network":{"tcp":{"active_opens":91033,"passive_opens":3206,"curr_estab":824,"in_segs":9438878,"out_segs":7330495,"retrans_segs":10420,"estab_resets":4179,"attempt_fails":2304,"in_errs":15,"out_rsts":-1}},"fs":{"timestamp":1381790346992,"data":[{"path":"/var/elasticsearch/es4/data/elasticsearch/nodes/0","mount":"/","dev":"/dev/disk0s2","total":"465.1gb","total_in_bytes":499418034176,"free":"215.3gb","free_in_bytes":231241613312,"available":"215.1gb","available_in_bytes":230979469312,"disk_reads":2641856,"disk_writes":3231915,"disk_read_size":"75.9gb","disk_read_size_in_bytes":81593427456,"disk_write_size":"76.2gb","disk_write_size_in_bytes":81856144384}]},"transport":{"server_open":60,"rx_count":155179,"rx_size":"7mb","rx_size_in_bytes":7341687,"tx_count":155177,"tx_size":"11.6mb","tx_size_in_bytes":12249878},"http":{"current_open":0,"total_opened":0}},"cluster":{"name":"Numinus","transport_address":"inet[/127.0.0.1:9303]","hostname":"server","version":"0.90.5","http_address":"inet[server/127.0.0.1:9202]"}},{"name":"SwCmq0QKQuShZcJAbuW8OQ","routings":[{"name":"_river","replicas":[{"replica":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"_river"},"status":{"routing":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"_river"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1380240228838,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":62,"total_time":"1.6s","total_time_in_millis":1632}}}],"max_number_of_shards":"1","open":true},{"name":"ag_01","replicas":[{"replica":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"ag_01"},"status":{"routing":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"ag_01"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731712651,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"216ms","total_time_in_millis":216}}}],"max_number_of_shards":"2","open":true},{"name":"ag_02","replicas":[null,null,{"replica":{"state":"STARTED","primary":true,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":2,"index":"ag_02"},"status":{"routing":{"state":"STARTED","primary":true,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":2,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663407,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":4,"total_time":"17ms","total_time_in_millis":17}}}],"max_number_of_shards":"3","open":true},{"name":"ag_03","replicas":[],"max_number_of_shards":"2","open":true},{"name":"twitter_river","replicas":[],"max_number_of_shards":"5","open":false}],"master_node":false,"stats":{"timestamp":1381790346944,"name":"Ameridroid","transport_address":"inet[/127.0.0.1:9305]","hostname":"server","indices":{"docs":{"count":0,"deleted":0},"store":{"size":"257b","size_in_bytes":257,"throttle_time":"0s","throttle_time_in_millis":0},"indexing":{"index_total":6,"index_time":"64ms","index_time_in_millis":64,"index_current":0,"delete_total":0,"delete_time":"0s","delete_time_in_millis":0,"delete_current":0},"get":{"total":0,"get_time":"0s","time_in_millis":0,"exists_total":0,"exists_time":"0s","exists_time_in_millis":0,"missing_total":0,"missing_time":"0s","missing_time_in_millis":0,"current":0},"search":{"open_contexts":0,"query_total":12,"query_time":"27ms","query_time_in_millis":27,"query_current":0,"fetch_total":0,"fetch_time":"0s","fetch_time_in_millis":0,"fetch_current":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":10,"total_time":"113ms","total_time_in_millis":113},"flush":{"total":241,"total_time":"5.5s","total_time_in_millis":5553},"warmer":{"current":0,"total":3,"total_time":"4ms","total_time_in_millis":4},"filter_cache":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"id_cache":{"memory_size":"0b","memory_size_in_bytes":0},"fielddata":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"completion":{"size":"0b","size_in_bytes":0}},"os":{"timestamp":1381790346944,"uptime":"15.5m","uptime_in_millis":932146,"load_average":[1.79736328125,1.95166015625,1.904296875],"cpu":{"sys":22,"user":6,"idle":70,"stolen":0},"mem":{"free":"3.7gb","free_in_bytes":4059074560,"used":"4.2gb","used_in_bytes":4530860032,"free_percent":51,"used_percent":48,"actual_free":"4.1gb","actual_free_in_bytes":4419702784,"actual_used":"3.8gb","actual_used_in_bytes":4170231808},"swap":{"used":"2.8gb","used_in_bytes":3025272832,"free":"1.1gb","free_in_bytes":1269694464}},"process":{"timestamp":1381790346944,"open_file_descriptors":266,"cpu":{"percent":0,"sys":"2.8m","sys_in_millis":171912,"user":"2.3m","user_in_millis":143905,"total":"5.2m","total_in_millis":315817},"mem":{"resident":"30.4mb","resident_in_bytes":31936512,"share":"-1b","share_in_bytes":-1,"total_virtual":"3.6gb","total_virtual_in_bytes":3905077248}},"jvm":{"timestamp":1381790346944,"uptime":"4d","uptime_in_millis":349024271,"mem":{"heap_used":"16.6mb","heap_used_in_bytes":17485968,"heap_committed":"253.9mb","heap_committed_in_bytes":266272768,"non_heap_used":"39.7mb","non_heap_used_in_bytes":41733256,"non_heap_committed":"40.4mb","non_heap_committed_in_bytes":42405888,"pools":{"Code Cache":{"used":"1.9mb","used_in_bytes":2018624,"max":"48mb","max_in_bytes":50331648,"peak_used":"1.9mb","peak_used_in_bytes":2029504,"peak_max":"48mb","peak_max_in_bytes":50331648},"Par Eden Space":{"used":"5.9mb","used_in_bytes":6242912,"max":"66.5mb","max_in_bytes":69795840,"peak_used":"16.6mb","peak_used_in_bytes":17432576,"peak_max":"66.5mb","peak_max_in_bytes":69795840},"Par Survivor Space":{"used":"489.7kb","used_in_bytes":501496,"max":"8.3mb","max_in_bytes":8716288,"peak_used":"2mb","peak_used_in_bytes":2162688,"peak_max":"8.3mb","peak_max_in_bytes":8716288},"CMS Old Gen":{"used":"10.2mb","used_in_bytes":10741560,"max":"940.8mb","max_in_bytes":986513408,"peak_used":"10.2mb","peak_used_in_bytes":10741560,"peak_max":"940.8mb","peak_max_in_bytes":986513408},"CMS Perm Gen":{"used":"37.8mb","used_in_bytes":39714632,"max":"82mb","max_in_bytes":85983232,"peak_used":"37.8mb","peak_used_in_bytes":39714632,"peak_max":"82mb","peak_max_in_bytes":85983232}}},"threads":{"count":63,"peak_count":70},"gc":{"collection_count":61,"collection_time":"533ms","collection_time_in_millis":533,"collectors":{"ParNew":{"collection_count":61,"collection_time":"533ms","collection_time_in_millis":533},"ConcurrentMarkSweep":{"collection_count":0,"collection_time":"0s","collection_time_in_millis":0}}}},"thread_pool":{"generic":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":4,"completed":7504},"index":{"threads":4,"queue":0,"active":0,"rejected":0,"largest":4,"completed":6},"get":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"snapshot":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":4},"merge":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":4},"suggest":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"bulk":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"optimize":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"warmer":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":23},"flush":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":2,"completed":241},"search":{"threads":12,"queue":0,"active":0,"rejected":0,"largest":12,"completed":12},"percolate":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"management":{"threads":4,"queue":0,"active":1,"rejected":0,"largest":5,"completed":10284},"refresh":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":4}},"network":{"tcp":{"active_opens":91033,"passive_opens":3206,"curr_estab":824,"in_segs":9438844,"out_segs":7330461,"retrans_segs":10420,"estab_resets":4179,"attempt_fails":2304,"in_errs":15,"out_rsts":-1}},"fs":{"timestamp":1381790346959,"data":[{"path":"/var/elasticsearch/es6/data/elasticsearch/nodes/0","mount":"/","dev":"/dev/disk0s2","total":"465.1gb","total_in_bytes":499418034176,"free":"215.3gb","free_in_bytes":231240040448,"available":"215.1gb","available_in_bytes":230977896448,"disk_reads":2641849,"disk_writes":3231915,"disk_read_size":"75.9gb","disk_read_size_in_bytes":81593058816,"disk_write_size":"76.2gb","disk_write_size_in_bytes":81856144384}]},"transport":{"server_open":60,"rx_count":156880,"rx_size":"7mb","rx_size_in_bytes":7431874,"tx_count":156877,"tx_size":"11.9mb","tx_size_in_bytes":12480678},"http":{"current_open":0,"total_opened":0}},"cluster":{"name":"Ameridroid","transport_address":"inet[/127.0.0.1:9305]","hostname":"server","version":"0.90.5","http_address":"inet[server/127.0.0.1:9205]"}},{"name":"aBuoaKR5QVCfUZHgrJEfVg","routings":[{"name":"_river","replicas":[],"max_number_of_shards":"1","open":true},{"name":"ag_01","replicas":[{"replica":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_01"},"status":{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_01"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731712651,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"382ms","total_time_in_millis":382}}}],"max_number_of_shards":"2","open":true},{"name":"ag_02","replicas":[null,null,{"replica":{"state":"STARTED","primary":false,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":2,"index":"ag_02"},"status":{"routing":{"state":"STARTED","primary":false,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":2,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663407,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"15ms","total_time_in_millis":15}}}],"max_number_of_shards":"3","open":true},{"name":"ag_03","replicas":[{"replica":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_03"},"status":{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"101ms","total_time_in_millis":101}}}],"max_number_of_shards":"2","open":true},{"name":"twitter_river","replicas":[],"max_number_of_shards":"5","open":false}],"master_node":false,"stats":{"timestamp":1381790346945,"name":"Immortus","transport_address":"inet[/127.0.0.1:9302]","hostname":"server","indices":{"docs":{"count":0,"deleted":0},"store":{"size":"277b","size_in_bytes":277,"throttle_time":"0s","throttle_time_in_millis":0},"indexing":{"index_total":2,"index_time":"59ms","index_time_in_millis":59,"index_current":0,"delete_total":0,"delete_time":"0s","delete_time_in_millis":0,"delete_current":0},"get":{"total":0,"get_time":"0s","time_in_millis":0,"exists_total":0,"exists_time":"0s","exists_time_in_millis":0,"missing_total":0,"missing_time":"0s","missing_time_in_millis":0,"current":0},"search":{"open_contexts":0,"query_total":12,"query_time":"27ms","query_time_in_millis":27,"query_current":0,"fetch_total":1,"fetch_time":"9ms","fetch_time_in_millis":9,"fetch_current":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":9,"total_time":"72ms","total_time_in_millis":72},"flush":{"total":239,"total_time":"6.3s","total_time_in_millis":6363},"warmer":{"current":0,"total":3,"total_time":"8ms","total_time_in_millis":8},"filter_cache":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"id_cache":{"memory_size":"0b","memory_size_in_bytes":0},"fielddata":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"completion":{"size":"0b","size_in_bytes":0}},"os":{"timestamp":1381790346963,"uptime":"15.5m","uptime_in_millis":932146,"load_average":[1.79736328125,1.95166015625,1.904296875],"cpu":{"sys":22,"user":6,"idle":70,"stolen":0},"mem":{"free":"3.7gb","free_in_bytes":4058099712,"used":"4.2gb","used_in_bytes":4531834880,"free_percent":51,"used_percent":48,"actual_free":"4.1gb","actual_free_in_bytes":4419252224,"actual_used":"3.8gb","actual_used_in_bytes":4170682368},"swap":{"used":"2.8gb","used_in_bytes":3025272832,"free":"1.1gb","free_in_bytes":1269694464}},"process":{"timestamp":1381790346963,"open_file_descriptors":266,"cpu":{"percent":0,"sys":"2.9m","sys_in_millis":174105,"user":"2.4m","user_in_millis":145373,"total":"5.3m","total_in_millis":319478},"mem":{"resident":"29mb","resident_in_bytes":30453760,"share":"-1b","share_in_bytes":-1,"total_virtual":"3.6gb","total_virtual_in_bytes":3912540160}},"jvm":{"timestamp":1381790346963,"uptime":"4d","uptime_in_millis":349027381,"mem":{"heap_used":"28.5mb","heap_used_in_bytes":29980664,"heap_committed":"265.5mb","heap_committed_in_bytes":278462464,"non_heap_used":"40mb","non_heap_used_in_bytes":42021480,"non_heap_committed":"65.6mb","non_heap_committed_in_bytes":68853760,"pools":{"Code Cache":{"used":"2mb","used_in_bytes":2183808,"max":"48mb","max_in_bytes":50331648,"peak_used":"2mb","peak_used_in_bytes":2193408,"peak_max":"48mb","peak_max_in_bytes":50331648},"Par Eden Space":{"used":"23.8mb","used_in_bytes":25026800,"max":"66.5mb","max_in_bytes":69795840,"peak_used":"27mb","peak_used_in_bytes":28311552,"peak_max":"66.5mb","peak_max_in_bytes":69795840},"Par Survivor Space":{"used":"464.1kb","used_in_bytes":475296,"max":"8.3mb","max_in_bytes":8716288,"peak_used":"2mb","peak_used_in_bytes":2162688,"peak_max":"8.3mb","peak_max_in_bytes":8716288},"CMS Old Gen":{"used":"4.2mb","used_in_bytes":4478568,"max":"940.8mb","max_in_bytes":986513408,"peak_used":"12.4mb","peak_used_in_bytes":13054208,"peak_max":"940.8mb","peak_max_in_bytes":986513408},"CMS Perm Gen":{"used":"37.9mb","used_in_bytes":39837672,"max":"82mb","max_in_bytes":85983232,"peak_used":"38.2mb","peak_used_in_bytes":40134632,"peak_max":"82mb","peak_max_in_bytes":85983232}}},"threads":{"count":62,"peak_count":67},"gc":{"collection_count":80,"collection_time":"561ms","collection_time_in_millis":561,"collectors":{"ParNew":{"collection_count":78,"collection_time":"557ms","collection_time_in_millis":557},"ConcurrentMarkSweep":{"collection_count":2,"collection_time":"4ms","collection_time_in_millis":4}}}},"thread_pool":{"generic":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":4,"completed":7528},"index":{"threads":2,"queue":0,"active":0,"rejected":0,"largest":2,"completed":2},"get":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"snapshot":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"merge":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"suggest":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"bulk":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"optimize":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"warmer":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":26},"flush":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":2,"completed":242},"search":{"threads":12,"queue":0,"active":0,"rejected":0,"largest":12,"completed":13},"percolate":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"management":{"threads":5,"queue":0,"active":2,"rejected":0,"largest":5,"completed":10288},"refresh":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2}},"network":{"tcp":{"active_opens":91033,"passive_opens":3206,"curr_estab":824,"in_segs":9438862,"out_segs":7330479,"retrans_segs":10420,"estab_resets":4179,"attempt_fails":2304,"in_errs":15,"out_rsts":-1}},"fs":{"timestamp":1381790346977,"data":[{"path":"/var/elasticsearch/es3/data/elasticsearch/nodes/0","mount":"/","dev":"/dev/disk0s2","total":"465.1gb","total_in_bytes":499418034176,"free":"215.3gb","free_in_bytes":231241089024,"available":"215.1gb","available_in_bytes":230978945024,"disk_reads":2641854,"disk_writes":3231915,"disk_read_size":"75.9gb","disk_read_size_in_bytes":81593402880,"disk_write_size":"76.2gb","disk_write_size_in_bytes":81856144384}]},"transport":{"server_open":60,"rx_count":156920,"rx_size":"7.1mb","rx_size_in_bytes":7451979,"tx_count":156915,"tx_size":"11.9mb","tx_size_in_bytes":12499329},"http":{"current_open":0,"total_opened":0}},"cluster":{"name":"Immortus","transport_address":"inet[/127.0.0.1:9302]","hostname":"server","version":"0.90.5","http_address":"inet[server/127.0.0.1:9201]"}},{"name":"3Rbfod0sS9eZ6VrOkY0JKw","routings":[{"name":"_river","replicas":[{"replica":{"state":"STARTED","primary":true,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"_river"},"status":{"routing":{"state":"STARTED","primary":true,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"_river"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1380240228838,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":62,"total_time":"833ms","total_time_in_millis":833}}}],"max_number_of_shards":"1","open":true},{"name":"ag_01","replicas":[],"max_number_of_shards":"2","open":true},{"name":"ag_02","replicas":[{"replica":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_02"},"status":{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663369,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"4ms","total_time_in_millis":4}}}],"max_number_of_shards":"3","open":true},{"name":"ag_03","replicas":[{"replica":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_03"},"status":{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"274ms","total_time_in_millis":274}}}],"max_number_of_shards":"2","open":true},{"name":"twitter_river","replicas":[],"max_number_of_shards":"5","open":false}],"master_node":true,"stats":{"timestamp":1381790346938,"name":"Steel Serpent","transport_address":"inet[server/127.0.0.1:9300]","hostname":"server","indices":{"docs":{"count":0,"deleted":0},"store":{"size":"237b","size_in_bytes":237,"throttle_time":"0s","throttle_time_in_millis":0},"indexing":{"index_total":2,"index_time":"59ms","index_time_in_millis":59,"index_current":0,"delete_total":0,"delete_time":"0s","delete_time_in_millis":0,"delete_current":0},"get":{"total":0,"get_time":"0s","time_in_millis":0,"exists_total":0,"exists_time":"0s","exists_time_in_millis":0,"missing_total":0,"missing_time":"0s","missing_time_in_millis":0,"current":0},"search":{"open_contexts":0,"query_total":12,"query_time":"32ms","query_time_in_millis":32,"query_current":0,"fetch_total":3,"fetch_time":"5ms","fetch_time_in_millis":5,"fetch_current":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":6,"total_time":"58ms","total_time_in_millis":58},"flush":{"total":240,"total_time":"4.3s","total_time_in_millis":4339},"warmer":{"current":0,"total":3,"total_time":"8ms","total_time_in_millis":8},"filter_cache":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"id_cache":{"memory_size":"0b","memory_size_in_bytes":0},"fielddata":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"completion":{"size":"0b","size_in_bytes":0}},"os":{"timestamp":1381790346938,"uptime":"15.5m","uptime_in_millis":932146,"load_average":[1.79736328125,1.95166015625,1.904296875],"cpu":{"sys":22,"user":6,"idle":70,"stolen":0},"mem":{"free":"3.7gb","free_in_bytes":4062093312,"used":"4.2gb","used_in_bytes":4527841280,"free_percent":51,"used_percent":48,"actual_free":"4.1gb","actual_free_in_bytes":4422721536,"actual_used":"3.8gb","actual_used_in_bytes":4167213056},"swap":{"used":"2.8gb","used_in_bytes":3025272832,"free":"1.1gb","free_in_bytes":1269694464}},"process":{"timestamp":1381790346938,"open_file_descriptors":272,"cpu":{"percent":0,"sys":"3.3m","sys_in_millis":200578,"user":"3.2m","user_in_millis":192613,"total":"6.5m","total_in_millis":393191},"mem":{"resident":"43.8mb","resident_in_bytes":46018560,"share":"-1b","share_in_bytes":-1,"total_virtual":"3.6gb","total_virtual_in_bytes":3910467584}},"jvm":{"timestamp":1381790346938,"uptime":"4d","uptime_in_millis":349029191,"mem":{"heap_used":"28.9mb","heap_used_in_bytes":30381984,"heap_committed":"253.9mb","heap_committed_in_bytes":266272768,"non_heap_used":"42.9mb","non_heap_used_in_bytes":45068896,"non_heap_committed":"43.3mb","non_heap_committed_in_bytes":45420544,"pools":{"Code Cache":{"used":"3.3mb","used_in_bytes":3534656,"max":"48mb","max_in_bytes":50331648,"peak_used":"3.3mb","peak_used_in_bytes":3545408,"peak_max":"48mb","peak_max_in_bytes":50331648},"Par Eden Space":{"used":"15.6mb","used_in_bytes":16402808,"max":"66.5mb","max_in_bytes":69795840,"peak_used":"16.6mb","peak_used_in_bytes":17432576,"peak_max":"66.5mb","peak_max_in_bytes":69795840},"Par Survivor Space":{"used":"44.9kb","used_in_bytes":46016,"max":"8.3mb","max_in_bytes":8716288,"peak_used":"2mb","peak_used_in_bytes":2162688,"peak_max":"8.3mb","peak_max_in_bytes":8716288},"CMS Old Gen":{"used":"13.2mb","used_in_bytes":13933160,"max":"940.8mb","max_in_bytes":986513408,"peak_used":"13.2mb","peak_used_in_bytes":13933160,"peak_max":"940.8mb","peak_max_in_bytes":986513408},"CMS Perm Gen":{"used":"39.6mb","used_in_bytes":41534240,"max":"82mb","max_in_bytes":85983232,"peak_used":"39.6mb","peak_used_in_bytes":41534240,"peak_max":"82mb","peak_max_in_bytes":85983232}}},"threads":{"count":64,"peak_count":68},"gc":{"collection_count":272,"collection_time":"967ms","collection_time_in_millis":967,"collectors":{"ParNew":{"collection_count":272,"collection_time":"967ms","collection_time_in_millis":967},"ConcurrentMarkSweep":{"collection_count":0,"collection_time":"0s","collection_time_in_millis":0}}}},"thread_pool":{"generic":{"threads":2,"queue":0,"active":0,"rejected":0,"largest":4,"completed":9499},"index":{"threads":2,"queue":0,"active":0,"rejected":0,"largest":2,"completed":2},"get":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"snapshot":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"merge":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"suggest":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"bulk":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"optimize":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"warmer":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":21},"flush":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":2,"completed":241},"search":{"threads":12,"queue":0,"active":0,"rejected":0,"largest":12,"completed":15},"percolate":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"management":{"threads":5,"queue":0,"active":1,"rejected":0,"largest":5,"completed":15207},"refresh":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2}},"network":{"tcp":{"active_opens":91033,"passive_opens":3206,"curr_estab":824,"in_segs":9438818,"out_segs":7330435,"retrans_segs":10420,"estab_resets":4179,"attempt_fails":2304,"in_errs":15,"out_rsts":-1}},"fs":{"timestamp":1381790346956,"data":[{"path":"/var/elasticsearch/es1/data/elasticsearch/nodes/0","mount":"/","dev":"/dev/disk0s2","total":"465.1gb","total_in_bytes":499418034176,"free":"215.3gb","free_in_bytes":231240040448,"available":"215.1gb","available_in_bytes":230977896448,"disk_reads":2641849,"disk_writes":3231915,"disk_read_size":"75.9gb","disk_read_size_in_bytes":81593058816,"disk_write_size":"76.2gb","disk_write_size_in_bytes":81856144384}]},"transport":{"server_open":60,"rx_count":780551,"rx_size":"59mb","rx_size_in_bytes":61929023,"tx_count":780563,"tx_size":"35.2mb","tx_size_in_bytes":36961925},"http":{"current_open":6,"total_opened":201}},"cluster":{"name":"Steel Serpent","transport_address":"inet[server/127.0.0.1:9300]","hostname":"server","version":"0.90.5","http_address":"inet[server/127.0.0.1:9200]"}},{"name":"PO1wHIidQo-w7sGHaYHvjg","routings":[{"name":"_river","replicas":[],"max_number_of_shards":"1","open":true},{"name":"ag_01","replicas":[],"max_number_of_shards":"2","open":true},{"name":"ag_02","replicas":[null,{"replica":{"state":"STARTED","primary":true,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_02"},"status":{"routing":{"state":"STARTED","primary":true,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663385,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":4,"total_time":"122ms","total_time_in_millis":122}}}],"max_number_of_shards":"3","open":true},{"name":"ag_03","replicas":[null,{"replica":{"state":"STARTED","primary":false,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_03"},"status":{"routing":{"state":"STARTED","primary":false,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"137ms","total_time_in_millis":137}}}],"max_number_of_shards":"2","open":true},{"name":"twitter_river","replicas":[],"max_number_of_shards":"5","open":false}],"master_node":false,"stats":{"timestamp":1381790346964,"name":"Thumbelina","transport_address":"inet[/127.0.0.1:9304]","hostname":"server","indices":{"docs":{"count":0,"deleted":0},"store":{"size":"178b","size_in_bytes":178,"throttle_time":"0s","throttle_time_in_millis":0},"indexing":{"index_total":4,"index_time":"55ms","index_time_in_millis":55,"index_current":0,"delete_total":0,"delete_time":"0s","delete_time_in_millis":0,"delete_current":0},"get":{"total":0,"get_time":"0s","time_in_millis":0,"exists_total":0,"exists_time":"0s","exists_time_in_millis":0,"missing_total":0,"missing_time":"0s","missing_time_in_millis":0,"current":0},"search":{"open_contexts":0,"query_total":6,"query_time":"21ms","query_time_in_millis":21,"query_current":0,"fetch_total":2,"fetch_time":"10ms","fetch_time_in_millis":10,"fetch_current":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":9,"total_time":"81ms","total_time_in_millis":81},"flush":{"total":198,"total_time":"3.6s","total_time_in_millis":3662},"warmer":{"current":0,"total":2,"total_time":"3ms","total_time_in_millis":3},"filter_cache":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"id_cache":{"memory_size":"0b","memory_size_in_bytes":0},"fielddata":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"completion":{"size":"0b","size_in_bytes":0}},"os":{"timestamp":1381790346964,"uptime":"15.5m","uptime_in_millis":932146,"load_average":[1.79736328125,1.95166015625,1.904296875],"cpu":{"sys":22,"user":6,"idle":70,"stolen":0},"mem":{"free":"3.7gb","free_in_bytes":4058308608,"used":"4.2gb","used_in_bytes":4531625984,"free_percent":51,"used_percent":48,"actual_free":"4.1gb","actual_free_in_bytes":4419461120,"actual_used":"3.8gb","actual_used_in_bytes":4170473472},"swap":{"used":"2.8gb","used_in_bytes":3025272832,"free":"1.1gb","free_in_bytes":1269694464}},"process":{"timestamp":1381790346964,"open_file_descriptors":264,"cpu":{"percent":0,"sys":"2.8m","sys_in_millis":172378,"user":"2.3m","user_in_millis":140227,"total":"5.2m","total_in_millis":312605},"mem":{"resident":"28.5mb","resident_in_bytes":29892608,"share":"-1b","share_in_bytes":-1,"total_virtual":"3.6gb","total_virtual_in_bytes":3904798720}},"jvm":{"timestamp":1381790346976,"uptime":"4d","uptime_in_millis":349025339,"mem":{"heap_used":"20.8mb","heap_used_in_bytes":21889120,"heap_committed":"253.9mb","heap_committed_in_bytes":266272768,"non_heap_used":"40.2mb","non_heap_used_in_bytes":42232320,"non_heap_committed":"40.8mb","non_heap_committed_in_bytes":42799104,"pools":{"Code Cache":{"used":"2mb","used_in_bytes":2125312,"max":"48mb","max_in_bytes":50331648,"peak_used":"2mb","peak_used_in_bytes":2134912,"peak_max":"48mb","peak_max_in_bytes":50331648},"Par Eden Space":{"used":"8.4mb","used_in_bytes":8836504,"max":"66.5mb","max_in_bytes":69795840,"peak_used":"16.6mb","peak_used_in_bytes":17432576,"peak_max":"66.5mb","peak_max_in_bytes":69795840},"Par Survivor Space":{"used":"659.3kb","used_in_bytes":675192,"max":"8.3mb","max_in_bytes":8716288,"peak_used":"2mb","peak_used_in_bytes":2162688,"peak_max":"8.3mb","peak_max_in_bytes":8716288},"CMS Old Gen":{"used":"11.8mb","used_in_bytes":12377424,"max":"940.8mb","max_in_bytes":986513408,"peak_used":"11.8mb","peak_used_in_bytes":12377424,"peak_max":"940.8mb","peak_max_in_bytes":986513408},"CMS Perm Gen":{"used":"38.2mb","used_in_bytes":40107008,"max":"82mb","max_in_bytes":85983232,"peak_used":"38.2mb","peak_used_in_bytes":40107008,"peak_max":"82mb","peak_max_in_bytes":85983232}}},"threads":{"count":59,"peak_count":65},"gc":{"collection_count":61,"collection_time":"632ms","collection_time_in_millis":632,"collectors":{"ParNew":{"collection_count":61,"collection_time":"632ms","collection_time_in_millis":632},"ConcurrentMarkSweep":{"collection_count":0,"collection_time":"0s","collection_time_in_millis":0}}}},"thread_pool":{"generic":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":4,"completed":7515},"index":{"threads":4,"queue":0,"active":0,"rejected":0,"largest":4,"completed":4},"get":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"snapshot":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"merge":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"suggest":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"bulk":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"optimize":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"warmer":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":22},"flush":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":2,"completed":198},"search":{"threads":8,"queue":0,"active":0,"rejected":0,"largest":8,"completed":8},"percolate":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"management":{"threads":4,"queue":0,"active":1,"rejected":0,"largest":5,"completed":10266},"refresh":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2}},"network":{"tcp":{"active_opens":91033,"passive_opens":3206,"curr_estab":824,"in_segs":9438872,"out_segs":7330489,"retrans_segs":10420,"estab_resets":4179,"attempt_fails":2304,"in_errs":15,"out_rsts":-1}},"fs":{"timestamp":1381790347016,"data":[{"path":"/var/elasticsearch/es5/data/elasticsearch/nodes/0","mount":"/","dev":"/dev/disk0s2","total":"465.1gb","total_in_bytes":499418034176,"free":"215.3gb","free_in_bytes":231241613312,"available":"215.1gb","available_in_bytes":230979469312,"disk_reads":2641856,"disk_writes":3231915,"disk_read_size":"75.9gb","disk_read_size_in_bytes":81593427456,"disk_write_size":"76.2gb","disk_write_size_in_bytes":81856144384}]},"transport":{"server_open":60,"rx_count":156869,"rx_size":"7mb","rx_size_in_bytes":7444733,"tx_count":156866,"tx_size":"11.9mb","tx_size_in_bytes":12497730},"http":{"current_open":0,"total_opened":2}},"cluster":{"name":"Thumbelina","transport_address":"inet[/127.0.0.1:9304]","hostname":"server","version":"0.90.5","http_address":"inet[server/127.0.0.1:9204]"}}],"aliases":[{"name":"search","max":3,"min":1,"indices":[false,{"name":"ag_01","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"2","index.version.created":"900599"},"mappings":{},"aliases":["search"]},"status":{"index":{"primary_size":"198b","primary_size_in_bytes":198,"size":"356b","size_in_bytes":356},"translog":{"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":2,"total_time":"0s","total_time_in_millis":0},"flush":{"total":27,"total_time":"1.4s","total_time_in_millis":1435},"shards":{"0":[{"routing":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"ag_01"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731712651,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"216ms","total_time_in_millis":216}},{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_01"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731712651,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"382ms","total_time_in_millis":382}}],"1":[{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_01"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731712637,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"643ms","total_time_in_millis":643}},{"routing":{"state":"STARTED","primary":false,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":1,"index":"ag_01"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731712637,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"194ms","total_time_in_millis":194}}]}}},{"name":"ag_02","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"3","index.version.created":"900599"},"mappings":{},"aliases":["search"]},"status":{"index":{"primary_size":"297b","primary_size_in_bytes":297,"size":"534b","size_in_bytes":534},"translog":{"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":3,"total_time":"0s","total_time_in_millis":0},"flush":{"total":20,"total_time":"340ms","total_time_in_millis":340},"shards":{"0":[{"routing":{"state":"STARTED","primary":true,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":0,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663369,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"107ms","total_time_in_millis":107}},{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663369,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"4ms","total_time_in_millis":4}}],"1":[{"routing":{"state":"STARTED","primary":false,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663385,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"75ms","total_time_in_millis":75}},{"routing":{"state":"STARTED","primary":true,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663385,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":4,"total_time":"122ms","total_time_in_millis":122}}],"2":[{"routing":{"state":"STARTED","primary":true,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":2,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663407,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":4,"total_time":"17ms","total_time_in_millis":17}},{"routing":{"state":"STARTED","primary":false,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":2,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663407,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"15ms","total_time_in_millis":15}}]}}},{"name":"ag_03","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"2","index.version.created":"900599"},"mappings":{},"aliases":["search","live"]},"status":{"index":{"primary_size":"198b","primary_size_in_bytes":198,"size":"356b","size_in_bytes":356},"translog":{"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":2,"total_time":"0s","total_time_in_millis":0},"flush":{"total":27,"total_time":"598ms","total_time_in_millis":598},"shards":{"0":[{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"101ms","total_time_in_millis":101}},{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"274ms","total_time_in_millis":274}}],"1":[{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"86ms","total_time_in_millis":86}},{"routing":{"state":"STARTED","primary":false,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"137ms","total_time_in_millis":137}}]}}},false]},{"name":"live","max":3,"min":3,"indices":[false,false,false,{"name":"ag_03","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"2","index.version.created":"900599"},"mappings":{},"aliases":["search","live"]},"status":{"index":{"primary_size":"198b","primary_size_in_bytes":198,"size":"356b","size_in_bytes":356},"translog":{"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":2,"total_time":"0s","total_time_in_millis":0},"flush":{"total":27,"total_time":"598ms","total_time_in_millis":598},"shards":{"0":[{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"101ms","total_time_in_millis":101}},{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"274ms","total_time_in_millis":274}}],"1":[{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"86ms","total_time_in_millis":86}},{"routing":{"state":"STARTED","primary":false,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"137ms","total_time_in_millis":137}}]}}},false]}]},
+		"indices":[{"name":null},{"name":"_river","state":"open","metadata":{"state":"open","settings":{"index.version.created":"900599","index.number_of_replicas":"1","index.number_of_shards":"1"},"mappings":{},"aliases":[]},"status":{"index":{"primary_size":"79b","primary_size_in_bytes":79,"size":"158b","size_in_bytes":158},"translog":{"operations":0},"docs":{"num_docs":1,"max_doc":1,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":124,"total_time":"2.4s","total_time_in_millis":2465},"shards":{"0":[{"routing":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"_river"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1380240228838,"operations":0},"docs":{"num_docs":187162420,"max_doc":187171320,"deleted_docs":9},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":62,"total_time":"1.6s","total_time_in_millis":1632}},{"routing":{"state":"STARTED","primary":true,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"_river"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1380240228838,"operations":0},"docs":{"num_docs":187162420,"max_doc":187171320,"deleted_docs":9},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":62,"total_time":"833ms","total_time_in_millis":833}}]}}},{"name":"ag_01","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"2","index.version.created":"900599"},"mappings":{},"aliases":["search"]},"status":{"index":{"primary_size":"198b","primary_size_in_bytes":198,"size":"356b","size_in_bytes":356},"translog":{"operations":0},"docs":{"num_docs":18716242,"max_doc":18717132,"deleted_docs":9},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":2,"total_time":"0s","total_time_in_millis":0},"flush":{"total":27,"total_time":"1.4s","total_time_in_millis":1435},"shards":{"0":[{"routing":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"ag_01"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731712651,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"216ms","total_time_in_millis":216}},{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_01"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731712651,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"382ms","total_time_in_millis":382}}],"1":[{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_01"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731712637,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"643ms","total_time_in_millis":643}},{"routing":{"state":"STARTED","primary":false,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":1,"index":"ag_01"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731712637,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"194ms","total_time_in_millis":194}}]}}},{"name":"ag_02","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"3","index.version.created":"900599"},"mappings":{},"aliases":["search"]},"status":{"index":{"primary_size":"297b","primary_size_in_bytes":297,"size":"534b","size_in_bytes":534},"translog":{"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":3,"total_time":"0s","total_time_in_millis":0},"flush":{"total":20,"total_time":"340ms","total_time_in_millis":340},"shards":{"0":[{"routing":{"state":"STARTED","primary":true,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":0,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663369,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"107ms","total_time_in_millis":107}},{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663369,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"4ms","total_time_in_millis":4}}],"1":[{"routing":{"state":"STARTED","primary":false,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663385,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"75ms","total_time_in_millis":75}},{"routing":{"state":"STARTED","primary":true,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663385,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":4,"total_time":"122ms","total_time_in_millis":122}}],"2":[{"routing":{"state":"STARTED","primary":true,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":2,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663407,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":4,"total_time":"17ms","total_time_in_millis":17}},{"routing":{"state":"STARTED","primary":false,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":2,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663407,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"15ms","total_time_in_millis":15}}]}}},{"name":"ag_03","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"2","index.version.created":"900599"},"mappings":{},"aliases":["search","live"]},"status":{"index":{"primary_size":"198b","primary_size_in_bytes":198,"size":"356b","size_in_bytes":356},"translog":{"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":2,"total_time":"0s","total_time_in_millis":0},"flush":{"total":27,"total_time":"598ms","total_time_in_millis":598},"shards":{"0":[{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"101ms","total_time_in_millis":101}},{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"274ms","total_time_in_millis":274}}],"1":[{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"86ms","total_time_in_millis":86}},{"routing":{"state":"STARTED","primary":false,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"137ms","total_time_in_millis":137}}]}}},{"name":"twitter_river","state":"close","metadata":{"state":"close","settings":{"index.number_of_replicas":"1","index.version.created":"900599","index.number_of_shards":"5"},"mappings":{"status":{"properties":{"text":{"type":"string"},"location":{"properties":{"lon":{"type":"double"},"lat":{"type":"double"}}},"link":{"properties":{"start":{"type":"long"},"expand_url":{"type":"string"},"display_url":{"type":"string"},"url":{"type":"string"},"end":{"type":"long"}}},"hashtag":{"properties":{"text":{"type":"string"},"start":{"type":"long"},"end":{"type":"long"}}},"truncated":{"type":"boolean"},"source":{"type":"string"},"retweet":{"properties":{"id":{"type":"long"},"user_screen_name":{"type":"string"},"retweet_count":{"type":"long"},"user_id":{"type":"long"}}},"created_at":{"format":"dateOptionalTime","type":"date"},"retweet_count":{"type":"long"},"in_reply":{"properties":{"user_screen_name":{"type":"string"},"status":{"type":"long"},"user_id":{"type":"long"}}},"mention":{"properties":{"id":{"type":"long"},"start":{"type":"long"},"name":{"type":"string"},"screen_name":{"type":"string"},"end":{"type":"long"}}},"place":{"properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"country_code":{"type":"string"},"url":{"type":"string"},"full_name":{"type":"string"},"country":{"type":"string"}}},"user":{"properties":{"id":{"type":"long"},"profile_image_url_https":{"type":"string"},"location":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"screen_name":{"type":"string"},"profile_image_url":{"type":"string"}}}}}},"aliases":[]},"status":null}]
+	};
+
+	window.builder = function() {
+		return new ui.NodesView({
+			interactive: true,
+			data: data
+		});
+	};
+
+});
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/page/page.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/page/page.js
new file mode 100644
index 0000000..8c5eb70
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/page/page.js
@@ -0,0 +1,14 @@
+(function( app ) {
+
+	var ui = app.ns("ui");
+
+	ui.Page = ui.AbstractWidget.extend({
+		show: function() {
+			this.el.show();
+		},
+		hide: function() {
+			this.el.hide();
+		}
+	});
+
+})( this.app );
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.css
new file mode 100644
index 0000000..cd4138e
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.css
@@ -0,0 +1,12 @@
+.uiPanelForm-field {
+	display: block;
+	padding: 2px 0;
+	clear: both;
+}
+
+.uiPanelForm-label {
+	float: left;
+	width: 200px;
+	padding: 3px 7px;
+	text-align: right;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.js
new file mode 100644
index 0000000..8ed4fe7
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.js
@@ -0,0 +1,26 @@
+(function( $, app ) {
+
+	var ui = app.ns("ui");
+	var ut = app.ns("ut");
+
+	ui.PanelForm = ui.AbstractWidget.extend({
+		defaults: {
+			fields: null	// (required) instanceof app.ux.FieldCollection
+		},
+		init: function(parent) {
+			this._super();
+			this.el = $.joey(this._main_template());
+			this.attach( parent );
+		},
+		_main_template: function() {
+			return { tag: "DIV", id: this.id(), cls: "uiPanelForm", children: this.config.fields.fields.map(this._field_template, this) };
+		},
+		_field_template: function(field) {
+			return { tag: "LABEL", cls: "uiPanelForm-field", children: [
+				{ tag: "DIV", cls: "uiPanelForm-label", children: [ field.label, ut.require_template(field) ] },
+				field
+			]};
+		}
+	});
+
+})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.css
new file mode 100644
index 0000000..dfe055c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.css
@@ -0,0 +1,62 @@
+.uiQueryFilter {
+	width: 350px;
+	padding: 5px;
+	background: #d8e7ff;
+	background: -moz-linear-gradient(left, #d8e7ff, #e8f1ff);
+	background: -webkit-linear-gradient(left, #d8e7ff, #e8f1ff);
+}
+
+.uiQueryFilter DIV.uiQueryFilter-section {
+	margin-bottom: 5px;
+}
+
+.uiQueryFilter HEADER {
+	display: block;
+	font-variant: small-caps;
+	font-weight: bold;
+	margin: 5px 0;
+}
+
+.uiQueryFilter-aliases SELECT {
+	width: 100%;
+}
+
+.uiQueryFilter-booble {
+	cursor: pointer;
+	background: #e8f1ff;
+	border: 1px solid #e8f1ff;
+	border-radius: 5px;
+	padding: 1px 4px;
+	margin-bottom: 1px;
+	overflow: hidden;
+	white-space: nowrap;
+}
+
+.uiQueryFilter-booble.selected {
+	background: #dae3f0;
+	border-top: 1px solid #c8d4e6;
+	border-left: 1px solid #c8d4e6;
+	border-bottom: 1px solid #ffffff;
+	border-right: 1px solid #ffffff;
+}
+
+.uiQueryFilter-filterName {
+	background-color: #cbdfff;
+	margin-bottom: 4px;
+	padding: 3px;
+	cursor: pointer;
+}
+
+.uiQueryFilter-filters INPUT  {
+	width: 300px;
+}
+
+.uiQueryFilter-subMultiFields {
+	padding-left: 10px;
+}
+
+.uiQueryFilter-rangeHintFrom,
+.uiQueryFilter-rangeHintTo {
+	margin: 0;
+	opacity: 0.75;
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.js
new file mode 100644
index 0000000..bd449a0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.js
@@ -0,0 +1,277 @@
+(function( $, app, i18n ) {
+
+	var ui = app.ns("ui");
+	var ut = app.ns("ut");
+
+	ui.QueryFilter = ui.AbstractWidget.extend({
+		defaults: {
+			metadata: null,   // (required) instanceof app.data.MetaData
+			query: null       // (required) instanceof app.data.Query that the filters will act apon
+		},
+		init: function() {
+			this._super();
+			this.metadata = this.config.metadata;
+			this.query = this.config.query;
+			this.el = $(this._main_template());
+		},
+		helpTypeMap: {
+			"date" : "QueryFilter.DateRangeHelp"
+		},
+		requestUpdate: function(jEv) {
+			if(jEv && jEv.originalEvent) { // we only want to update on real user interaction not generated events
+				this.query.setPage(1);
+				this.query.query();
+			}
+		},
+		getSpec: function(fieldName) {
+			return this.metadata.fields[fieldName];
+		},
+		_selectAlias_handler: function(jEv) {
+			var indices = (jEv.target.selectedIndex === 0) ? [] : this.metadata.getIndices($(jEv.target).val());
+			$(".uiQueryFilter-index").each(function(i, el) {
+				var jEl = $(el);
+				if(indices.contains(jEl.text()) !== jEl.hasClass("selected")) {
+					jEl.click();
+				}
+			});
+			this.requestUpdate(jEv);
+		},
+		_selectIndex_handler: function(jEv) {
+			var jEl = $(jEv.target).closest(".uiQueryFilter-index");
+			jEl.toggleClass("selected");
+			var selected = jEl.hasClass("selected");
+			this.query.setIndex(jEl.text(), selected);
+			if(selected) {
+				var types = this.metadata.getTypes(this.query.indices);
+				this.el.find("DIV.uiQueryFilter-type.selected").each(function(n, el) {
+					if(! types.contains($(el).text())) {
+						$(el).click();
+					}
+				});
+			}
+			this.requestUpdate(jEv);
+		},
+		_selectType_handler: function(jEv) {
+			var jEl = $(jEv.target).closest(".uiQueryFilter-type");
+			jEl.toggleClass("selected");
+			var type = jEl.text(), selected = jEl.hasClass("selected");
+			this.query.setType(type, selected);
+			if(selected) {
+				var indices = this.metadata.types[type].indices;
+				// es throws a 500 if searching an index for a type it does not contain - so we prevent that
+				this.el.find("DIV.uiQueryFilter-index.selected").each(function(n, el) {
+					if(! indices.contains($(el).text())) {
+						$(el).click();
+					}
+				});
+				// es throws a 500 if you specify types from different indices with _all
+				jEl.siblings(".uiQueryFilter-type.selected").forEach(function(el) {
+					if(this.metadata.types[$(el).text()].indices.intersection(indices).length === 0) {
+						$(el).click();
+					}
+				}, this);
+			}
+			this.requestUpdate(jEv);
+		},
+		_openFilter_handler: function(section) {
+			var field_name = section.config.title;
+			if(! section.loaded) {
+				var spec = this.getSpec(field_name);
+				if(spec.core_type === "string") {
+					section.body.append(this._textFilter_template(spec));
+				} else if(spec.core_type === "date") {
+					section.body.append(this._dateFilter_template(spec));
+					section.body.append(new ui.DateHistogram({ printEl: section.body.find("INPUT"), cluster: this.cluster, query: this.query, spec: spec }));
+				} else if(spec.core_type === "number") {
+					section.body.append(this._numericFilter_template(spec));
+				} else if(spec.core_type === 'boolean') {
+					section.body.append(this._booleanFilter_template(spec));
+				} else if (spec.core_type === 'multi_field') {
+					section.body.append(this._multiFieldFilter_template(section, spec));
+				} 
+				section.loaded = true;
+			}
+			section.on("animComplete", function(section) { section.body.find("INPUT").focus(); });
+		},
+		_textFilterChange_handler: function(jEv) {
+			var jEl = $(jEv.target).closest("INPUT");
+			var val = jEl.val();
+			var spec = jEl.data("spec");
+			var uqids = jEl.data("uqids") || [];
+			uqids.forEach(function(uqid) {
+				uqid && this.query.removeClause(uqid);
+			}, this);
+			if(val.length) {
+				if(jEl[0] === document.activeElement && jEl[0].selectionStart === jEl[0].selectionEnd) {
+					val = val.replace(new RegExp("(.{"+jEl[0].selectionStart+"})"), "$&*");
+				}
+				uqids = val.split(/\s+/).map(function(term) {
+					// Figure out the actual field name - needed for multi_field, because
+					// querying for "field.field" will not work. Simply "field" must be used
+					// if nothing is aliased.
+					var fieldNameParts = spec.field_name.split('.');
+					var part = fieldNameParts.length - 1;
+					var name = fieldNameParts[part];
+					while (part >= 1) {
+						if (fieldNameParts[part] !== fieldNameParts[part - 1]) {
+							name = fieldNameParts[part - 1] + "." + name;
+						}
+						part--;
+					}
+					return term && this.query.addClause(term, name, "wildcard", "must");
+				}, this);
+			}
+			jEl.data("uqids", uqids);
+			this.requestUpdate(jEv);
+		},
+		_dateFilterChange_handler: function(jEv) {
+			var jEl = $(jEv.target).closest("INPUT");
+			var val = jEl.val();
+			var spec = jEl.data("spec");
+			var uqid = jEl.data("uqid") || null;
+			var range = window.dateRangeParser.parse(val);
+			var lastRange = jEl.data("lastRange");
+			if(!range || (lastRange && lastRange.start === range.start && lastRange.end === range.end)) {
+				return;
+			}
+			uqid && this.query.removeClause(uqid);
+			if((range.start && range.end) === null) {
+				uqid = null;
+			} else {
+				var value = {};
+				if( range.start ) {
+					value["gte"] = range.start;
+				}
+				if( range.end ) {
+					value["lte"] = range.end;
+				}
+				uqid = this.query.addClause( value, spec.field_name, "range", "must");
+			}
+			jEl.data("lastRange", range);
+			jEl.siblings(".uiQueryFilter-rangeHintFrom")
+				.text(i18n.text("QueryFilter.DateRangeHint.from", range.start && new Date(range.start).toUTCString()));
+			jEl.siblings(".uiQueryFilter-rangeHintTo")
+				.text(i18n.text("QueryFilter.DateRangeHint.to", range.end && new Date(range.end).toUTCString()));
+			jEl.data("uqid", uqid);
+			this.requestUpdate(jEv);
+		},
+		_numericFilterChange_handler: function(jEv) {
+			var jEl = $(jEv.target).closest("INPUT");
+			var val = jEl.val();
+			var spec = jEl.data("spec");
+			var uqid = jEl.data("uqid") || null;
+			var lastRange = jEl.data("lastRange");
+			var range = (function(val) {
+				var ops = val.split(/->|<>|</).map( function(v) { return parseInt(v.trim(), 10); });
+				if(/<>/.test(val)) {
+					return { gte: (ops[0] - ops[1]), lte: (ops[0] + ops[1]) };
+				} else if(/->|</.test(val)) {
+					return { gte: ops[0], lte: ops[1] };
+				} else {
+					return { gte: ops[0], lte: ops[0] };
+				}
+			})(val || "");
+			if(!range || (lastRange && lastRange.lte === range.lte && lastRange.gte === range.gte)) {
+				return;
+			}
+			jEl.data("lastRange", range);
+			uqid && this.query.removeClause(uqid);
+			uqid = this.query.addClause( range, spec.field_name, "range", "must");
+			jEl.data("uqid", uqid);
+			this.requestUpdate(jEv);
+		},
+		_booleanFilterChange_handler: function( jEv ) {
+			var jEl = $(jEv.target).closest("SELECT");
+			var val = jEl.val();
+			var spec = jEl.data("spec");
+			var uqid = jEl.data("uqid") || null;
+			uqid && this.query.removeClause(uqid);
+			if(val === "true" || val === "false") {
+				jEl.data("uqid", this.query.addClause(val, spec.field_name, "term", "must") );
+			}
+			this.requestUpdate(jEv);
+		},
+		_main_template: function() {
+			return { tag: "DIV", id: this.id(), cls: "uiQueryFilter", children: [
+				this._aliasSelector_template(),
+				this._indexSelector_template(),
+				this._typesSelector_template(),
+				this._filters_template()
+			] };
+		},
+		_aliasSelector_template: function() {
+			var aliases = Object.keys(this.metadata.aliases).sort();
+			aliases.unshift( i18n.text("QueryFilter.AllIndices") );
+			return { tag: "DIV", cls: "uiQueryFilter-section uiQueryFilter-aliases", children: [
+				{ tag: "SELECT", onChange: this._selectAlias_handler, children: aliases.map(ut.option_template) }
+			] };
+		},
+		_indexSelector_template: function() {
+			var indices = Object.keys( this.metadata.indices ).sort();
+			return { tag: "DIV", cls: "uiQueryFilter-section uiQueryFilter-indices", children: [
+				{ tag: "HEADER", text: i18n.text("QueryFilter-Header-Indices") },
+				{ tag: "DIV", onClick: this._selectIndex_handler, children: indices.map( function( name ) {
+					return { tag: "DIV", cls: "uiQueryFilter-booble uiQueryFilter-index", text: name };
+				})}
+			] };
+		},
+		_typesSelector_template: function() {
+			var types = Object.keys( this.metadata.types ).sort();
+			return { tag: "DIV", cls: "uiQueryFilter-section uiQueryFilter-types", children: [
+				{ tag: "HEADER", text: i18n.text("QueryFilter-Header-Types") },
+				{ tag: "DIV", onClick: this._selectType_handler, children: types.map( function( name ) {
+					return { tag: "DIV", cls: "uiQueryFilter-booble uiQueryFilter-type", text: name };
+				})}
+			] };
+		},
+		_filters_template: function() {
+			var _metadataFields = this.metadata.fields;
+			var fields = Object.keys( _metadataFields ).sort()
+				.filter(function(d) { return (_metadataFields[d].core_type !== undefined); });
+			return { tag: "DIV", cls: "uiQueryFilter-section uiQueryFilter-filters", children: [
+				{ tag: "HEADER", text: i18n.text("QueryFilter-Header-Fields") },
+				{ tag: "DIV", children: fields.map( function(name ) {
+					return new app.ui.SidebarSection({
+						title: name,
+						help: this.helpTypeMap[this.metadata.fields[ name ].type],
+						onShow: this._openFilter_handler
+					});
+				}, this ) }
+			] };
+		},
+		_textFilter_template: function(spec) {
+			return { tag: "INPUT", data: { spec: spec }, onKeyup: this._textFilterChange_handler };
+		},
+		_dateFilter_template: function(spec) {
+			return { tag: "DIV", children: [
+				{ tag: "INPUT", data: { spec: spec }, onKeyup: this._dateFilterChange_handler },
+				{ tag: "PRE", cls: "uiQueryFilter-rangeHintFrom", text: i18n.text("QueryFilter.DateRangeHint.from", "")},
+				{ tag: "PRE", cls: "uiQueryFilter-rangeHintTo", text: i18n.text("QueryFilter.DateRangeHint.to", "") }
+			]};
+		},
+		_numericFilter_template: function(spec) {
+			return { tag: "INPUT", data: { spec: spec }, onKeyup: this._numericFilterChange_handler };
+		},
+		_booleanFilter_template: function(spec) {
+			return { tag: "SELECT", data: { spec: spec }, onChange: this._booleanFilterChange_handler,
+				children: [ i18n.text("QueryFilter.AnyValue"), "true", "false" ].map( function( val ) {
+					return { tag: "OPTION", value: val, text: val };
+				})
+			};
+		},
+		_multiFieldFilter_template: function(section, spec) {
+			return {
+				tag : "DIV", cls : "uiQueryFilter-subMultiFields", children : acx.eachMap(spec.fields, function(name, data) {
+					if (name === spec.field_name) {
+						section.config.title = spec.field_name + "." + name;
+						return this._openFilter_handler(section);
+					}
+					return new app.ui.SidebarSection({
+						title : data.field_name, help : this.helpTypeMap[data.type], onShow : this._openFilter_handler
+					});
+				}, this)
+			};
+		}	
+	});
+
+})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButton.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButton.js
new file mode 100644
index 0000000..a776e21
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButton.js
@@ -0,0 +1,41 @@
+(function( $, app, i18n ) {
+
+	var ui = app.ns("ui");
+
+	ui.RefreshButton = ui.SplitButton.extend({
+		defaults: {
+			timer: -1
+		},
+		init: function( parent ) {
+			this.config.label = i18n.text("General.RefreshResults");
+			this._super( parent );
+			this.set( this.config.timer );
+		},
+		set: function( value ) {
+			this.value = value;
+			window.clearInterval( this._timer );
+			if( this.value > 0 ) {
+				this._timer = window.setInterval( this._refresh_handler, this.value );
+			}
+		},
+		_click_handler: function() {
+			this._refresh_handler();
+		},
+		_select_handler: function( el, event ) {
+			this.set( event.value );
+			this.fire("change", this );
+		},
+		_refresh_handler: function() {
+			this.fire("refresh", this );
+		},
+		_getItems: function() {
+			return [
+				{ text: i18n.text("General.ManualRefresh"), value: -1 },
+				{ text: i18n.text("General.RefreshQuickly"), value: 100 },
+				{ text: i18n.text("General.Refresh5seconds"), value: 5000 },
+				{ text: i18n.text("General.Refresh1minute"), value: 60000 }
+			];
+		}
+	});
+
+})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonDemo.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonDemo.js
new file mode 100644
index 0000000..c37df9c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonDemo.js
@@ -0,0 +1,12 @@
+$( function() {
+
+	var ui = window.app.ns("ui");
+
+	window.builder = function() {
+		return new ui.RefreshButton({
+			onRefresh: function() { console.log("-> refresh", arguments ); },
+			onChange: function() { console.log("-> change", arguments ); }
+		});
+	};
+
+});
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonSpec.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonSpec.js
new file mode 100644
index 0000000..8cc325f
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonSpec.js
@@ -0,0 +1,92 @@
+describe("app.ui.RefreshButton", function() {
+
+	var RefreshButton = window.app.ui.RefreshButton;
+
+	var r, refresh_handler, change_handler;
+
+	function openMenuPanel( button, label ) {
+		button.el.find("BUTTON").eq(1).click();
+		$(".uiMenuPanel-label:contains(" + label + ")").click();
+		test.clock.tick(); // menuPanel -> bind _close_handler
+	}
+
+
+	beforeEach( function() {
+		test.clock.steal();
+		refresh_handler = jasmine.createSpy("refresh_handler");
+		change_handler = jasmine.createSpy("change_handler");
+		r = new RefreshButton({
+			onRefresh: refresh_handler,
+			onChange: change_handler
+		});
+		r.attach( document.body );
+	});
+
+	afterEach( function() {
+		r.remove();
+		test.clock.restore();
+	});
+
+	it("should have an initial default value", function() {
+		expect( r.value ).toBe( -1 );
+	});
+
+	it("should fire a refresh event after clicking the refresh button ", function() {
+		r.el.find("BUTTON").eq(0).click();
+
+		expect( refresh_handler ).toHaveBeenCalled();
+	});
+
+	it("should change the refresh rate when set it called", function() {
+		r.set( 100 );
+		expect( r.value ).toBe( 100 );
+	});
+
+	it("should set an interval when rate is set to a positive value", function() {
+		r.set( 100 );
+		test.clock.tick();
+		expect( refresh_handler.calls.count() ).toBe( 1 );
+	});
+
+	it("should not set an interval when rate is set to a non positive value", function() {
+		r.set( -1 );
+		test.clock.tick();
+		expect( refresh_handler.calls.count() ).toBe( 0 );
+	});
+
+	it("should fire a refresh event on intervals if refresh menu item is set to quickly", function() {
+		openMenuPanel( r, "quickly" );
+
+		expect( refresh_handler.calls.count() ).toBe( 0 );
+		test.clock.tick();
+		expect( refresh_handler.calls.count() ).toBe( 1 );
+		test.clock.tick();
+		expect( refresh_handler.calls.count() ).toBe( 2 );
+	});
+
+	it("should not fire refresh events when user selects Manual", function() {
+
+		openMenuPanel( r, "quickly" );
+
+		expect( refresh_handler.calls.count() ).toBe( 0 );
+		test.clock.tick();
+		expect( refresh_handler.calls.count() ).toBe( 1 );
+
+		openMenuPanel( r, "Manual" );
+
+		test.clock.tick();
+		expect( refresh_handler.calls.count() ).toBe( 1 );
+		test.clock.tick();
+		expect( refresh_handler.calls.count() ).toBe( 1 );
+	});
+
+	it("should fire a change event when a new refresh rate is selected", function() {
+		openMenuPanel( r, "quickly" );
+		expect( change_handler.calls.count() ).toBe( 1 );
+		expect( r.value ).toBe( 100 );
+		openMenuPanel( r, "Manual" );
+		expect( change_handler.calls.count() ).toBe( 2 );
+		expect( r.value ).toBe( -1 );
+	});
+
+});
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/resultTable/resultTable.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/resultTable/resultTable.js
new file mode 100644
index 0000000..6c7cf55
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/resultTable/resultTable.js
@@ -0,0 +1,55 @@
+(function( $, app ) {
+
+	var ui = app.ns("ui");
+
+	ui.ResultTable = ui.Table.extend({
+		defaults: {
+			width: 500,
+			height: 400
+		},
+
+		init: function() {
+			this._super();
+			this.on("rowClick", this._showPreview_handler);
+			this.selectedRow = null;
+			$(document).bind("keydown", this._nav_handler);
+		},
+		remove: function() {
+			$(document).unbind("keydown", this._nav_handler);
+			this._super();
+		},
+		attach: function(parent) {
+			if(parent) {
+				var height = parent.height() || ( $(document).height() - parent.offset().top - 41 ); // 41 = height in px of .uiTable-tools + uiTable-header
+				var width = parent.width();
+				this.el.width( width );
+				this.body.width( width ).height( height );
+			}
+			this._super(parent);
+		},
+		showPreview: function(row) {
+			row.addClass("selected");
+			this.preview = new app.ui.JsonPanel({
+				title: i18n.text("Browser.ResultSourcePanelTitle"),
+				json: row.data("row")._source,
+				onClose: function() { row.removeClass("selected"); }
+			});
+		},
+		_nav_handler: function(jEv) {
+			if(jEv.keyCode !== 40 && jEv.keyCode !== 38) {
+				return;
+			}
+			this.selectedRow && this.preview && this.preview.remove();
+			if(jEv.keyCode === 40) { // up arrow
+				this.selectedRow = this.selectedRow ? this.selectedRow.next("TR") : this.body.find("TR:first");
+			} else if(jEv.keyCode === 38) { // down arrow
+				this.selectedRow = this.selectedRow ? this.selectedRow.prev("TR") : this.body.find("TR:last");
+			}
+			this.selectedRow && this.showPreview(this.selectedRow);
+		},
+		_showPreview_handler: function(obj, data) {
+			this.showPreview(this.selectedRow = data.row);
+		}
+	});
+
+})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.css
new file mode 100644
index 0000000..7315527
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.css
@@ -0,0 +1,11 @@
+.uiSelectMenuPanel .uiMenuPanel-label {
+	margin-left: 1em;
+	padding-left: 4px;
+}
+
+.uiSelectMenuPanel .uiMenuPanel-item.selected .uiMenuPanel-label:before {
+	content: "\2713";
+	width: 12px;
+	margin-left: -12px;
+	display: inline-block;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.js
new file mode 100644
index 0000000..8cbecc5
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.js
@@ -0,0 +1,33 @@
+(function( app ) {
+
+	var ui = app.ns("ui");
+
+	ui.SelectMenuPanel = ui.MenuPanel.extend({
+		defaults: {
+			items: [],		// (required) an array of menu items
+			value: null
+		},
+		_baseCls: "uiSelectMenuPanel uiMenuPanel",
+		init: function() {
+			this.value = this.config.value;
+			this._super();
+		},
+		_getItems: function() {
+			return this.config.items.map( function( item ) {
+				return {
+					text: item.text,
+					selected: this.value === item.value,
+					onclick: function( jEv ) {
+						var el = $( jEv.target ).closest("LI");
+						el.parent().children().removeClass("selected");
+						el.addClass("selected");
+						this.fire( "select", this, { value: item.value } );
+						this.value = item.value;
+					}.bind(this)
+				};
+			}, this );
+
+		}
+	});
+
+})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.css
new file mode 100644
index 0000000..654389f
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.css
@@ -0,0 +1,28 @@
+.uiSidebarSection-head {
+	background-color: #b9cfff;
+	background-image: url('data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAcCAMAAABifa5OAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAMAUExURQUCFf///wICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4ODg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiMjIyQkJCUlJSYmJicnJygoKCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0NDU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVVVVZWVldXV1hYWFlZWVpaWltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2RkZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1tbW5ubm9vb3BwcHFxcXJycnNzc3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CAgIGBgYKCgoODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+vr7CwsLGxsbKysrOzs7S0tLW1tba2tre3t7i4uLm5ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///2Oyy/cAAAACdFJOU/8A5bcwSgAAADxJREFUeNq8zzkOACAMA8Hd/3+agiuRcIsrRopIjArOoLK1QAMNNBCRPkhLyzkn35Bjfd7JR1Nr09NoDACnvgDl1zlzoQAAAABJRU5ErkJggg==');
+	background-repeat: no-repeat;
+	background-position: 2px 5px;
+	margin-bottom: 1px;
+	padding: 3px 3px 3px 17px;
+	cursor: pointer;
+}
+
+.shown > .uiSidebarSection-head {
+	background-position: 2px -13px;
+}
+
+.uiSidebarSection-body {
+	margin-bottom: 3px;
+	display: none;
+}
+
+.uiSidebarSection-help {
+	text-shadow: #228 1px 1px 2px;
+	color: blue;
+	cursor: pointer;
+}
+
+.uiSidebarSection-help:hover {
+	text-decoration: underline;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.js
new file mode 100644
index 0000000..d5ab984
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.js
@@ -0,0 +1,41 @@
+(function( $, app, i18n ) {
+
+	var ui = app.ns("ui");
+
+	ui.SidebarSection = ui.AbstractWidget.extend({
+		defaults: {
+			title: "",
+			help: null,
+			body: null,
+			open: false
+		},
+		init: function() {
+			this._super();
+			this.el = $.joey( this._main_template() );
+			this.body = this.el.children(".uiSidebarSection-body");
+			this.config.open && ( this.el.addClass("shown") && this.body.css("display", "block") );
+		},
+		_showSection_handler: function( ev ) {
+			var shown = $( ev.target ).closest(".uiSidebarSection")
+				.toggleClass("shown")
+					.children(".uiSidebarSection-body").slideToggle(200, function() { this.fire("animComplete", this); }.bind(this))
+				.end()
+				.hasClass("shown");
+			this.fire(shown ? "show" : "hide", this);
+		},
+		_showHelp_handler: function( ev ) {
+			new ui.HelpPanel({ref: this.config.help});
+			ev.stopPropagation();
+		},
+		_main_template: function() { return (
+			{ tag: "DIV", cls: "uiSidebarSection", children: [
+				(this.config.title && { tag: "DIV", cls: "uiSidebarSection-head", onclick: this._showSection_handler, children: [
+					this.config.title,
+					( this.config.help && { tag: "SPAN", cls: "uiSidebarSection-help pull-right", onclick: this._showHelp_handler, text: i18n.text("General.HelpGlyph") } )
+				] }),
+				{ tag: "DIV", cls: "uiSidebarSection-body", children: [ this.config.body ] }
+			] }
+		); }
+	});
+
+})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.css
new file mode 100644
index 0000000..e8d2752
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.css
@@ -0,0 +1,33 @@
+.uiSplitButton {
+	white-space: nowrap;
+}
+
+.uiSplitButton .uiButton:first-child {
+	margin-right: 0;
+	display: inline-block;
+}
+
+.uiSplitButton .uiButton:first-child .uiButton-content {
+	border-right-width: 1;
+	border-right-color: #5296c7;
+	border-top-right-radius: 0;
+	border-bottom-right-radius: 0;
+}
+
+.uiSplitButton .uiMenuButton {
+	margin-left: 0;
+}
+
+.uiSplitButton .uiButton:last-child .uiButton-content {
+	border-radius: 2px;
+	border-left-width: 1;
+	border-left-color: #96c6eb;
+	border-top-left-radius: 0;
+	border-bottom-left-radius: 0;
+	height: 20px;
+}
+
+.uiSplitButton .uiButton:last-child .uiButton-label {
+	padding: 2px 17px 2px 6px;
+	margin-left: -8px;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.js
new file mode 100644
index 0000000..8785b99
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.js
@@ -0,0 +1,54 @@
+(function( $, app ) {
+
+	var ui = app.ns("ui");
+
+	ui.SplitButton = ui.AbstractWidget.extend({
+		defaults: {
+			items: [],
+			label: ""
+		},
+		_baseCls: "uiSplitButton",
+		init: function( parent ) {
+			this._super( parent );
+			this.value = null;
+			this.button = new ui.Button({
+				label: this.config.label,
+				onclick: this._click_handler
+			});
+			this.menu = new ui.SelectMenuPanel({
+				value: this.config.value,
+				items: this._getItems(),
+				onSelect: this._select_handler
+			});
+			this.menuButton = new ui.MenuButton({
+				label: "\u00a0",
+				menu: this.menu
+			});
+			this.el = $.joey(this._main_template());
+		},
+		remove: function() {
+			this.menu.remove();
+		},
+		disable: function() {
+			this.button.disable();
+		},
+		enable: function() {
+			this.button.enable();
+		},
+		_click_handler: function() {
+			this.fire("click", this, { value: this.value } );
+		},
+		_select_handler: function( panel, event ) {
+			this.fire( "select", this, event );
+		},
+		_getItems: function() {
+			return this.config.items;
+		},
+		_main_template: function() {
+			return { tag: "DIV", cls: this._baseCls, children: [
+				this.button, this.menuButton
+			] };
+		}
+	});
+
+})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButtonDemo.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButtonDemo.js
new file mode 100644
index 0000000..76b6fa2
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButtonDemo.js
@@ -0,0 +1,16 @@
+$( function() {
+
+	var ui = window.app.ns("ui");
+
+	window.builder = function() {
+		return new ui.SplitButton({
+			label: "Default",
+			items: [
+				{ label: "Action" },
+				{ label: "Another Action" },
+				{ label: "Selected", selected: true }
+			]
+		});
+	};
+
+});
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.css
new file mode 100644
index 0000000..5022045
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.css
@@ -0,0 +1,7 @@
+.uiStructuredQuery {
+	padding: 10px;
+}
+
+.uiStructuredQuery-out {
+	min-height: 30px;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.js
new file mode 100644
index 0000000..aeb4b6b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.js
@@ -0,0 +1,95 @@
+(function( $, app, i18n ) {
+
+	var ui = app.ns("ui");
+	var data = app.ns("data");
+
+	var StructuredQuery = ui.AbstractWidget.extend({
+		defaults: {
+			cluster: null  // (required) instanceof app.services.Cluster
+		},
+		_baseCls: "uiStructuredQuery",
+		init: function(parent) {
+			this._super();
+			this.selector = new ui.IndexSelector({
+				onIndexChanged: this._indexChanged_handler,
+				cluster: this.config.cluster
+			});
+			this.el = $(this._main_template());
+			this.out = this.el.find("DIV.uiStructuredQuery-out");
+			this.attach( parent );
+		},
+		
+		_indexChanged_handler: function( index ) {
+			this.filter && this.filter.remove();
+			this.filter = new ui.FilterBrowser({
+				cluster: this.config.cluster,
+				index: index,
+				onStartingSearch: function() { this.el.find("DIV.uiStructuredQuery-out").text( i18n.text("General.Searching") ); this.el.find("DIV.uiStructuredQuery-src").hide(); }.bind(this),
+				onSearchSource: this._searchSource_handler,
+				onResults: this._results_handler
+			});
+			this.el.find(".uiStructuredQuery-body").append(this.filter);
+		},
+		
+		_results_handler: function( filter, event ) {
+			var typeMap = {
+				"json": this._jsonResults_handler,
+				"table": this._tableResults_handler,
+				"csv": this._csvResults_handler
+			};
+			typeMap[ event.type ].call( this, event.data, event.metadata );
+		},
+		_jsonResults_handler: function( results ) {
+			this.el.find("DIV.uiStructuredQuery-out").empty().append( new ui.JsonPretty({ obj: results }));
+		},
+		_csvResults_handler: function( results ) {
+			this.el.find("DIV.uiStructuredQuery-out").empty().append( new ui.CSVTable({ results: results }));
+		},
+		_tableResults_handler: function( results, metadata ) {
+			// hack up a QueryDataSourceInterface so that StructuredQuery keeps working without using a Query object
+			var qdi = new data.QueryDataSourceInterface({ metadata: metadata, query: new data.Query() });
+			var tab = new ui.Table( {
+				store: qdi,
+				height: 400,
+				width: this.out.innerWidth()
+			} ).attach(this.out.empty());
+			qdi._results_handler(qdi.config.query, results);
+		},
+		
+		_showRawJSON : function() {
+			if($("#rawJsonText").length === 0) {
+				var hiddenButton = $("#showRawJSON");
+				var jsonText = $({tag: "P", type: "p", id: "rawJsonText"});
+				jsonText.text(hiddenButton[0].value);
+				hiddenButton.parent().append(jsonText);
+			}
+		},
+		
+		_searchSource_handler: function(src) {
+			var searchSourceDiv = this.el.find("DIV.uiStructuredQuery-src");
+			searchSourceDiv.empty().append(new app.ui.JsonPretty({ obj: src }));
+			if(typeof JSON !== "undefined") {
+				var showRawJSON = $({ tag: "BUTTON", type: "button", text: i18n.text("StructuredQuery.ShowRawJson"), id: "showRawJSON", value: JSON.stringify(src), onclick: this._showRawJSON });
+				searchSourceDiv.append(showRawJSON);
+			}
+			searchSourceDiv.show();
+		},
+		
+		_main_template: function() {
+			return { tag: "DIV", cls: this._baseCls, children: [
+				this.selector,
+				{ tag: "DIV", cls: "uiStructuredQuery-body" },
+				{ tag: "DIV", cls: "uiStructuredQuery-src", css: { display: "none" } },
+				{ tag: "DIV", cls: "uiStructuredQuery-out" }
+			]};
+		}
+	});
+
+	ui.StructuredQuery = ui.Page.extend({
+		init: function() {
+			this.q = new StructuredQuery( this.config );
+			this.el = this.q.el;
+		}
+	});
+
+})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/table/table.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/table/table.css
new file mode 100644
index 0000000..ea8e0cf
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/table/table.css
@@ -0,0 +1,92 @@
+.uiTable TABLE {
+	border-collapse: collapse;
+}
+
+.uiTable-body {
+	overflow-y: scroll;
+	overflow-x: auto;
+}
+
+.uiTable-headers {
+	overflow-x: hidden;
+}
+
+.uiTable-body TD {
+	white-space: nowrap;
+}
+
+.uiTable-body .uiTable-header-row TH,
+.uiTable-body .uiTable-header-row TH DIV {
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.uiTable-body .uiTable-header-cell > DIV {
+	height: 0;
+	overflow: hidden;
+}
+
+.uiTable-headercell-menu {
+	float: right;
+}
+
+.uiTable-tools {
+	padding: 3px 4px;
+	height: 14px;
+}
+
+.uiTable-header-row {
+	background: #ddd;
+	background: -moz-linear-gradient(top, #eee, #ccc);
+	background: -webkit-linear-gradient(top, #eee, #ccc);
+}
+
+.uiTable-headercell-text {
+	margin-right: 20px;
+}
+
+.uiTable-headercell-menu {
+	display: none;
+}
+
+.uiTable-header-row TH {
+	border-right: 1px solid #bbb;
+	padding: 0;
+	text-align: left;
+}
+
+.uiTable-header-row TH > DIV {
+	padding: 3px 4px;
+	border-right: 1px solid #eee;
+}
+
+.uiTable-headerEndCap > DIV {
+	width: 19px;
+}
+
+.uiTable-header-row .uiTable-sort {
+	background: #ccc;
+	background: -moz-linear-gradient(top, #bebebe, #ccc);
+	background: -webkit-linear-gradient(top, #bebebe, #ccc);
+}
+.uiTable-header-row TH.uiTable-sort > DIV {
+	border-right: 1px solid #ccc;
+}
+
+.uiTable-sort .uiTable-headercell-menu {
+	display: block;
+}
+
+.uiTable TABLE TD {
+	border-right: 1px solid transparent;
+	padding: 3px 4px;
+}
+
+.uiTable-body TABLE TR:nth-child(even) {
+	background: #f3f3f3;
+}
+
+.uiTable-body TABLE TR.selected {
+	color: white;
+	background: #6060f1;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/table/table.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/table/table.js
new file mode 100644
index 0000000..eb847a0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/table/table.js
@@ -0,0 +1,102 @@
+( function( $, app ) {
+
+	var ui = app.ns("ui");
+
+	ui.Table = ui.AbstractWidget.extend({
+		defaults: {
+			store: null, // (required) implements interface app.data.DataSourceInterface
+			height: 0,
+			width: 0
+		},
+		_baseCls: "uiTable",
+		init: function(parent) {
+			this._super();
+			this.initElements(parent);
+			this.config.store.on("data", this._data_handler);
+		},
+		attach: function(parent) {
+			if(parent) {
+				this._super(parent);
+				this._reflow();
+			}
+		},
+		initElements: function(parent) {
+			this.el = $.joey(this._main_template());
+			this.body = this.el.find(".uiTable-body");
+			this.headers = this.el.find(".uiTable-headers");
+			this.tools = this.el.find(".uiTable-tools");
+			this.attach( parent );
+		},
+		_data_handler: function(store) {
+			this.tools.text(store.summary);
+			this.headers.empty().append(this._header_template(store.columns));
+			this.body.empty().append(this._body_template(store.data, store.columns));
+			this._reflow();
+		},
+		_reflow: function() {
+			var firstCol = this.body.find("TR:first TH.uiTable-header-cell > DIV"),
+					headers = this.headers.find("TR:first TH.uiTable-header-cell > DIV");
+			for(var i = 0; i < headers.length; i++) {
+				$(headers[i]).width( $(firstCol[i]).width() );
+			}
+			this._scroll_handler();
+		},
+		_scroll_handler: function(ev) {
+			this.el.find(".uiTable-headers").scrollLeft(this.body.scrollLeft());
+		},
+		_dataClick_handler: function(ev) {
+			var row = $(ev.target).closest("TR");
+			if(row.length) {
+				this.fire("rowClick", this, { row: row } );
+			}
+		},
+		_headerClick_handler: function(ev) {
+			var header = $(ev.target).closest("TH.uiTable-header-cell");
+			if(header.length) {
+				this.fire("headerClick", this, { header: header, column: header.data("column"), dir: header.data("dir") });
+			}
+		},
+		_main_template: function() {
+			return { tag: "DIV", id: this.id(), css: { width: this.config.width + "px" }, cls: this._baseCls, children: [
+				{ tag: "DIV", cls: "uiTable-tools" },
+				{ tag: "DIV", cls: "uiTable-headers", onclick: this._headerClick_handler },
+				{ tag: "DIV", cls: "uiTable-body",
+					onclick: this._dataClick_handler,
+					onscroll: this._scroll_handler,
+					css: { height: this.config.height + "px", width: this.config.width + "px" }
+				}
+			] };
+		},
+		_header_template: function(columns) {
+			var ret = { tag: "TABLE", children: [ this._headerRow_template(columns) ] };
+			ret.children[0].children.push(this._headerEndCap_template());
+			return ret;
+		},
+		_headerRow_template: function(columns) {
+			return { tag: "TR", cls: "uiTable-header-row", children: columns.map(function(column) {
+				var dir = ((this.config.store.sort.column === column) && this.config.store.sort.dir) || "none";
+				return { tag: "TH", data: { column: column, dir: dir }, cls: "uiTable-header-cell" + ((dir !== "none") ? " uiTable-sort" : ""), children: [
+					{ tag: "DIV", children: [
+						{ tag: "DIV", cls: "uiTable-headercell-menu", text: dir === "asc" ? "\u25b2" : "\u25bc" },
+						{ tag: "DIV", cls: "uiTable-headercell-text", text: column }
+					]}
+				]};
+			}, this)};
+		},
+		_headerEndCap_template: function() {
+			return { tag: "TH", cls: "uiTable-headerEndCap", children: [ { tag: "DIV" } ] };
+		},
+		_body_template: function(data, columns) {
+			return { tag: "TABLE", children: []
+				.concat(this._headerRow_template(columns))
+				.concat(data.map(function(row) {
+					return { tag: "TR", data: { row: row }, cls: "uiTable-row", children: columns.map(function(column){
+						return { tag: "TD", cls: "uiTable-cell", children: [ { tag: "DIV", text: (row[column] || "").toString() } ] };
+					})};
+				}))
+			};
+		}
+
+	});
+
+})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/textField/textField.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/textField/textField.js
new file mode 100644
index 0000000..c734896
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/textField/textField.js
@@ -0,0 +1,24 @@
+(function( app ) {
+
+	var ui = app.ns("ui");
+
+	ui.TextField = ui.AbstractField.extend({
+		init: function() {
+			this._super();
+		},
+		_keyup_handler: function() {
+			this.fire("change", this );
+		},
+		_main_template: function() {
+			return { tag: "DIV", id: this.id(), cls: "uiField uiTextField", children: [
+				{ tag: "INPUT",
+					type: "text",
+					name: this.config.name,
+					placeholder: this.config.placeholder,
+					onkeyup: this._keyup_handler
+				}
+			]};
+		}
+	});
+
+})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/textField/textFieldDemo.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/textField/textFieldDemo.js
new file mode 100644
index 0000000..25790d4
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/textField/textFieldDemo.js
@@ -0,0 +1,13 @@
+$( function() {
+
+	var ui = window.app.ns("ui");
+
+	window.builder = function() { return (
+		{ tag: "DIV", children: [
+			new ui.TextField({}),
+			new ui.TextField({ placeholder: "placeholder" }),
+			new ui.TextField({ onchange: function( tf ) { console.log( tf.val() ); } })
+		] }
+	); };
+
+});
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.css
new file mode 100644
index 0000000..e5cf72f
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.css
@@ -0,0 +1,24 @@
+.uiToolbar {
+	height: 28px;
+	background: #fdfefe;
+	background: -moz-linear-gradient(top, #fdfefe, #eaedef);
+	background: -webkit-linear-gradient(top, #fdfefe, #eaedef);
+	border-bottom: 1px solid #d2d5d7;
+	padding: 3px 10px;
+}
+
+.uiToolbar H2 {
+	display: inline-block;
+	font-size: 120%;
+	margin: 0;
+	padding: 5px 20px 5px 0;
+}
+
+.uiToolbar .uiTextField {
+	display: inline-block;
+}
+
+.uiToolbar .uiTextField INPUT {
+	padding-top: 2px;
+	padding-bottom: 5px;
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.js
new file mode 100644
index 0000000..d64eefe
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.js
@@ -0,0 +1,25 @@
+(function( $, app ) {
+
+	var ui = app.ns("ui");
+
+	ui.Toolbar = ui.AbstractWidget.extend({
+		defaults: {
+			label: "",
+			left: [],
+			right: []
+		},
+		init: function(parent) {
+			this._super();
+			this.el = $.joey(this._main_template());
+		},
+		_main_template: function() {
+			return { tag: "DIV", cls: "uiToolbar", children: [
+				{ tag: "DIV", cls: "pull-left", children: [
+					{ tag: "H2", text: this.config.label }
+				].concat(this.config.left) },
+				{ tag: "DIV", cls: "pull-right", children: this.config.right }
+			]};
+		}
+	});
+
+})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/class.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/class.js
new file mode 100644
index 0000000..8014263
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/class.js
@@ -0,0 +1,50 @@
+/**
+ * base class for creating inheritable classes
+ * based on resigs 'Simple Javascript Inheritance Class' (based on base2 and prototypejs)
+ * modified with static super and auto config
+ * @name Class
+ * @constructor
+ */
+(function( $, app ){
+
+	var ux = app.ns("ux");
+
+	var initializing = false, fnTest = /\b_super\b/;
+
+	ux.Class = function(){};
+
+	ux.Class.extend = function(prop) {
+		function Class() {
+			if(!initializing) {
+				var args = Array.prototype.slice.call(arguments);
+				this.config = $.extend( function(t) { // automatically construct a config object based on defaults and last item passed into the constructor
+					return $.extend(t._proto && t._proto() && arguments.callee(t._proto()) || {}, t.defaults);
+				} (this) , args.pop() );
+				this.init && this.init.apply(this, args); // automatically run the init function when class created
+			}
+		}
+
+		initializing = true;
+		var prototype = new this();
+		initializing = false;
+		
+		var _super = this.prototype;
+		prototype._proto = function() {
+			return _super;
+		};
+
+		for(var name in prop) {
+			prototype[name] = typeof prop[name] === "function" && typeof _super[name] === "function" && fnTest.test(prop[name]) ?
+				(function(name, fn){
+					return function() { this._super = _super[name]; return fn.apply(this, arguments); };
+				})(name, prop[name]) : prop[name];
+		}
+
+		Class.prototype = prototype;
+		Class.constructor = Class;
+
+		Class.extend = arguments.callee; // make class extendable
+
+		return Class;
+	};
+})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/dragdrop.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/dragdrop.js
new file mode 100644
index 0000000..17ca9be
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/dragdrop.js
@@ -0,0 +1,124 @@
+(function( $, app ) {
+
+	var ux = app.ns("ux");
+
+	/**
+	 * Provides drag and drop functionality<br>
+	 * a DragDrop instance is created for each usage pattern and then used over and over again<br>
+	 * first a dragObj is defined - this is the jquery node that will be dragged around<br>
+	 * second, the event callbacks are defined - these allow you control the ui during dragging and run functions when successfully dropping<br>
+	 * thirdly drop targets are defined - this is a list of DOM nodes, the constructor works in one of two modes:
+	 * <li>without targets - objects can be picked up and dragged around, dragStart and dragStop events fire</li>
+	 * <li>with targets - as objects are dragged over targets dragOver, dragOut and DragDrop events fire
+	 * to start dragging call the DragDrop.pickup_handler() function, dragging stops when the mouse is released.
+	 * @constructor
+	 * The following options are supported
+	 * <dt>targetSelector</dt>
+	 *   <dd>an argument passed directly to jquery to create a list of targets, as such it can be a CSS style selector, or an array of DOM nodes<br>if target selector is null the DragDrop does Drag only and will not fire dragOver dragOut and dragDrop events</dd>
+	 * <dt>pickupSelector</dt>
+	 *   <dd>a jquery selector. The pickup_handler is automatically bound to matched elements (eg clicking on these elements starts the drag). if pickupSelector is null, the pickup_handler must be manually bound <code>$(el).bind("mousedown", dragdrop.pickup_handler)</code></dd>
+	 * <dt>dragObj</dt>
+	 *   <dd>the jQuery element to drag around when pickup is called. If not defined, dragObj must be set in onDragStart</dd>
+	 * <dt>draggingClass</dt>
+	 *   <dd>the class(es) added to items when they are being dragged</dd>
+	 * The following observables are supported
+	 * <dt>dragStart</dt>
+	 *   <dd>a callback when start to drag<br><code>function(jEv)</code></dd>
+	 * <dt>dragOver</dt>
+	 *   <dd>a callback when we drag into a target<br><code>function(jEl)</code></dd>
+	 * <dt>dragOut</dt>
+	 *   <dd>a callback when we drag out of a target, or when we drop over a target<br><code>function(jEl)</code></dd>
+	 * <dt>dragDrop</dt>
+	 *   <dd>a callback when we drop on a target<br><code>function(jEl)</code></dd>
+	 * <dt>dragStop</dt>
+	 *   <dd>a callback when we stop dragging<br><code>function(jEv)</code></dd>
+	 */
+	ux.DragDrop = ux.Observable.extend({
+		defaults : {
+			targetsSelector : null,
+			pickupSelector:   null,
+			dragObj :         null,
+			draggingClass :   "dragging"
+		},
+
+		init: function(options) {
+			this._super(); // call the class initialiser
+		
+			this.drag_handler = this.drag.bind(this);
+			this.drop_handler = this.drop.bind(this);
+			this.pickup_handler = this.pickup.bind(this);
+			this.targets = [];
+			this.dragObj = null;
+			this.dragObjOffset = null;
+			this.currentTarget = null;
+			if(this.config.pickupSelector) {
+				$(this.config.pickupSelector).bind("mousedown", this.pickup_handler);
+			}
+		},
+
+		drag : function(jEv) {
+			jEv.preventDefault();
+			var mloc = acx.vector( this.lockX || jEv.pageX, this.lockY || jEv.pageY );
+			this.dragObj.css(mloc.add(this.dragObjOffset).asOffset());
+			if(this.targets.length === 0) {
+				return;
+			}
+			if(this.currentTarget !== null && mloc.within(this.currentTarget[1], this.currentTarget[2])) {
+				return;
+			}
+			if(this.currentTarget !== null) {
+				this.fire('dragOut', this.currentTarget[0]);
+				this.currentTarget = null;
+			}
+			for(var i = 0; i < this.targets.length; i++) {
+				if(mloc.within(this.targets[i][1], this.targets[i][2])) {
+					this.currentTarget = this.targets[i];
+					break;
+				}
+			}
+			if(this.currentTarget !== null) {
+				this.fire('dragOver', this.currentTarget[0]);
+			}
+		},
+		
+		drop : function(jEv) {
+			$(document).unbind("mousemove", this.drag_handler);
+			$(document).unbind("mouseup", this.drop_handler);
+			this.dragObj.removeClass(this.config.draggingClass);
+			if(this.currentTarget !== null) {
+				this.fire('dragOut', this.currentTarget[0]);
+				this.fire('dragDrop', this.currentTarget[0]);
+			}
+			this.fire('dragStop', jEv);
+			this.dragObj = null;
+		},
+		
+		pickup : function(jEv, opts) {
+			$.extend(this.config, opts);
+			this.fire('dragStart', jEv);
+			this.dragObj = this.dragObj || this.config.dragObj;
+			this.dragObjOffset = this.config.dragObjOffset || acx.vector(this.dragObj.offset()).sub(jEv.pageX, jEv.pageY);
+			this.lockX = this.config.lockX ? jEv.pageX : 0;
+			this.lockY = this.config.lockY ? jEv.pageY : 0;
+			this.dragObj.addClass(this.config.draggingClass);
+			if(!this.dragObj.get(0).parentNode || this.dragObj.get(0).parentNode.nodeType === 11) { // 11 = document fragment
+				$(document.body).append(this.dragObj);
+			}
+			if(this.config.targetsSelector) {
+				this.currentTarget = null;
+				var targets = ( this.targets = [] );
+				// create an array of elements optimised for rapid collision detection calculation
+				$(this.config.targetsSelector).each(function(i, el) {
+					var jEl = $(el);
+					var tl = acx.vector(jEl.offset());
+					var br = tl.add(jEl.width(), jEl.height());
+					targets.push([jEl, tl, br]);
+				});
+			}
+			$(document).bind("mousemove", this.drag_handler);
+			$(document).bind("mouseup", this.drop_handler);
+			this.drag_handler(jEv);
+		}
+	});
+
+})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/fieldCollection.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/fieldCollection.js
new file mode 100644
index 0000000..ce4064f
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/fieldCollection.js
@@ -0,0 +1,25 @@
+(function( app ) {
+
+	var ux = app.ns("ux");
+
+	ux.FieldCollection = ux.Observable.extend({
+		defaults: {
+			fields: []	// the collection of fields
+		},
+		init: function() {
+			this._super();
+			this.fields = this.config.fields;
+		},
+		validate: function() {
+			return this.fields.reduce(function(r, field) {
+				return r && field.validate();
+			}, true);
+		},
+		getData: function(type) {
+			return this.fields.reduce(function(r, field) {
+				r[field.name] = field.val(); return r;
+			}, {});
+		}
+	});
+
+})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/observable.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/observable.js
new file mode 100644
index 0000000..0130397
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/observable.js
@@ -0,0 +1,46 @@
+(function( app ) {
+
+	var ux = app.ns("ux");
+
+	ux.Observable = ux.Class.extend((function() {
+		return {
+			init: function() {
+				this.observers = {};
+				for( var opt in this.config ) { // automatically install observers that are defined in the configuration
+					if( opt.indexOf( 'on' ) === 0 ) {
+						this.on( opt.substring(2) , this.config[ opt ] );
+					}
+				}
+			},
+			_getObs: function( type ) {
+				return ( this.observers[ type.toLowerCase() ] || ( this.observers[ type.toLowerCase() ] = [] ) );
+			},
+			on: function( type, fn, params, thisp ) {
+				this._getObs( type ).push( { "cb" : fn, "args" : params || [] , "cx" : thisp || this } );
+				return this;
+			},
+			fire: function( type ) {
+				var params = Array.prototype.slice.call( arguments, 1 );
+				this._getObs( type ).slice().forEach( function( ob ) {
+					ob["cb"].apply( ob["cx"], ob["args"].concat( params ) );
+				} );
+				return this;
+			},
+			removeAllObservers: function() {
+				this.observers = {};
+			},
+			removeObserver: function( type, fn ) {
+				var obs = this._getObs( type ),
+					index = obs.reduce( function(p, t, i) { return (t.cb === fn) ? i : p; }, -1 );
+				if(index !== -1) {
+					obs.splice( index, 1 );
+				}
+				return this; // make observable functions chainable
+			},
+			hasObserver: function( type ) {
+				return !! this._getObs( type ).length;
+			}
+		};
+	})());
+
+})( this.app );
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/singleton.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/singleton.js
new file mode 100644
index 0000000..953e4a0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/singleton.js
@@ -0,0 +1,21 @@
+(function( app ) {
+
+	var ux = app.ns("ux");
+
+	var extend = ux.Observable.extend;
+	var instance = function() {
+		if( ! ("me" in this) ) {
+			this.me = new this();
+		}
+		return this.me;
+	};
+
+	ux.Singleton = ux.Observable.extend({});
+
+	ux.Singleton.extend = function() {
+		var Self = extend.apply( this, arguments );
+		Self.instance = instance;
+		return Self;
+	};
+
+})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/singletonSpec.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/singletonSpec.js
new file mode 100644
index 0000000..96ef6a2
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/singletonSpec.js
@@ -0,0 +1,41 @@
+describe("app.ux.singleton", function(){
+
+var Singleton = window.app.ux.Singleton;
+
+	describe("creating a singleton", function() {
+		var X = Singleton.extend({
+			foo: function() {
+				return "bar";
+			}
+		});
+
+		var Y = Singleton.extend({
+			bar: function() {
+				return "baz";
+			}
+		});
+
+		it("should have properties like a normal class", function() {
+			var a = X.instance();
+
+			expect( a instanceof X ).toBe( true );
+			expect( a.foo() ).toBe( "bar" );
+		});
+
+		it("should return single instance each time instance() is called", function() {
+			var a = X.instance();
+			var b = X.instance();
+
+			expect( a ).toBe( b );
+		});
+
+		it("should not share instances with different singletons", function() {
+			var a = X.instance();
+			var c = Y.instance();
+
+			expect( a ).not.toBe( c );
+		});
+
+	});
+
+});
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/table.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/table.css
new file mode 100644
index 0000000..7d829c4
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/table.css
@@ -0,0 +1,20 @@
+TABLE.table {
+	border-collapse: collapse;
+}
+
+
+TABLE.table TH {
+	font-weight: normal;
+	text-align: left;
+	vertical-align: middle;
+}
+
+TABLE.table TBODY.striped TR:nth-child(odd) {
+	background: #eee;
+}
+
+TABLE.table H3 {
+	margin: 0;
+	font-weight: bold;
+	font-size: 140%;
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/templates/templateSpec.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/templates/templateSpec.js
new file mode 100644
index 0000000..db76b13
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/templates/templateSpec.js
@@ -0,0 +1,81 @@
+describe("app.ut.byteSize_template", function() {
+
+	describe("byteSize_template()", function() {
+		var byteSize_template = window.app.ut.byteSize_template;
+
+		it("should postfix with a B and have not decimal for number less than 1000", function() {
+			expect( byteSize_template( 0 ) ).toBe( "0B" );
+			expect( byteSize_template( 1 ) ).toBe( "1B" );
+			expect( byteSize_template( 10 ) ).toBe( "10B" );
+			expect( byteSize_template( 100 ) ).toBe( "100B" );
+			expect( byteSize_template( 999 ) ).toBe( "999B" );
+		});
+
+		it("should have 0.xxX for values between 1000 and 1023", function() {
+			expect( byteSize_template( 1000  ) ).toBe( "0.98ki" );
+			expect( byteSize_template( 1024 * 1000 ) ).toBe( "0.98Mi" );
+		});
+
+		it("should always have three significant digits", function() {
+			expect( byteSize_template( 1023  ) ).toBe( "1.00ki" );
+			expect( byteSize_template( 1024  ) ).toBe( "1.00ki" );
+			expect( byteSize_template( 1025  ) ).toBe( "1.00ki" );
+			expect( byteSize_template( 1024 * 5 ) ).toBe( "5.00ki" );
+			expect( byteSize_template( 1024 * 55 ) ).toBe( "55.0ki" );
+			expect( byteSize_template( 1024 * 555 ) ).toBe( "555ki" );
+		});
+
+		it("should have the correct postfix", function() {
+			expect( byteSize_template( 3 * Math.pow( 1024, 1) ) ).toBe( "3.00ki" );
+			expect( byteSize_template( 3 * Math.pow( 1024, 2) ) ).toBe( "3.00Mi" );
+			expect( byteSize_template( 3 * Math.pow( 1024, 3) ) ).toBe( "3.00Gi" );
+			expect( byteSize_template( 3 * Math.pow( 1024, 4) ) ).toBe( "3.00Ti" );
+			expect( byteSize_template( 3 * Math.pow( 1024, 5) ) ).toBe( "3.00Pi" );
+			expect( byteSize_template( 3 * Math.pow( 1024, 6) ) ).toBe( "3.00Ei" );
+			expect( byteSize_template( 3 * Math.pow( 1024, 7) ) ).toBe( "3.00Zi" );
+			expect( byteSize_template( 3 * Math.pow( 1024, 8) ) ).toBe( "3.00Yi" );
+		});
+
+		it("should show an overflow for stupidly big numbers", function() {
+			expect( byteSize_template( 3 * Math.pow( 1024, 10) ) ).toBe( "3.00..E" );
+		});
+	});
+
+	describe("count_template()", function() {
+		var count_template = window.app.ut.count_template;
+
+		it("should not postfix and not decimal for number less than 1000", function() {
+			expect( count_template( 0 ) ).toBe( "0" );
+			expect( count_template( 1 ) ).toBe( "1" );
+			expect( count_template( 10 ) ).toBe( "10" );
+			expect( count_template( 100 ) ).toBe( "100" );
+			expect( count_template( 999 ) ).toBe( "999" );
+		});
+
+		it("should always have three significant digits", function() {
+			expect( count_template( 1000  ) ).toBe( "1.00k" );
+			expect( count_template( 1005  ) ).toBe( "1.00k" );
+			expect( count_template( 1055  ) ).toBe( "1.05k" );
+			expect( count_template( 1000 * 5 ) ).toBe( "5.00k" );
+			expect( count_template( 1000 * 55 ) ).toBe( "55.0k" );
+			expect( count_template( 1000 * 555 ) ).toBe( "555k" );
+		});
+
+		it("should have the correct postfix", function() {
+			expect( count_template( 3 * Math.pow( 1000, 1) ) ).toBe( "3.00k" );
+			expect( count_template( 3 * Math.pow( 1000, 2) ) ).toBe( "3.00M" );
+			expect( count_template( 3 * Math.pow( 1000, 3) ) ).toBe( "3.00G" );
+			expect( count_template( 3 * Math.pow( 1000, 4) ) ).toBe( "3.00T" );
+			expect( count_template( 3 * Math.pow( 1000, 5) ) ).toBe( "3.00P" );
+			expect( count_template( 3 * Math.pow( 1000, 6) ) ).toBe( "3.00E" );
+			expect( count_template( 3 * Math.pow( 1000, 7) ) ).toBe( "3.00Z" );
+			expect( count_template( 3 * Math.pow( 1000, 8) ) ).toBe( "3.00Y" );
+		});
+
+		it("should show an overflow for stupidly big numbers", function() {
+			expect( count_template( 3 * Math.pow( 1000, 10) ) ).toBe( "3.00..E" );
+		});
+	});
+
+
+});
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/templates/templates.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/templates/templates.js
new file mode 100644
index 0000000..3fdb508
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/app/ux/templates/templates.js
@@ -0,0 +1,32 @@
+(function( app ) {
+
+	var ut = app.ns("ut");
+
+	ut.option_template = function(v) { return { tag: "OPTION", value: v, text: v }; };
+
+	ut.require_template = function(f) { return f.require ? { tag: "SPAN", cls: "require", text: "*" } : null; };
+
+
+	var sib_prefix = ['B','ki','Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi'];
+
+	ut.byteSize_template = function(n) {
+		var i = 0;
+		while( n >= 1000 ) {
+			i++;
+			n /= 1024;
+		}
+		return (i === 0 ? n.toString() : n.toFixed( 3 - parseInt(n,10).toString().length )) + ( sib_prefix[ i ] || "..E" );
+	};
+
+	var sid_prefix = ['','k','M', 'G', 'T', 'P', 'E', 'Z', 'Y'];
+
+	ut.count_template = function(n) {
+		var i = 0;
+		while( n >= 1000 ) {
+			i++;
+			n /= 1000;
+		}
+		return i === 0 ? n.toString() : ( n.toFixed( 3 - parseInt(n,10).toString().length ) + ( sid_prefix[ i ] || "..E" ) );
+	};
+
+})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/dateRangeParser/date-range-parser.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/dateRangeParser/date-range-parser.js
new file mode 100644
index 0000000..b8095fd
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/dateRangeParser/date-range-parser.js
@@ -0,0 +1,203 @@
+/*!
+ * date-range-parser.js
+ * Contributed to the Apache Software Foundation by:
+ *    Ben Birch - Aconex
+ * fork me at https://github.com/mobz/date-range-parser
+
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+
+*/
+
+(function() {
+
+	var drp = window.dateRangeParser = {};
+
+	drp.defaultRange = 1000 * 60 * 60 * 24;
+
+	drp.now = null; // set a different value for now than the time at function invocation
+
+	drp.parse = function(v) {
+		try {
+			var r = drp._parse(v);
+			r.end && r.end--; // remove 1 millisecond from the final end range
+		} catch(e) {
+			r = null;
+		}
+		return r;
+	};
+
+	drp.print = function(t, p) {
+		var format = ["", "-", "-", " ", ":", ":", "."];
+		var da = makeArray(t);
+		var str = "";
+		for(var i = 0; i <= p; i++) {
+			str += format[i] + (da[i] < 10 ? "0" : "") + da[i];
+		}
+		return str;
+	};
+
+	(function() {
+		drp._relTokens = {};
+
+		var values = {
+			"yr"  : 365*24*60*60*1000,
+			"mon" : 31*24*60*60*1000,
+			"day" : 24*60*60*1000,
+			"hr"  : 60*60*1000,
+			"min" : 60*1000,
+			"sec" : 1000
+		};
+
+		var alias_lu = {
+			"yr" : "y,yr,yrs,year,years",
+			"mon" : "mo,mon,mos,mons,month,months",
+			"day" : "d,dy,dys,day,days",
+			"hr" : "h,hr,hrs,hour,hours",
+			"min" : "m,min,mins,minute,minutes",
+			"sec" : "s,sec,secs,second,seconds"
+		};
+
+		for(var key in alias_lu) {
+			if(alias_lu.hasOwnProperty(key)) {
+				var aliases = alias_lu[key].split(",");
+				for(var i = 0; i < aliases.length; i++) {
+					drp._relTokens[aliases[i]] = values[key];
+				}
+			}
+		}
+	})();
+
+	function makeArray(d) {
+		var da = new Date(d);
+		return [ da.getUTCFullYear(), da.getUTCMonth()+1, da.getUTCDate(), da.getUTCHours(), da.getUTCMinutes(), da.getUTCSeconds(), da.getUTCMilliseconds() ];
+	}
+
+	function fromArray(a) {
+		var d = [].concat(a); d[1]--;
+		return Date.UTC.apply(null, d);
+	}
+
+	drp._parse = function parse(v) {
+		var now = this.now || new Date().getTime();
+
+		function precArray(d, p, offset) {
+			var tn = makeArray(d);
+			tn[p] += offset || 0;
+			for(var i = p+1; i < 7; i++) {
+				tn[i] = i < 3 ? 1 : 0;
+			}
+			return tn;
+		}
+		function makePrecRange(dt, p, r) {
+			var ret = { };
+			ret.start = fromArray(dt);
+			dt[p] += r || 1;
+			ret.end = fromArray(dt);
+			return ret;
+		}
+		function procTerm(term) {
+			var m = term.replace(/\s/g, "").toLowerCase().match(/^([a-z ]+)$|^([ 0-9:-]+)$|^(\d+[a-z]+)$/);
+			if(m[1]) {	// matches ([a-z ]+)
+				function dra(p, o, r) {
+					var dt = precArray(now, p, o);
+					if(r) {
+						dt[2] -= new Date(fromArray(dt)).getUTCDay();
+					}
+					return makePrecRange(dt, p, r);
+				}
+				switch( m[1]) {
+					case "now" : return { start: now, end: now, now: now };
+					case "today" : return dra( 2, 0 );
+					case "thisweek" : return dra( 2, 0, 7 );
+					case "thismonth" : return dra( 1, 0 );
+					case "thisyear" : return dra( 0, 0 );
+					case "yesterday" : return dra( 2, -1 );
+					case "lastweek" : return dra( 2, -7, 7 );
+					case "lastmonth" : return dra( 1, -1 );
+					case "lastyear" : return dra( 0, -1 );
+					case "tomorrow" : return dra( 2, 1 );
+					case "nextweek" : return dra( 2, 7, 7 );
+					case "nextmonth" : return dra( 1, 1 );
+					case "nextyear" : return dra(0, 1 );
+				}
+				throw "unknown token " +  m[1];
+			} else if(m[2]) { // matches ([ 0-9:-]+)
+				dn = makeArray(now);
+				var dt = m[2].match(/^(?:(\d{4})(?:\-(\d\d))?(?:\-(\d\d))?)? ?(?:(\d{1,2})(?:\:(\d\d)(?:\:(\d\d))?)?)?$/);
+				dt.shift();
+				for(var p = 0, z = false, i = 0; i < 7; i++) {
+					if(dt[i]) {
+						dn[i] = parseInt(dt[i], 10);
+						p = i;
+						z = true;
+					} else {
+						if(z)
+							dn[i] = i < 3 ? 1 : 0;
+					}
+				}
+				return makePrecRange(dn, p);
+			} else if(m[3]) { // matches (\d+[a-z]{1,4})
+				var dr = m[3].match(/(\d+)\s*([a-z]+)/i);
+				var n = parseInt(dr[1], 10);
+				return { rel: n * drp._relTokens[dr[2]] };
+			}
+			throw "unknown term " + term;
+		}
+
+		if(!v) {
+			return { start: null, end: null };
+		}
+		var terms = v.split(/\s*([^<>]*[^<>-])?\s*(->|<>|<)?\s*([^<>]+)?\s*/);
+
+		var term1 = terms[1] ? procTerm(terms[1]) : null;
+		var op = terms[2] || "";
+		var term2 = terms[3] ? procTerm(terms[3]) : null;
+
+		if(op === "<" || op === "->" ) {
+			if(term1 && !term2) {
+				return { start: term1.start, end: null };
+			} else if(!term1 && term2) {
+				return { start: null, end: term2.end };
+			} else {
+				if(term2.rel) {
+					return { start: term1.start, end: term1.end + term2.rel };
+				} else if(term1.rel) {
+					return { start: term2.start - term1.rel, end: term2.end };
+				} else {
+					return { start: term1.start, end: term2.end };
+				}
+			}
+		} else if(op === "<>") {
+			if(!term2) {
+				return { start: term1.start - drp.defaultRange, end: term1.end + drp.defaultRange }
+			} else {
+				if(! ("rel" in term2)) throw "second term did not hav a range";
+				return { start: term1.start - term2.rel, end: term1.end + term2.rel };
+			}
+		} else {
+			if(term1.rel) {
+				return { start: now - term1.rel, end: now + term1.rel };
+			} else if(term1.now) {
+				return { start: term1.now - drp.defaultRange, end: term1.now + drp.defaultRange };
+			} else {
+				return { start: term1.start, end: term1.end };
+			}
+		}
+		throw "could not process value " + v;
+	};
+})();
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.css
new file mode 100644
index 0000000..be7e15c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.css
@@ -0,0 +1,1338 @@
+/*!
+ *  Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+/* FONT PATH
+ * -------------------------- */
+@font-face {
+  font-family: 'FontAwesome';
+  src: url('fonts/fontawesome-webfont.eot?v=4.0.3');
+  src: url('fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'), url('fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'), url('fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'), url('fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg');
+  font-weight: normal;
+  font-style: normal;
+}
+.fa {
+  display: inline-block;
+  font-family: FontAwesome;
+  font-style: normal;
+  font-weight: normal;
+  line-height: 1;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+/* makes the font 33% larger relative to the icon container */
+.fa-lg {
+  font-size: 1.3333333333333333em;
+  line-height: 0.75em;
+  vertical-align: -15%;
+}
+.fa-2x {
+  font-size: 2em;
+}
+.fa-3x {
+  font-size: 3em;
+}
+.fa-4x {
+  font-size: 4em;
+}
+.fa-5x {
+  font-size: 5em;
+}
+.fa-fw {
+  width: 1.2857142857142858em;
+  text-align: center;
+}
+.fa-ul {
+  padding-left: 0;
+  margin-left: 2.142857142857143em;
+  list-style-type: none;
+}
+.fa-ul > li {
+  position: relative;
+}
+.fa-li {
+  position: absolute;
+  left: -2.142857142857143em;
+  width: 2.142857142857143em;
+  top: 0.14285714285714285em;
+  text-align: center;
+}
+.fa-li.fa-lg {
+  left: -1.8571428571428572em;
+}
+.fa-border {
+  padding: .2em .25em .15em;
+  border: solid 0.08em #eeeeee;
+  border-radius: .1em;
+}
+.pull-right {
+  float: right;
+}
+.pull-left {
+  float: left;
+}
+.fa.pull-left {
+  margin-right: .3em;
+}
+.fa.pull-right {
+  margin-left: .3em;
+}
+.fa-spin {
+  -webkit-animation: spin 2s infinite linear;
+  -moz-animation: spin 2s infinite linear;
+  -o-animation: spin 2s infinite linear;
+  animation: spin 2s infinite linear;
+}
+@-moz-keyframes spin {
+  0% {
+    -moz-transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(359deg);
+  }
+}
+@-webkit-keyframes spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(359deg);
+  }
+}
+@-o-keyframes spin {
+  0% {
+    -o-transform: rotate(0deg);
+  }
+  100% {
+    -o-transform: rotate(359deg);
+  }
+}
+@-ms-keyframes spin {
+  0% {
+    -ms-transform: rotate(0deg);
+  }
+  100% {
+    -ms-transform: rotate(359deg);
+  }
+}
+@keyframes spin {
+  0% {
+    transform: rotate(0deg);
+  }
+  100% {
+    transform: rotate(359deg);
+  }
+}
+.fa-rotate-90 {
+  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
+  -webkit-transform: rotate(90deg);
+  -moz-transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  -o-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+.fa-rotate-180 {
+  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
+  -webkit-transform: rotate(180deg);
+  -moz-transform: rotate(180deg);
+  -ms-transform: rotate(180deg);
+  -o-transform: rotate(180deg);
+  transform: rotate(180deg);
+}
+.fa-rotate-270 {
+  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
+  -webkit-transform: rotate(270deg);
+  -moz-transform: rotate(270deg);
+  -ms-transform: rotate(270deg);
+  -o-transform: rotate(270deg);
+  transform: rotate(270deg);
+}
+.fa-flip-horizontal {
+  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
+  -webkit-transform: scale(-1, 1);
+  -moz-transform: scale(-1, 1);
+  -ms-transform: scale(-1, 1);
+  -o-transform: scale(-1, 1);
+  transform: scale(-1, 1);
+}
+.fa-flip-vertical {
+  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
+  -webkit-transform: scale(1, -1);
+  -moz-transform: scale(1, -1);
+  -ms-transform: scale(1, -1);
+  -o-transform: scale(1, -1);
+  transform: scale(1, -1);
+}
+.fa-stack {
+  position: relative;
+  display: inline-block;
+  width: 2em;
+  height: 2em;
+  line-height: 2em;
+  vertical-align: middle;
+}
+.fa-stack-1x,
+.fa-stack-2x {
+  position: absolute;
+  left: 0;
+  width: 100%;
+  text-align: center;
+}
+.fa-stack-1x {
+  line-height: inherit;
+}
+.fa-stack-2x {
+  font-size: 2em;
+}
+.fa-inverse {
+  color: #ffffff;
+}
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+   readers do not read off random characters that represent icons */
+.fa-glass:before {
+  content: "\f000";
+}
+.fa-music:before {
+  content: "\f001";
+}
+.fa-search:before {
+  content: "\f002";
+}
+.fa-envelope-o:before {
+  content: "\f003";
+}
+.fa-heart:before {
+  content: "\f004";
+}
+.fa-star:before {
+  content: "\f005";
+}
+.fa-star-o:before {
+  content: "\f006";
+}
+.fa-user:before {
+  content: "\f007";
+}
+.fa-film:before {
+  content: "\f008";
+}
+.fa-th-large:before {
+  content: "\f009";
+}
+.fa-th:before {
+  content: "\f00a";
+}
+.fa-th-list:before {
+  content: "\f00b";
+}
+.fa-check:before {
+  content: "\f00c";
+}
+.fa-times:before {
+  content: "\f00d";
+}
+.fa-search-plus:before {
+  content: "\f00e";
+}
+.fa-search-minus:before {
+  content: "\f010";
+}
+.fa-power-off:before {
+  content: "\f011";
+}
+.fa-signal:before {
+  content: "\f012";
+}
+.fa-gear:before,
+.fa-cog:before {
+  content: "\f013";
+}
+.fa-trash-o:before {
+  content: "\f014";
+}
+.fa-home:before {
+  content: "\f015";
+}
+.fa-file-o:before {
+  content: "\f016";
+}
+.fa-clock-o:before {
+  content: "\f017";
+}
+.fa-road:before {
+  content: "\f018";
+}
+.fa-download:before {
+  content: "\f019";
+}
+.fa-arrow-circle-o-down:before {
+  content: "\f01a";
+}
+.fa-arrow-circle-o-up:before {
+  content: "\f01b";
+}
+.fa-inbox:before {
+  content: "\f01c";
+}
+.fa-play-circle-o:before {
+  content: "\f01d";
+}
+.fa-rotate-right:before,
+.fa-repeat:before {
+  content: "\f01e";
+}
+.fa-refresh:before {
+  content: "\f021";
+}
+.fa-list-alt:before {
+  content: "\f022";
+}
+.fa-lock:before {
+  content: "\f023";
+}
+.fa-flag:before {
+  content: "\f024";
+}
+.fa-headphones:before {
+  content: "\f025";
+}
+.fa-volume-off:before {
+  content: "\f026";
+}
+.fa-volume-down:before {
+  content: "\f027";
+}
+.fa-volume-up:before {
+  content: "\f028";
+}
+.fa-qrcode:before {
+  content: "\f029";
+}
+.fa-barcode:before {
+  content: "\f02a";
+}
+.fa-tag:before {
+  content: "\f02b";
+}
+.fa-tags:before {
+  content: "\f02c";
+}
+.fa-book:before {
+  content: "\f02d";
+}
+.fa-bookmark:before {
+  content: "\f02e";
+}
+.fa-print:before {
+  content: "\f02f";
+}
+.fa-camera:before {
+  content: "\f030";
+}
+.fa-font:before {
+  content: "\f031";
+}
+.fa-bold:before {
+  content: "\f032";
+}
+.fa-italic:before {
+  content: "\f033";
+}
+.fa-text-height:before {
+  content: "\f034";
+}
+.fa-text-width:before {
+  content: "\f035";
+}
+.fa-align-left:before {
+  content: "\f036";
+}
+.fa-align-center:before {
+  content: "\f037";
+}
+.fa-align-right:before {
+  content: "\f038";
+}
+.fa-align-justify:before {
+  content: "\f039";
+}
+.fa-list:before {
+  content: "\f03a";
+}
+.fa-dedent:before,
+.fa-outdent:before {
+  content: "\f03b";
+}
+.fa-indent:before {
+  content: "\f03c";
+}
+.fa-video-camera:before {
+  content: "\f03d";
+}
+.fa-picture-o:before {
+  content: "\f03e";
+}
+.fa-pencil:before {
+  content: "\f040";
+}
+.fa-map-marker:before {
+  content: "\f041";
+}
+.fa-adjust:before {
+  content: "\f042";
+}
+.fa-tint:before {
+  content: "\f043";
+}
+.fa-edit:before,
+.fa-pencil-square-o:before {
+  content: "\f044";
+}
+.fa-share-square-o:before {
+  content: "\f045";
+}
+.fa-check-square-o:before {
+  content: "\f046";
+}
+.fa-arrows:before {
+  content: "\f047";
+}
+.fa-step-backward:before {
+  content: "\f048";
+}
+.fa-fast-backward:before {
+  content: "\f049";
+}
+.fa-backward:before {
+  content: "\f04a";
+}
+.fa-play:before {
+  content: "\f04b";
+}
+.fa-pause:before {
+  content: "\f04c";
+}
+.fa-stop:before {
+  content: "\f04d";
+}
+.fa-forward:before {
+  content: "\f04e";
+}
+.fa-fast-forward:before {
+  content: "\f050";
+}
+.fa-step-forward:before {
+  content: "\f051";
+}
+.fa-eject:before {
+  content: "\f052";
+}
+.fa-chevron-left:before {
+  content: "\f053";
+}
+.fa-chevron-right:before {
+  content: "\f054";
+}
+.fa-plus-circle:before {
+  content: "\f055";
+}
+.fa-minus-circle:before {
+  content: "\f056";
+}
+.fa-times-circle:before {
+  content: "\f057";
+}
+.fa-check-circle:before {
+  content: "\f058";
+}
+.fa-question-circle:before {
+  content: "\f059";
+}
+.fa-info-circle:before {
+  content: "\f05a";
+}
+.fa-crosshairs:before {
+  content: "\f05b";
+}
+.fa-times-circle-o:before {
+  content: "\f05c";
+}
+.fa-check-circle-o:before {
+  content: "\f05d";
+}
+.fa-ban:before {
+  content: "\f05e";
+}
+.fa-arrow-left:before {
+  content: "\f060";
+}
+.fa-arrow-right:before {
+  content: "\f061";
+}
+.fa-arrow-up:before {
+  content: "\f062";
+}
+.fa-arrow-down:before {
+  content: "\f063";
+}
+.fa-mail-forward:before,
+.fa-share:before {
+  content: "\f064";
+}
+.fa-expand:before {
+  content: "\f065";
+}
+.fa-compress:before {
+  content: "\f066";
+}
+.fa-plus:before {
+  content: "\f067";
+}
+.fa-minus:before {
+  content: "\f068";
+}
+.fa-asterisk:before {
+  content: "\f069";
+}
+.fa-exclamation-circle:before {
+  content: "\f06a";
+}
+.fa-gift:before {
+  content: "\f06b";
+}
+.fa-leaf:before {
+  content: "\f06c";
+}
+.fa-fire:before {
+  content: "\f06d";
+}
+.fa-eye:before {
+  content: "\f06e";
+}
+.fa-eye-slash:before {
+  content: "\f070";
+}
+.fa-warning:before,
+.fa-exclamation-triangle:before {
+  content: "\f071";
+}
+.fa-plane:before {
+  content: "\f072";
+}
+.fa-calendar:before {
+  content: "\f073";
+}
+.fa-random:before {
+  content: "\f074";
+}
+.fa-comment:before {
+  content: "\f075";
+}
+.fa-magnet:before {
+  content: "\f076";
+}
+.fa-chevron-up:before {
+  content: "\f077";
+}
+.fa-chevron-down:before {
+  content: "\f078";
+}
+.fa-retweet:before {
+  content: "\f079";
+}
+.fa-shopping-cart:before {
+  content: "\f07a";
+}
+.fa-folder:before {
+  content: "\f07b";
+}
+.fa-folder-open:before {
+  content: "\f07c";
+}
+.fa-arrows-v:before {
+  content: "\f07d";
+}
+.fa-arrows-h:before {
+  content: "\f07e";
+}
+.fa-bar-chart-o:before {
+  content: "\f080";
+}
+.fa-twitter-square:before {
+  content: "\f081";
+}
+.fa-facebook-square:before {
+  content: "\f082";
+}
+.fa-camera-retro:before {
+  content: "\f083";
+}
+.fa-key:before {
+  content: "\f084";
+}
+.fa-gears:before,
+.fa-cogs:before {
+  content: "\f085";
+}
+.fa-comments:before {
+  content: "\f086";
+}
+.fa-thumbs-o-up:before {
+  content: "\f087";
+}
+.fa-thumbs-o-down:before {
+  content: "\f088";
+}
+.fa-star-half:before {
+  content: "\f089";
+}
+.fa-heart-o:before {
+  content: "\f08a";
+}
+.fa-sign-out:before {
+  content: "\f08b";
+}
+.fa-linkedin-square:before {
+  content: "\f08c";
+}
+.fa-thumb-tack:before {
+  content: "\f08d";
+}
+.fa-external-link:before {
+  content: "\f08e";
+}
+.fa-sign-in:before {
+  content: "\f090";
+}
+.fa-trophy:before {
+  content: "\f091";
+}
+.fa-github-square:before {
+  content: "\f092";
+}
+.fa-upload:before {
+  content: "\f093";
+}
+.fa-lemon-o:before {
+  content: "\f094";
+}
+.fa-phone:before {
+  content: "\f095";
+}
+.fa-square-o:before {
+  content: "\f096";
+}
+.fa-bookmark-o:before {
+  content: "\f097";
+}
+.fa-phone-square:before {
+  content: "\f098";
+}
+.fa-twitter:before {
+  content: "\f099";
+}
+.fa-facebook:before {
+  content: "\f09a";
+}
+.fa-github:before {
+  content: "\f09b";
+}
+.fa-unlock:before {
+  content: "\f09c";
+}
+.fa-credit-card:before {
+  content: "\f09d";
+}
+.fa-rss:before {
+  content: "\f09e";
+}
+.fa-hdd-o:before {
+  content: "\f0a0";
+}
+.fa-bullhorn:before {
+  content: "\f0a1";
+}
+.fa-bell:before {
+  content: "\f0f3";
+}
+.fa-certificate:before {
+  content: "\f0a3";
+}
+.fa-hand-o-right:before {
+  content: "\f0a4";
+}
+.fa-hand-o-left:before {
+  content: "\f0a5";
+}
+.fa-hand-o-up:before {
+  content: "\f0a6";
+}
+.fa-hand-o-down:before {
+  content: "\f0a7";
+}
+.fa-arrow-circle-left:before {
+  content: "\f0a8";
+}
+.fa-arrow-circle-right:before {
+  content: "\f0a9";
+}
+.fa-arrow-circle-up:before {
+  content: "\f0aa";
+}
+.fa-arrow-circle-down:before {
+  content: "\f0ab";
+}
+.fa-globe:before {
+  content: "\f0ac";
+}
+.fa-wrench:before {
+  content: "\f0ad";
+}
+.fa-tasks:before {
+  content: "\f0ae";
+}
+.fa-filter:before {
+  content: "\f0b0";
+}
+.fa-briefcase:before {
+  content: "\f0b1";
+}
+.fa-arrows-alt:before {
+  content: "\f0b2";
+}
+.fa-group:before,
+.fa-users:before {
+  content: "\f0c0";
+}
+.fa-chain:before,
+.fa-link:before {
+  content: "\f0c1";
+}
+.fa-cloud:before {
+  content: "\f0c2";
+}
+.fa-flask:before {
+  content: "\f0c3";
+}
+.fa-cut:before,
+.fa-scissors:before {
+  content: "\f0c4";
+}
+.fa-copy:before,
+.fa-files-o:before {
+  content: "\f0c5";
+}
+.fa-paperclip:before {
+  content: "\f0c6";
+}
+.fa-save:before,
+.fa-floppy-o:before {
+  content: "\f0c7";
+}
+.fa-square:before {
+  content: "\f0c8";
+}
+.fa-bars:before {
+  content: "\f0c9";
+}
+.fa-list-ul:before {
+  content: "\f0ca";
+}
+.fa-list-ol:before {
+  content: "\f0cb";
+}
+.fa-strikethrough:before {
+  content: "\f0cc";
+}
+.fa-underline:before {
+  content: "\f0cd";
+}
+.fa-table:before {
+  content: "\f0ce";
+}
+.fa-magic:before {
+  content: "\f0d0";
+}
+.fa-truck:before {
+  content: "\f0d1";
+}
+.fa-pinterest:before {
+  content: "\f0d2";
+}
+.fa-pinterest-square:before {
+  content: "\f0d3";
+}
+.fa-google-plus-square:before {
+  content: "\f0d4";
+}
+.fa-google-plus:before {
+  content: "\f0d5";
+}
+.fa-money:before {
+  content: "\f0d6";
+}
+.fa-caret-down:before {
+  content: "\f0d7";
+}
+.fa-caret-up:before {
+  content: "\f0d8";
+}
+.fa-caret-left:before {
+  content: "\f0d9";
+}
+.fa-caret-right:before {
+  content: "\f0da";
+}
+.fa-columns:before {
+  content: "\f0db";
+}
+.fa-unsorted:before,
+.fa-sort:before {
+  content: "\f0dc";
+}
+.fa-sort-down:before,
+.fa-sort-asc:before {
+  content: "\f0dd";
+}
+.fa-sort-up:before,
+.fa-sort-desc:before {
+  content: "\f0de";
+}
+.fa-envelope:before {
+  content: "\f0e0";
+}
+.fa-linkedin:before {
+  content: "\f0e1";
+}
+.fa-rotate-left:before,
+.fa-undo:before {
+  content: "\f0e2";
+}
+.fa-legal:before,
+.fa-gavel:before {
+  content: "\f0e3";
+}
+.fa-dashboard:before,
+.fa-tachometer:before {
+  content: "\f0e4";
+}
+.fa-comment-o:before {
+  content: "\f0e5";
+}
+.fa-comments-o:before {
+  content: "\f0e6";
+}
+.fa-flash:before,
+.fa-bolt:before {
+  content: "\f0e7";
+}
+.fa-sitemap:before {
+  content: "\f0e8";
+}
+.fa-umbrella:before {
+  content: "\f0e9";
+}
+.fa-paste:before,
+.fa-clipboard:before {
+  content: "\f0ea";
+}
+.fa-lightbulb-o:before {
+  content: "\f0eb";
+}
+.fa-exchange:before {
+  content: "\f0ec";
+}
+.fa-cloud-download:before {
+  content: "\f0ed";
+}
+.fa-cloud-upload:before {
+  content: "\f0ee";
+}
+.fa-user-md:before {
+  content: "\f0f0";
+}
+.fa-stethoscope:before {
+  content: "\f0f1";
+}
+.fa-suitcase:before {
+  content: "\f0f2";
+}
+.fa-bell-o:before {
+  content: "\f0a2";
+}
+.fa-coffee:before {
+  content: "\f0f4";
+}
+.fa-cutlery:before {
+  content: "\f0f5";
+}
+.fa-file-text-o:before {
+  content: "\f0f6";
+}
+.fa-building-o:before {
+  content: "\f0f7";
+}
+.fa-hospital-o:before {
+  content: "\f0f8";
+}
+.fa-ambulance:before {
+  content: "\f0f9";
+}
+.fa-medkit:before {
+  content: "\f0fa";
+}
+.fa-fighter-jet:before {
+  content: "\f0fb";
+}
+.fa-beer:before {
+  content: "\f0fc";
+}
+.fa-h-square:before {
+  content: "\f0fd";
+}
+.fa-plus-square:before {
+  content: "\f0fe";
+}
+.fa-angle-double-left:before {
+  content: "\f100";
+}
+.fa-angle-double-right:before {
+  content: "\f101";
+}
+.fa-angle-double-up:before {
+  content: "\f102";
+}
+.fa-angle-double-down:before {
+  content: "\f103";
+}
+.fa-angle-left:before {
+  content: "\f104";
+}
+.fa-angle-right:before {
+  content: "\f105";
+}
+.fa-angle-up:before {
+  content: "\f106";
+}
+.fa-angle-down:before {
+  content: "\f107";
+}
+.fa-desktop:before {
+  content: "\f108";
+}
+.fa-laptop:before {
+  content: "\f109";
+}
+.fa-tablet:before {
+  content: "\f10a";
+}
+.fa-mobile-phone:before,
+.fa-mobile:before {
+  content: "\f10b";
+}
+.fa-circle-o:before {
+  content: "\f10c";
+}
+.fa-quote-left:before {
+  content: "\f10d";
+}
+.fa-quote-right:before {
+  content: "\f10e";
+}
+.fa-spinner:before {
+  content: "\f110";
+}
+.fa-circle:before {
+  content: "\f111";
+}
+.fa-mail-reply:before,
+.fa-reply:before {
+  content: "\f112";
+}
+.fa-github-alt:before {
+  content: "\f113";
+}
+.fa-folder-o:before {
+  content: "\f114";
+}
+.fa-folder-open-o:before {
+  content: "\f115";
+}
+.fa-smile-o:before {
+  content: "\f118";
+}
+.fa-frown-o:before {
+  content: "\f119";
+}
+.fa-meh-o:before {
+  content: "\f11a";
+}
+.fa-gamepad:before {
+  content: "\f11b";
+}
+.fa-keyboard-o:before {
+  content: "\f11c";
+}
+.fa-flag-o:before {
+  content: "\f11d";
+}
+.fa-flag-checkered:before {
+  content: "\f11e";
+}
+.fa-terminal:before {
+  content: "\f120";
+}
+.fa-code:before {
+  content: "\f121";
+}
+.fa-reply-all:before {
+  content: "\f122";
+}
+.fa-mail-reply-all:before {
+  content: "\f122";
+}
+.fa-star-half-empty:before,
+.fa-star-half-full:before,
+.fa-star-half-o:before {
+  content: "\f123";
+}
+.fa-location-arrow:before {
+  content: "\f124";
+}
+.fa-crop:before {
+  content: "\f125";
+}
+.fa-code-fork:before {
+  content: "\f126";
+}
+.fa-unlink:before,
+.fa-chain-broken:before {
+  content: "\f127";
+}
+.fa-question:before {
+  content: "\f128";
+}
+.fa-info:before {
+  content: "\f129";
+}
+.fa-exclamation:before {
+  content: "\f12a";
+}
+.fa-superscript:before {
+  content: "\f12b";
+}
+.fa-subscript:before {
+  content: "\f12c";
+}
+.fa-eraser:before {
+  content: "\f12d";
+}
+.fa-puzzle-piece:before {
+  content: "\f12e";
+}
+.fa-microphone:before {
+  content: "\f130";
+}
+.fa-microphone-slash:before {
+  content: "\f131";
+}
+.fa-shield:before {
+  content: "\f132";
+}
+.fa-calendar-o:before {
+  content: "\f133";
+}
+.fa-fire-extinguisher:before {
+  content: "\f134";
+}
+.fa-rocket:before {
+  content: "\f135";
+}
+.fa-maxcdn:before {
+  content: "\f136";
+}
+.fa-chevron-circle-left:before {
+  content: "\f137";
+}
+.fa-chevron-circle-right:before {
+  content: "\f138";
+}
+.fa-chevron-circle-up:before {
+  content: "\f139";
+}
+.fa-chevron-circle-down:before {
+  content: "\f13a";
+}
+.fa-html5:before {
+  content: "\f13b";
+}
+.fa-css3:before {
+  content: "\f13c";
+}
+.fa-anchor:before {
+  content: "\f13d";
+}
+.fa-unlock-alt:before {
+  content: "\f13e";
+}
+.fa-bullseye:before {
+  content: "\f140";
+}
+.fa-ellipsis-h:before {
+  content: "\f141";
+}
+.fa-ellipsis-v:before {
+  content: "\f142";
+}
+.fa-rss-square:before {
+  content: "\f143";
+}
+.fa-play-circle:before {
+  content: "\f144";
+}
+.fa-ticket:before {
+  content: "\f145";
+}
+.fa-minus-square:before {
+  content: "\f146";
+}
+.fa-minus-square-o:before {
+  content: "\f147";
+}
+.fa-level-up:before {
+  content: "\f148";
+}
+.fa-level-down:before {
+  content: "\f149";
+}
+.fa-check-square:before {
+  content: "\f14a";
+}
+.fa-pencil-square:before {
+  content: "\f14b";
+}
+.fa-external-link-square:before {
+  content: "\f14c";
+}
+.fa-share-square:before {
+  content: "\f14d";
+}
+.fa-compass:before {
+  content: "\f14e";
+}
+.fa-toggle-down:before,
+.fa-caret-square-o-down:before {
+  content: "\f150";
+}
+.fa-toggle-up:before,
+.fa-caret-square-o-up:before {
+  content: "\f151";
+}
+.fa-toggle-right:before,
+.fa-caret-square-o-right:before {
+  content: "\f152";
+}
+.fa-euro:before,
+.fa-eur:before {
+  content: "\f153";
+}
+.fa-gbp:before {
+  content: "\f154";
+}
+.fa-dollar:before,
+.fa-usd:before {
+  content: "\f155";
+}
+.fa-rupee:before,
+.fa-inr:before {
+  content: "\f156";
+}
+.fa-cny:before,
+.fa-rmb:before,
+.fa-yen:before,
+.fa-jpy:before {
+  content: "\f157";
+}
+.fa-ruble:before,
+.fa-rouble:before,
+.fa-rub:before {
+  content: "\f158";
+}
+.fa-won:before,
+.fa-krw:before {
+  content: "\f159";
+}
+.fa-bitcoin:before,
+.fa-btc:before {
+  content: "\f15a";
+}
+.fa-file:before {
+  content: "\f15b";
+}
+.fa-file-text:before {
+  content: "\f15c";
+}
+.fa-sort-alpha-asc:before {
+  content: "\f15d";
+}
+.fa-sort-alpha-desc:before {
+  content: "\f15e";
+}
+.fa-sort-amount-asc:before {
+  content: "\f160";
+}
+.fa-sort-amount-desc:before {
+  content: "\f161";
+}
+.fa-sort-numeric-asc:before {
+  content: "\f162";
+}
+.fa-sort-numeric-desc:before {
+  content: "\f163";
+}
+.fa-thumbs-up:before {
+  content: "\f164";
+}
+.fa-thumbs-down:before {
+  content: "\f165";
+}
+.fa-youtube-square:before {
+  content: "\f166";
+}
+.fa-youtube:before {
+  content: "\f167";
+}
+.fa-xing:before {
+  content: "\f168";
+}
+.fa-xing-square:before {
+  content: "\f169";
+}
+.fa-youtube-play:before {
+  content: "\f16a";
+}
+.fa-dropbox:before {
+  content: "\f16b";
+}
+.fa-stack-overflow:before {
+  content: "\f16c";
+}
+.fa-instagram:before {
+  content: "\f16d";
+}
+.fa-flickr:before {
+  content: "\f16e";
+}
+.fa-adn:before {
+  content: "\f170";
+}
+.fa-bitbucket:before {
+  content: "\f171";
+}
+.fa-bitbucket-square:before {
+  content: "\f172";
+}
+.fa-tumblr:before {
+  content: "\f173";
+}
+.fa-tumblr-square:before {
+  content: "\f174";
+}
+.fa-long-arrow-down:before {
+  content: "\f175";
+}
+.fa-long-arrow-up:before {
+  content: "\f176";
+}
+.fa-long-arrow-left:before {
+  content: "\f177";
+}
+.fa-long-arrow-right:before {
+  content: "\f178";
+}
+.fa-apple:before {
+  content: "\f179";
+}
+.fa-windows:before {
+  content: "\f17a";
+}
+.fa-android:before {
+  content: "\f17b";
+}
+.fa-linux:before {
+  content: "\f17c";
+}
+.fa-dribbble:before {
+  content: "\f17d";
+}
+.fa-skype:before {
+  content: "\f17e";
+}
+.fa-foursquare:before {
+  content: "\f180";
+}
+.fa-trello:before {
+  content: "\f181";
+}
+.fa-female:before {
+  content: "\f182";
+}
+.fa-male:before {
+  content: "\f183";
+}
+.fa-gittip:before {
+  content: "\f184";
+}
+.fa-sun-o:before {
+  content: "\f185";
+}
+.fa-moon-o:before {
+  content: "\f186";
+}
+.fa-archive:before {
+  content: "\f187";
+}
+.fa-bug:before {
+  content: "\f188";
+}
+.fa-vk:before {
+  content: "\f189";
+}
+.fa-weibo:before {
+  content: "\f18a";
+}
+.fa-renren:before {
+  content: "\f18b";
+}
+.fa-pagelines:before {
+  content: "\f18c";
+}
+.fa-stack-exchange:before {
+  content: "\f18d";
+}
+.fa-arrow-circle-o-right:before {
+  content: "\f18e";
+}
+.fa-arrow-circle-o-left:before {
+  content: "\f190";
+}
+.fa-toggle-left:before,
+.fa-caret-square-o-left:before {
+  content: "\f191";
+}
+.fa-dot-circle-o:before {
+  content: "\f192";
+}
+.fa-wheelchair:before {
+  content: "\f193";
+}
+.fa-vimeo-square:before {
+  content: "\f194";
+}
+.fa-turkish-lira:before,
+.fa-try:before {
+  content: "\f195";
+}
+.fa-plus-square-o:before {
+  content: "\f196";
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.min.css b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.min.css
new file mode 100644
index 0000000..449d6ac
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.min.css
@@ -0,0 +1,4 @@
+/*!
+ *  Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.0.3');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857142858em;text-align:center}.fa-ul{padding-left:0;margin-left:2.142857142857143em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.142857142857143em;width:2.142857142857143em;top:.14285714285714285em;text-align:center}.fa-li.fa-lg{left:-1.8571428571428572em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1);-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1);-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-asc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-desc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-reply-all:before{content:"\f122"}.fa-mail-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/FontAwesome.otf b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/FontAwesome.otf
new file mode 100644
index 0000000..8b0f54e
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/FontAwesome.otf
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.eot b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.eot
new file mode 100755
index 0000000..7c79c6a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.eot
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.svg b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.svg
new file mode 100755
index 0000000..45fdf33
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.svg
@@ -0,0 +1,414 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="fontawesomeregular" horiz-adv-x="1536" >
+<font-face units-per-em="1792" ascent="1536" descent="-256" />
+<missing-glyph horiz-adv-x="448" />
+<glyph unicode=" "  horiz-adv-x="448" />
+<glyph unicode="&#x09;" horiz-adv-x="448" />
+<glyph unicode="&#xa0;" horiz-adv-x="448" />
+<glyph unicode="&#xa8;" horiz-adv-x="1792" />
+<glyph unicode="&#xa9;" horiz-adv-x="1792" />
+<glyph unicode="&#xae;" horiz-adv-x="1792" />
+<glyph unicode="&#xb4;" horiz-adv-x="1792" />
+<glyph unicode="&#xc6;" horiz-adv-x="1792" />
+<glyph unicode="&#x2000;" horiz-adv-x="768" />
+<glyph unicode="&#x2001;" />
+<glyph unicode="&#x2002;" horiz-adv-x="768" />
+<glyph unicode="&#x2003;" />
+<glyph unicode="&#x2004;" horiz-adv-x="512" />
+<glyph unicode="&#x2005;" horiz-adv-x="384" />
+<glyph unicode="&#x2006;" horiz-adv-x="256" />
+<glyph unicode="&#x2007;" horiz-adv-x="256" />
+<glyph unicode="&#x2008;" horiz-adv-x="192" />
+<glyph unicode="&#x2009;" horiz-adv-x="307" />
+<glyph unicode="&#x200a;" horiz-adv-x="85" />
+<glyph unicode="&#x202f;" horiz-adv-x="307" />
+<glyph unicode="&#x205f;" horiz-adv-x="384" />
+<glyph unicode="&#x2122;" horiz-adv-x="1792" />
+<glyph unicode="&#x221e;" horiz-adv-x="1792" />
+<glyph unicode="&#x2260;" horiz-adv-x="1792" />
+<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="&#xf000;" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
+<glyph unicode="&#xf001;" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf002;" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+<glyph unicode="&#xf003;" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf004;" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
+<glyph unicode="&#xf005;" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
+<glyph unicode="&#xf006;" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
+<glyph unicode="&#xf007;" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf008;" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf009;" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
+<glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
+<glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+<glyph unicode="&#xf010;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
+<glyph unicode="&#xf011;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
+<glyph unicode="&#xf012;" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf013;" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
+<glyph unicode="&#xf014;" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf015;" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
+<glyph unicode="&#xf016;" horiz-adv-x="1280" d="M128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280zM768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z " />
+<glyph unicode="&#xf017;" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf018;" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
+<glyph unicode="&#xf019;" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
+<glyph unicode="&#xf01a;" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01b;" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01c;" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
+<glyph unicode="&#xf01d;" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01e;" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
+<glyph unicode="&#xf021;" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf022;" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
+<glyph unicode="&#xf023;" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf024;" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf025;" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
+<glyph unicode="&#xf026;" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf027;" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
+<glyph unicode="&#xf028;" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
+<glyph unicode="&#xf029;" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
+<glyph unicode="&#xf02a;" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
+<glyph unicode="&#xf02b;" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
+<glyph unicode="&#xf02c;" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
+<glyph unicode="&#xf02d;" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
+<glyph unicode="&#xf02e;" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="&#xf02f;" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
+<glyph unicode="&#xf030;" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf031;" horiz-adv-x="1664" d="M725 977l-170 -450q73 -1 153.5 -2t119 -1.5t52.5 -0.5l29 2q-32 95 -92 241q-53 132 -92 211zM21 -128h-21l2 79q22 7 80 18q89 16 110 31q20 16 48 68l237 616l280 724h75h53l11 -21l205 -480q103 -242 124 -297q39 -102 96 -235q26 -58 65 -164q24 -67 65 -149 q22 -49 35 -57q22 -19 69 -23q47 -6 103 -27q6 -39 6 -57q0 -14 -1 -26q-80 0 -192 8q-93 8 -189 8q-79 0 -135 -2l-200 -11l-58 -2q0 45 4 78l131 28q56 13 68 23q12 12 12 27t-6 32l-47 114l-92 228l-450 2q-29 -65 -104 -274q-23 -64 -23 -84q0 -31 17 -43 q26 -21 103 -32q3 0 13.5 -2t30 -5t40.5 -6q1 -28 1 -58q0 -17 -2 -27q-66 0 -349 20l-48 -8q-81 -14 -167 -14z" />
+<glyph unicode="&#xf032;" horiz-adv-x="1408" d="M555 15q76 -32 140 -32q131 0 216 41t122 113q38 70 38 181q0 114 -41 180q-58 94 -141 126q-80 32 -247 32q-74 0 -101 -10v-144l-1 -173l3 -270q0 -15 12 -44zM541 761q43 -7 109 -7q175 0 264 65t89 224q0 112 -85 187q-84 75 -255 75q-52 0 -130 -13q0 -44 2 -77 q7 -122 6 -279l-1 -98q0 -43 1 -77zM0 -128l2 94q45 9 68 12q77 12 123 31q17 27 21 51q9 66 9 194l-2 497q-5 256 -9 404q-1 87 -11 109q-1 4 -12 12q-18 12 -69 15q-30 2 -114 13l-4 83l260 6l380 13l45 1q5 0 14 0.5t14 0.5q1 0 21.5 -0.5t40.5 -0.5h74q88 0 191 -27 q43 -13 96 -39q57 -29 102 -76q44 -47 65 -104t21 -122q0 -70 -32 -128t-95 -105q-26 -20 -150 -77q177 -41 267 -146q92 -106 92 -236q0 -76 -29 -161q-21 -62 -71 -117q-66 -72 -140 -108q-73 -36 -203 -60q-82 -15 -198 -11l-197 4q-84 2 -298 -11q-33 -3 -272 -11z" />
+<glyph unicode="&#xf033;" horiz-adv-x="1024" d="M0 -126l17 85q4 1 77 20q76 19 116 39q29 37 41 101l27 139l56 268l12 64q8 44 17 84.5t16 67t12.5 46.5t9 30.5t3.5 11.5l29 157l16 63l22 135l8 50v38q-41 22 -144 28q-28 2 -38 4l19 103l317 -14q39 -2 73 -2q66 0 214 9q33 2 68 4.5t36 2.5q-2 -19 -6 -38 q-7 -29 -13 -51q-55 -19 -109 -31q-64 -16 -101 -31q-12 -31 -24 -88q-9 -44 -13 -82q-44 -199 -66 -306l-61 -311l-38 -158l-43 -235l-12 -45q-2 -7 1 -27q64 -15 119 -21q36 -5 66 -10q-1 -29 -7 -58q-7 -31 -9 -41q-18 0 -23 -1q-24 -2 -42 -2q-9 0 -28 3q-19 4 -145 17 l-198 2q-41 1 -174 -11q-74 -7 -98 -9z" />
+<glyph unicode="&#xf034;" horiz-adv-x="1792" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l215 -1h293l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -42.5 2t-103.5 -1t-111 -1 q-34 0 -67 -5q-10 -97 -8 -136l1 -152v-332l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-88 0 -233 -14q-48 -4 -70 -4q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q8 192 6 433l-5 428q-1 62 -0.5 118.5t0.5 102.5t-2 57t-6 15q-6 5 -14 6q-38 6 -148 6q-43 0 -100 -13.5t-73 -24.5q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1744 128q33 0 42 -18.5t-11 -44.5 l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80z" />
+<glyph unicode="&#xf035;" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l446 -1h318l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -58.5 2t-138.5 -1t-128 -1 q-94 0 -127 -5q-10 -97 -8 -136l1 -152v52l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-82 0 -233 -13q-45 -5 -70 -5q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q6 137 6 433l-5 44q0 265 -2 278q-2 11 -6 15q-6 5 -14 6q-38 6 -148 6q-50 0 -168.5 -14t-132.5 -24q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1505 113q26 -20 26 -49t-26 -49l-162 -126 q-26 -20 -44.5 -11t-18.5 42v80h-1024v-80q0 -33 -18.5 -42t-44.5 11l-162 126q-26 20 -26 49t26 49l162 126q26 20 44.5 11t18.5 -42v-80h1024v80q0 33 18.5 42t44.5 -11z" />
+<glyph unicode="&#xf036;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf037;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf038;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf039;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf03a;" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03b;" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03c;" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03d;" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
+<glyph unicode="&#xf03e;" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf040;" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
+<glyph unicode="&#xf041;" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
+<glyph unicode="&#xf042;" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf043;" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
+<glyph unicode="&#xf044;" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
+<glyph unicode="&#xf045;" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
+<glyph unicode="&#xf046;" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
+<glyph unicode="&#xf047;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf048;" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
+<glyph unicode="&#xf049;" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
+<glyph unicode="&#xf04a;" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
+<glyph unicode="&#xf04b;" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
+<glyph unicode="&#xf04c;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf04d;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf04e;" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="&#xf050;" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="&#xf051;" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
+<glyph unicode="&#xf052;" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
+<glyph unicode="&#xf053;" horiz-adv-x="1152" d="M742 -37l-652 651q-37 37 -37 90.5t37 90.5l652 651q37 37 90.5 37t90.5 -37l75 -75q37 -37 37 -90.5t-37 -90.5l-486 -486l486 -485q37 -38 37 -91t-37 -90l-75 -75q-37 -37 -90.5 -37t-90.5 37z" />
+<glyph unicode="&#xf054;" horiz-adv-x="1152" d="M1099 704q0 -52 -37 -91l-652 -651q-37 -37 -90 -37t-90 37l-76 75q-37 39 -37 91q0 53 37 90l486 486l-486 485q-37 39 -37 91q0 53 37 90l76 75q36 38 90 38t90 -38l652 -651q37 -37 37 -90z" />
+<glyph unicode="&#xf055;" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf056;" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
+<glyph unicode="&#xf057;" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf058;" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf059;" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05a;" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05b;" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf05c;" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05d;" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05e;" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
+<glyph unicode="&#xf060;" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
+<glyph unicode="&#xf061;" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
+<glyph unicode="&#xf062;" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
+<glyph unicode="&#xf063;" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+<glyph unicode="&#xf064;" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
+<glyph unicode="&#xf065;" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf066;" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
+<glyph unicode="&#xf067;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf068;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf069;" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
+<glyph unicode="&#xf06a;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
+<glyph unicode="&#xf06b;" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf06c;" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
+<glyph unicode="&#xf06d;" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
+<glyph unicode="&#xf06e;" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
+<glyph unicode="&#xf070;" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
+<glyph unicode="&#xf071;" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
+<glyph unicode="&#xf072;" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
+<glyph unicode="&#xf073;" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf074;" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="&#xf075;" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="&#xf076;" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf077;" horiz-adv-x="1664" d="M1611 320q0 -53 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-486 485l-486 -485q-36 -38 -90 -38t-90 38l-75 75q-38 36 -38 90q0 53 38 91l651 651q37 37 90 37q52 0 91 -37l650 -651q38 -38 38 -91z" />
+<glyph unicode="&#xf078;" horiz-adv-x="1664" d="M1611 832q0 -53 -37 -90l-651 -651q-38 -38 -91 -38q-54 0 -90 38l-651 651q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l486 -486l486 486q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+<glyph unicode="&#xf079;" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
+<glyph unicode="&#xf07a;" horiz-adv-x="1664" d="M640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5 t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf07b;" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf07c;" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf07d;" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf07e;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf080;" horiz-adv-x="1920" d="M512 512v-384h-256v384h256zM896 1024v-896h-256v896h256zM1280 768v-640h-256v640h256zM1664 1152v-1024h-256v1024h256zM1792 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5z M1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf081;" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf082;" d="M1307 618l23 219h-198v109q0 49 15.5 68.5t71.5 19.5h110v219h-175q-152 0 -218 -72t-66 -213v-131h-131v-219h131v-635h262v635h175zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf083;" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf084;" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
+<glyph unicode="&#xf085;" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
+<glyph unicode="&#xf086;" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
+<glyph unicode="&#xf087;" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
+<glyph unicode="&#xf088;" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
+<glyph unicode="&#xf089;" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
+<glyph unicode="&#xf08a;" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" />
+<glyph unicode="&#xf08b;" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
+<glyph unicode="&#xf08c;" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf08d;" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
+<glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf090;" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf091;" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf092;" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf093;" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
+<glyph unicode="&#xf094;" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
+<glyph unicode="&#xf095;" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
+<glyph unicode="&#xf096;" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf097;" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="&#xf098;" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf099;" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
+<glyph unicode="&#xf09a;" horiz-adv-x="768" d="M511 980h257l-30 -284h-227v-824h-341v824h-170v284h170v171q0 182 86 275.5t283 93.5h227v-284h-142q-39 0 -62.5 -6.5t-34 -23.5t-13.5 -34.5t-3 -49.5v-142z" />
+<glyph unicode="&#xf09b;" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
+<glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+<glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
+<glyph unicode="&#xf0a0;" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
+<glyph unicode="&#xf0a1;" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
+<glyph unicode="&#xf0a2;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM183 128h1298q-164 181 -246.5 411.5t-82.5 484.5q0 256 -320 256t-320 -256q0 -254 -82.5 -484.5t-246.5 -411.5zM1664 128q0 -52 -38 -90t-90 -38 h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
+<glyph unicode="&#xf0a3;" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
+<glyph unicode="&#xf0a4;" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
+<glyph unicode="&#xf0a5;" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf0a6;" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
+<glyph unicode="&#xf0a7;" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
+<glyph unicode="&#xf0a8;" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0a9;" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0aa;" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0ab;" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0ac;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
+<glyph unicode="&#xf0ad;" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
+<glyph unicode="&#xf0ae;" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0b0;" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
+<glyph unicode="&#xf0b1;" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf0b2;" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " />
+<glyph unicode="&#xf0c0;" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
+<glyph unicode="&#xf0c1;" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
+<glyph unicode="&#xf0c2;" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " />
+<glyph unicode="&#xf0c3;" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
+<glyph unicode="&#xf0c4;" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
+<glyph unicode="&#xf0c5;" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
+<glyph unicode="&#xf0c6;" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" />
+<glyph unicode="&#xf0c7;" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf0c8;" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0c9;" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0ca;" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf0cb;" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf0cc;" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
+<glyph unicode="&#xf0cd;" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
+<glyph unicode="&#xf0ce;" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" />
+<glyph unicode="&#xf0d0;" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
+<glyph unicode="&#xf0d1;" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d2;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0d3;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
+<glyph unicode="&#xf0d4;" d="M678 -57q0 -38 -10 -71h-380q-95 0 -171.5 56.5t-103.5 147.5q24 45 69 77.5t100 49.5t107 24t107 7q32 0 49 -2q6 -4 30.5 -21t33 -23t31 -23t32 -25.5t27.5 -25.5t26.5 -29.5t21 -30.5t17.5 -34.5t9.5 -36t4.5 -40.5zM385 294q-234 -7 -385 -85v433q103 -118 273 -118 q32 0 70 5q-21 -61 -21 -86q0 -67 63 -149zM558 805q0 -100 -43.5 -160.5t-140.5 -60.5q-51 0 -97 26t-78 67.5t-56 93.5t-35.5 104t-11.5 99q0 96 51.5 165t144.5 69q66 0 119 -41t84 -104t47 -130t16 -128zM1536 896v-736q0 -119 -84.5 -203.5t-203.5 -84.5h-468 q39 73 39 157q0 66 -22 122.5t-55.5 93t-72 71t-72 59.5t-55.5 54.5t-22 59.5q0 36 23 68t56 61.5t65.5 64.5t55.5 93t23 131t-26.5 145.5t-75.5 118.5q-6 6 -14 11t-12.5 7.5t-10 9.5t-10.5 17h135l135 64h-437q-138 0 -244.5 -38.5t-182.5 -133.5q0 126 81 213t207 87h960 q119 0 203.5 -84.5t84.5 -203.5v-96h-256v256h-128v-256h-256v-128h256v-256h128v256h256z" />
+<glyph unicode="&#xf0d5;" horiz-adv-x="1664" d="M876 71q0 21 -4.5 40.5t-9.5 36t-17.5 34.5t-21 30.5t-26.5 29.5t-27.5 25.5t-32 25.5t-31 23t-33 23t-30.5 21q-17 2 -50 2q-54 0 -106 -7t-108 -25t-98 -46t-69 -75t-27 -107q0 -68 35.5 -121.5t93 -84t120.5 -45.5t127 -15q59 0 112.5 12.5t100.5 39t74.5 73.5 t27.5 110zM756 933q0 60 -16.5 127.5t-47 130.5t-84 104t-119.5 41q-93 0 -144 -69t-51 -165q0 -47 11.5 -99t35.5 -104t56 -93.5t78 -67.5t97 -26q97 0 140.5 60.5t43.5 160.5zM625 1408h437l-135 -79h-135q71 -45 110 -126t39 -169q0 -74 -23 -131.5t-56 -92.5t-66 -64.5 t-56 -61t-23 -67.5q0 -26 16.5 -51t43 -48t58.5 -48t64 -55.5t58.5 -66t43 -85t16.5 -106.5q0 -160 -140 -282q-152 -131 -420 -131q-59 0 -119.5 10t-122 33.5t-108.5 58t-77 89t-30 121.5q0 61 37 135q32 64 96 110.5t145 71t155 36t150 13.5q-64 83 -64 149q0 12 2 23.5 t5 19.5t8 21.5t7 21.5q-40 -5 -70 -5q-149 0 -255.5 98t-106.5 246q0 140 95 250.5t234 141.5q94 20 187 20zM1664 1152v-128h-256v-256h-128v256h-256v128h256v256h128v-256h256z" />
+<glyph unicode="&#xf0d6;" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d7;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d8;" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0d9;" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf0da;" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0db;" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf0dc;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0dd;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0de;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0e0;" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
+<glyph unicode="&#xf0e1;" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
+<glyph unicode="&#xf0e2;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
+<glyph unicode="&#xf0e3;" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
+<glyph unicode="&#xf0e4;" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="&#xf0e5;" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="&#xf0e6;" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
+<glyph unicode="&#xf0e7;" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
+<glyph unicode="&#xf0e8;" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" />
+<glyph unicode="&#xf0e9;" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf0ea;" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf0eb;" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
+<glyph unicode="&#xf0ec;" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="&#xf0ed;" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="&#xf0ee;" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="&#xf0f0;" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf0f1;" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
+<glyph unicode="&#xf0f2;" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" />
+<glyph unicode="&#xf0f3;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1664 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5 q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
+<glyph unicode="&#xf0f4;" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf0f5;" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f6;" horiz-adv-x="1280" d="M1024 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1024 608v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280z M768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf0f7;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f8;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f9;" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0fa;" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf0fb;" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" />
+<glyph unicode="&#xf0fc;" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
+<glyph unicode="&#xf0fd;" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0fe;" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf100;" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
+<glyph unicode="&#xf101;" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf102;" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf103;" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf104;" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf105;" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf106;" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf107;" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf108;" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf109;" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
+<glyph unicode="&#xf10a;" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf10b;" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf10c;" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf10d;" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
+<glyph unicode="&#xf10e;" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
+<glyph unicode="&#xf110;" horiz-adv-x="1568" d="M496 192q0 -60 -42.5 -102t-101.5 -42q-60 0 -102 42t-42 102t42 102t102 42q59 0 101.5 -42t42.5 -102zM928 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -66 -47 -113t-113 -47t-113 47t-47 113 t47 113t113 47t113 -47t47 -113zM1360 192q0 -46 -33 -79t-79 -33t-79 33t-33 79t33 79t79 33t79 -33t33 -79zM528 1088q0 -73 -51.5 -124.5t-124.5 -51.5t-124.5 51.5t-51.5 124.5t51.5 124.5t124.5 51.5t124.5 -51.5t51.5 -124.5zM992 1280q0 -80 -56 -136t-136 -56 t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1536 640q0 -40 -28 -68t-68 -28t-68 28t-28 68t28 68t68 28t68 -28t28 -68zM1328 1088q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5z" />
+<glyph unicode="&#xf111;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf112;" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
+<glyph unicode="&#xf113;" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" />
+<glyph unicode="&#xf114;" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf115;" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " />
+<glyph unicode="&#xf116;" horiz-adv-x="1792" />
+<glyph unicode="&#xf117;" horiz-adv-x="1792" />
+<glyph unicode="&#xf118;" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf119;" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf11a;" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf11b;" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
+<glyph unicode="&#xf11c;" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf11d;" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+<glyph unicode="&#xf11e;" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+<glyph unicode="&#xf120;" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" />
+<glyph unicode="&#xf121;" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
+<glyph unicode="&#xf122;" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
+<glyph unicode="&#xf123;" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
+<glyph unicode="&#xf124;" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
+<glyph unicode="&#xf125;" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf126;" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
+<glyph unicode="&#xf127;" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+<glyph unicode="&#xf128;" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
+<glyph unicode="&#xf129;" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf12a;" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
+<glyph unicode="&#xf12b;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" />
+<glyph unicode="&#xf12c;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" />
+<glyph unicode="&#xf12d;" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
+<glyph unicode="&#xf12e;" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
+<glyph unicode="&#xf130;" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
+<glyph unicode="&#xf131;" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
+<glyph unicode="&#xf132;" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf133;" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf134;" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
+<glyph unicode="&#xf135;" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
+<glyph unicode="&#xf136;" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
+<glyph unicode="&#xf137;" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf138;" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf139;" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf13a;" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf13b;" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
+<glyph unicode="&#xf13c;" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
+<glyph unicode="&#xf13d;" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf13e;" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" />
+<glyph unicode="&#xf140;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf141;" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf142;" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf143;" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf144;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" />
+<glyph unicode="&#xf145;" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
+<glyph unicode="&#xf146;" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
+<glyph unicode="&#xf147;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf148;" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
+<glyph unicode="&#xf149;" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
+<glyph unicode="&#xf14a;" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14b;" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14c;" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14d;" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14e;" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf150;" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf151;" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf152;" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf153;" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
+<glyph unicode="&#xf154;" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
+<glyph unicode="&#xf155;" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" />
+<glyph unicode="&#xf156;" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf157;" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
+<glyph unicode="&#xf158;" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
+<glyph unicode="&#xf159;" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf15a;" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
+<glyph unicode="&#xf15b;" horiz-adv-x="1280" d="M1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
+<glyph unicode="&#xf15c;" horiz-adv-x="1280" d="M1024 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1024 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28 t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
+<glyph unicode="&#xf15d;" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" />
+<glyph unicode="&#xf15e;" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" />
+<glyph unicode="&#xf160;" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf161;" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf162;" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
+<glyph unicode="&#xf163;" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
+<glyph unicode="&#xf164;" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
+<glyph unicode="&#xf165;" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
+<glyph unicode="&#xf166;" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf167;" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
+<glyph unicode="&#xf168;" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" />
+<glyph unicode="&#xf169;" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf16a;" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
+<glyph unicode="&#xf16b;" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
+<glyph unicode="&#xf16c;" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" />
+<glyph unicode="&#xf16d;" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" />
+<glyph unicode="&#xf16e;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
+<glyph unicode="&#xf170;" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf171;" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
+<glyph unicode="&#xf172;" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf173;" horiz-adv-x="1024" d="M390 1408h219v-388h364v-241h-364v-394q0 -136 14 -172q13 -37 52 -60q50 -31 117 -31q117 0 232 76v-242q-102 -48 -178 -65q-77 -19 -173 -19q-105 0 -186 27q-78 25 -138 75q-58 51 -79 105q-22 54 -22 161v539h-170v217q91 30 155 84q64 55 103 132q39 78 54 196z " />
+<glyph unicode="&#xf174;" d="M1123 127v181q-88 -56 -174 -56q-51 0 -88 23q-29 17 -39 45q-11 30 -11 129v295h274v181h-274v291h-164q-11 -90 -40 -147t-78 -99q-48 -40 -116 -63v-163h127v-404q0 -78 17 -121q17 -42 59 -78q43 -37 104 -57q62 -20 140 -20q67 0 129 14q57 13 134 49zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf175;" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
+<glyph unicode="&#xf176;" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
+<glyph unicode="&#xf177;" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf178;" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
+<glyph unicode="&#xf179;" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
+<glyph unicode="&#xf17a;" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
+<glyph unicode="&#xf17b;" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
+<glyph unicode="&#xf17c;" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
+<glyph unicode="&#xf17d;" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf17e;" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
+<glyph unicode="&#xf180;" horiz-adv-x="1664" d="M1483 512l-587 -587q-52 -53 -127.5 -53t-128.5 53l-587 587q-53 53 -53 128t53 128l587 587q53 53 128 53t128 -53l265 -265l-398 -399l-188 188q-42 42 -99 42q-59 0 -100 -41l-120 -121q-42 -40 -42 -99q0 -58 42 -100l406 -408q30 -28 67 -37l6 -4h28q60 0 99 41 l619 619l2 -3q53 -53 53 -128t-53 -128zM1406 1138l120 -120q14 -15 14 -36t-14 -36l-730 -730q-17 -15 -37 -15v0q-4 0 -6 1q-18 2 -30 14l-407 408q-14 15 -14 36t14 35l121 120q13 15 35 15t36 -15l252 -252l574 575q15 15 36 15t36 -15z" />
+<glyph unicode="&#xf181;" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf182;" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf183;" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf184;" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf185;" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
+<glyph unicode="&#xf186;" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
+<glyph unicode="&#xf187;" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf188;" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
+<glyph unicode="&#xf189;" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" />
+<glyph unicode="&#xf18a;" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
+<glyph unicode="&#xf18b;" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
+<glyph unicode="&#xf18c;" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
+<glyph unicode="&#xf18d;" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " />
+<glyph unicode="&#xf18e;" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf190;" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf191;" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf192;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf193;" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
+<glyph unicode="&#xf194;" d="M1254 899q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 113.5 -16t26.5 -99q-5 -52 -52 -143q-43 -78 -71 -99q-44 -32 -87 14q-23 24 -37.5 64.5t-19 73t-10 84t-8.5 71.5q-23 129 -34 164q-12 37 -35.5 69 t-50.5 40q-57 16 -127 -25q-54 -32 -136.5 -106t-122.5 -102v-7q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t76 31.5q131 77 250 237 q104 139 172.5 292.5t82.5 226.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf195;" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf196;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf197;" horiz-adv-x="1792" />
+<glyph unicode="&#xf198;" horiz-adv-x="1792" />
+<glyph unicode="&#xf199;" horiz-adv-x="1792" />
+<glyph unicode="&#xf19a;" horiz-adv-x="1792" />
+<glyph unicode="&#xf19b;" horiz-adv-x="1792" />
+<glyph unicode="&#xf19c;" horiz-adv-x="1792" />
+<glyph unicode="&#xf19d;" horiz-adv-x="1792" />
+<glyph unicode="&#xf19e;" horiz-adv-x="1792" />
+<glyph unicode="&#xf500;" horiz-adv-x="1792" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.ttf b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.ttf
new file mode 100755
index 0000000..e89738d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.ttf
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.woff b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.woff
new file mode 100755
index 0000000..8c1748a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.woff
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/graphael/g.raphael.standalone.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/graphael/g.raphael.standalone.js
new file mode 100644
index 0000000..2568aa0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/graphael/g.raphael.standalone.js
@@ -0,0 +1,5205 @@
+/*!
+ * Raphael 1.5.2 - JavaScript Vector Library
+ *
+ * Copyright (c) 2010 Dmitry Baranovskiy (http://raphaeljs.com)
+ * Licensed under the MIT (http://raphaeljs.com/license.html) license.
+ * from fork at git@github.com:mobz/g.raphael.git
+ */
+(function () {
+    function R() {
+        if (R.is(arguments[0], array)) {
+            var a = arguments[0],
+                cnv = create[apply](R, a.splice(0, 3 + R.is(a[0], nu))),
+                res = cnv.set();
+            for (var i = 0, ii = a[length]; i < ii; i++) {
+                var j = a[i] || {};
+                elements[has](j.type) && res[push](cnv[j.type]().attr(j));
+            }
+            return res;
+        }
+        return create[apply](R, arguments);
+    }
+    R.version = "1.5.2";
+    var separator = /[, ]+/,
+        elements = {circle: 1, rect: 1, path: 1, ellipse: 1, text: 1, image: 1},
+        formatrg = /\{(\d+)\}/g,
+        proto = "prototype",
+        has = "hasOwnProperty",
+        doc = document,
+        win = window,
+        oldRaphael = {
+            was: Object[proto][has].call(win, "Raphael"),
+            is: win.Raphael
+        },
+        Paper = function () {
+            this.customAttributes = {};
+        },
+        paperproto,
+        appendChild = "appendChild",
+        apply = "apply",
+        concat = "concat",
+        supportsTouch = "createTouch" in doc,
+        E = "",
+        S = " ",
+        Str = String,
+        split = "split",
+        events = "click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend orientationchange touchcancel gesturestart gesturechange gestureend"[split](S),
+        touchMap = {
+            mousedown: "touchstart",
+            mousemove: "touchmove",
+            mouseup: "touchend"
+        },
+        join = "join",
+        length = "length",
+        lowerCase = Str[proto].toLowerCase,
+        math = Math,
+        mmax = math.max,
+        mmin = math.min,
+        abs = math.abs,
+        pow = math.pow,
+        PI = math.PI,
+        nu = "number",
+        string = "string",
+        array = "array",
+        toString = "toString",
+        fillString = "fill",
+        objectToString = Object[proto][toString],
+        paper = {},
+        push = "push",
+        ISURL = /^url\(['"]?([^\)]+?)['"]?\)$/i,
+        colourRegExp = /^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i,
+        isnan = {"NaN": 1, "Infinity": 1, "-Infinity": 1},
+        bezierrg = /^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/,
+        round = math.round,
+        setAttribute = "setAttribute",
+        toFloat = parseFloat,
+        toInt = parseInt,
+        ms = " progid:DXImageTransform.Microsoft",
+        upperCase = Str[proto].toUpperCase,
+        availableAttrs = {blur: 0, "clip-rect": "0 0 1e9 1e9", cursor: "default", cx: 0, cy: 0, fill: "#fff", "fill-opacity": 1, font: '10px "Arial"', "font-family": '"Arial"', "font-size": "10", "font-style": "normal", "font-weight": 400, gradient: 0, height: 0, href: "http://raphaeljs.com/", opacity: 1, path: "M0,0", r: 0, rotation: 0, rx: 0, ry: 0, scale: "1 1", src: "", stroke: "#000", "stroke-dasharray": "", "stroke-linecap": "butt", "stroke-linejoin": "butt", "stroke-miterlimit": 0, "stroke-opacity": 1, "stroke-width": 1, target: "_blank", "text-anchor": "middle", title: "Raphael", translation: "0 0", width: 0, x: 0, y: 0},
+        availableAnimAttrs = {along: "along", blur: nu, "clip-rect": "csv", cx: nu, cy: nu, fill: "colour", "fill-opacity": nu, "font-size": nu, height: nu, opacity: nu, path: "path", r: nu, rotation: "csv", rx: nu, ry: nu, scale: "csv", stroke: "colour", "stroke-opacity": nu, "stroke-width": nu, translation: "csv", width: nu, x: nu, y: nu},
+        rp = "replace",
+        animKeyFrames= /^(from|to|\d+%?)$/,
+        commaSpaces = /\s*,\s*/,
+        hsrg = {hs: 1, rg: 1},
+        p2s = /,?([achlmqrstvxz]),?/gi,
+        pathCommand = /([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig,
+        pathValues = /(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig,
+        radial_gradient = /^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/,
+        sortByKey = function (a, b) {
+            return a.key - b.key;
+        };
+
+    R.type = (win.SVGAngle || doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") ? "SVG" : "VML");
+    if (R.type == "VML") {
+        var d = doc.createElement("div"),
+            b;
+        d.innerHTML = '<v:shape adj="1"/>';
+        b = d.firstChild;
+        b.style.behavior = "url(#default#VML)";
+        if (!(b && typeof b.adj == "object")) {
+            return R.type = null;
+        }
+        d = null;
+    }
+    R.svg = !(R.vml = R.type == "VML");
+    Paper[proto] = R[proto];
+    paperproto = Paper[proto];
+    R._id = 0;
+    R._oid = 0;
+    R.fn = {};
+    R.is = function (o, type) {
+        type = lowerCase.call(type);
+        if (type == "finite") {
+            return !isnan[has](+o);
+        }
+        return  (type == "null" && o === null) ||
+                (type == typeof o) ||
+                (type == "object" && o === Object(o)) ||
+                (type == "array" && Array.isArray && Array.isArray(o)) ||
+                objectToString.call(o).slice(8, -1).toLowerCase() == type;
+    };
+    R.angle = function (x1, y1, x2, y2, x3, y3) {
+        if (x3 == null) {
+            var x = x1 - x2,
+                y = y1 - y2;
+            if (!x && !y) {
+                return 0;
+            }
+            return ((x < 0) * 180 + math.atan(-y / -x) * 180 / PI + 360) % 360;
+        } else {
+            return R.angle(x1, y1, x3, y3) - R.angle(x2, y2, x3, y3);
+        }
+    };
+    R.rad = function (deg) {
+        return deg % 360 * PI / 180;
+    };
+    R.deg = function (rad) {
+        return rad * 180 / PI % 360;
+    };
+    R.snapTo = function (values, value, tolerance) {
+        tolerance = R.is(tolerance, "finite") ? tolerance : 10;
+        if (R.is(values, array)) {
+            var i = values.length;
+            while (i--) if (abs(values[i] - value) <= tolerance) {
+                return values[i];
+            }
+        } else {
+            values = +values;
+            var rem = value % values;
+            if (rem < tolerance) {
+                return value - rem;
+            }
+            if (rem > values - tolerance) {
+                return value - rem + values;
+            }
+        }
+        return value;
+    };
+    function createUUID() {
+        // http://www.ietf.org/rfc/rfc4122.txt
+        var s = [],
+            i = 0;
+        for (; i < 32; i++) {
+            s[i] = (~~(math.random() * 16))[toString](16);
+        }
+        s[12] = 4;  // bits 12-15 of the time_hi_and_version field to 0010
+        s[16] = ((s[16] & 3) | 8)[toString](16);  // bits 6-7 of the clock_seq_hi_and_reserved to 01
+        return "r-" + s[join]("");
+    }
+
+    R.setWindow = function (newwin) {
+        win = newwin;
+        doc = win.document;
+    };
+    // colour utilities
+    var toHex = function (color) {
+        if (R.vml) {
+            // http://dean.edwards.name/weblog/2009/10/convert-any-colour-value-to-hex-in-msie/
+            var trim = /^\s+|\s+$/g;
+            var bod;
+            try {
+                var docum = new ActiveXObject("htmlfile");
+                docum.write("<body>");
+                docum.close();
+                bod = docum.body;
+            } catch(e) {
+                bod = createPopup().document.body;
+            }
+            var range = bod.createTextRange();
+            toHex = cacher(function (color) {
+                try {
+                    bod.style.color = Str(color)[rp](trim, E);
+                    var value = range.queryCommandValue("ForeColor");
+                    value = ((value & 255) << 16) | (value & 65280) | ((value & 16711680) >>> 16);
+                    return "#" + ("000000" + value[toString](16)).slice(-6);
+                } catch(e) {
+                    return "none";
+                }
+            });
+        } else {
+            var i = doc.createElement("i");
+            i.title = "Rapha\xebl Colour Picker";
+            i.style.display = "none";
+            doc.body[appendChild](i);
+            toHex = cacher(function (color) {
+                i.style.color = color;
+                return doc.defaultView.getComputedStyle(i, E).getPropertyValue("color");
+            });
+        }
+        return toHex(color);
+    },
+    hsbtoString = function () {
+        return "hsb(" + [this.h, this.s, this.b] + ")";
+    },
+    hsltoString = function () {
+        return "hsl(" + [this.h, this.s, this.l] + ")";
+    },
+    rgbtoString = function () {
+        return this.hex;
+    };
+    R.hsb2rgb = function (h, s, b, o) {
+        if (R.is(h, "object") && "h" in h && "s" in h && "b" in h) {
+            b = h.b;
+            s = h.s;
+            h = h.h;
+            o = h.o;
+        }
+        return R.hsl2rgb(h, s, b / 2, o);
+    };
+    R.hsl2rgb = function (h, s, l, o) {
+        if (R.is(h, "object") && "h" in h && "s" in h && "l" in h) {
+            l = h.l;
+            s = h.s;
+            h = h.h;
+        }
+        if (h > 1 || s > 1 || l > 1) {
+            h /= 360;
+            s /= 100;
+            l /= 100;
+        }
+        var rgb = {},
+            channels = ["r", "g", "b"],
+            t2, t1, t3, r, g, b;
+        if (!s) {
+            rgb = {
+                r: l,
+                g: l,
+                b: l
+            };
+        } else {
+            if (l < .5) {
+                t2 = l * (1 + s);
+            } else {
+                t2 = l + s - l * s;
+            }
+            t1 = 2 * l - t2;
+            for (var i = 0; i < 3; i++) {
+                t3 = h + 1 / 3 * -(i - 1);
+                t3 < 0 && t3++;
+                t3 > 1 && t3--;
+                if (t3 * 6 < 1) {
+                    rgb[channels[i]] = t1 + (t2 - t1) * 6 * t3;
+                } else if (t3 * 2 < 1) {
+                    rgb[channels[i]] = t2;
+                } else if (t3 * 3 < 2) {
+                    rgb[channels[i]] = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
+                } else {
+                    rgb[channels[i]] = t1;
+                }
+            }
+        }
+        rgb.r *= 255;
+        rgb.g *= 255;
+        rgb.b *= 255;
+        rgb.hex = "#" + (16777216 | rgb.b | (rgb.g << 8) | (rgb.r << 16)).toString(16).slice(1);
+        R.is(o, "finite") && (rgb.opacity = o);
+        rgb.toString = rgbtoString;
+        return rgb;
+    };
+    R.rgb2hsb = function (red, green, blue) {
+        if (green == null && R.is(red, "object") && "r" in red && "g" in red && "b" in red) {
+            blue = red.b;
+            green = red.g;
+            red = red.r;
+        }
+        if (green == null && R.is(red, string)) {
+            var clr = R.getRGB(red);
+            red = clr.r;
+            green = clr.g;
+            blue = clr.b;
+        }
+        if (red > 1 || green > 1 || blue > 1) {
+            red /= 255;
+            green /= 255;
+            blue /= 255;
+        }
+        var max = mmax(red, green, blue),
+            min = mmin(red, green, blue),
+            hue,
+            saturation,
+            brightness = max;
+        if (min == max) {
+            return {h: 0, s: 0, b: max, toString: hsbtoString};
+        } else {
+            var delta = (max - min);
+            saturation = delta / max;
+            if (red == max) {
+                hue = (green - blue) / delta;
+            } else if (green == max) {
+                hue = 2 + ((blue - red) / delta);
+            } else {
+                hue = 4 + ((red - green) / delta);
+            }
+            hue /= 6;
+            hue < 0 && hue++;
+            hue > 1 && hue--;
+        }
+        return {h: hue, s: saturation, b: brightness, toString: hsbtoString};
+    };
+    R.rgb2hsl = function (red, green, blue) {
+        if (green == null && R.is(red, "object") && "r" in red && "g" in red && "b" in red) {
+            blue = red.b;
+            green = red.g;
+            red = red.r;
+        }
+        if (green == null && R.is(red, string)) {
+            var clr = R.getRGB(red);
+            red = clr.r;
+            green = clr.g;
+            blue = clr.b;
+        }
+        if (red > 1 || green > 1 || blue > 1) {
+            red /= 255;
+            green /= 255;
+            blue /= 255;
+        }
+        var max = mmax(red, green, blue),
+            min = mmin(red, green, blue),
+            h,
+            s,
+            l = (max + min) / 2,
+            hsl;
+        if (min == max) {
+            hsl =  {h: 0, s: 0, l: l};
+        } else {
+            var delta = max - min;
+            s = l < .5 ? delta / (max + min) : delta / (2 - max - min);
+            if (red == max) {
+                h = (green - blue) / delta;
+            } else if (green == max) {
+                h = 2 + (blue - red) / delta;
+            } else {
+                h = 4 + (red - green) / delta;
+            }
+            h /= 6;
+            h < 0 && h++;
+            h > 1 && h--;
+            hsl = {h: h, s: s, l: l};
+        }
+        hsl.toString = hsltoString;
+        return hsl;
+    };
+    R._path2string = function () {
+        return this.join(",")[rp](p2s, "$1");
+    };
+    function cacher(f, scope, postprocessor) {
+        function newf() {
+            var arg = Array[proto].slice.call(arguments, 0),
+                args = arg[join]("\u25ba"),
+                cache = newf.cache = newf.cache || {},
+                count = newf.count = newf.count || [];
+            if (cache[has](args)) {
+                return postprocessor ? postprocessor(cache[args]) : cache[args];
+            }
+            count[length] >= 1e3 && delete cache[count.shift()];
+            count[push](args);
+            cache[args] = f[apply](scope, arg);
+            return postprocessor ? postprocessor(cache[args]) : cache[args];
+        }
+        return newf;
+    }
+ 
+    R.getRGB = cacher(function (colour) {
+        if (!colour || !!((colour = Str(colour)).indexOf("-") + 1)) {
+            return {r: -1, g: -1, b: -1, hex: "none", error: 1};
+        }
+        if (colour == "none") {
+            return {r: -1, g: -1, b: -1, hex: "none"};
+        }
+        !(hsrg[has](colour.toLowerCase().substring(0, 2)) || colour.charAt() == "#") && (colour = toHex(colour));
+        var res,
+            red,
+            green,
+            blue,
+            opacity,
+            t,
+            values,
+            rgb = colour.match(colourRegExp);
+        if (rgb) {
+            if (rgb[2]) {
+                blue = toInt(rgb[2].substring(5), 16);
+                green = toInt(rgb[2].substring(3, 5), 16);
+                red = toInt(rgb[2].substring(1, 3), 16);
+            }
+            if (rgb[3]) {
+                blue = toInt((t = rgb[3].charAt(3)) + t, 16);
+                green = toInt((t = rgb[3].charAt(2)) + t, 16);
+                red = toInt((t = rgb[3].charAt(1)) + t, 16);
+            }
+            if (rgb[4]) {
+                values = rgb[4][split](commaSpaces);
+                red = toFloat(values[0]);
+                values[0].slice(-1) == "%" && (red *= 2.55);
+                green = toFloat(values[1]);
+                values[1].slice(-1) == "%" && (green *= 2.55);
+                blue = toFloat(values[2]);
+                values[2].slice(-1) == "%" && (blue *= 2.55);
+                rgb[1].toLowerCase().slice(0, 4) == "rgba" && (opacity = toFloat(values[3]));
+                values[3] && values[3].slice(-1) == "%" && (opacity /= 100);
+            }
+            if (rgb[5]) {
+                values = rgb[5][split](commaSpaces);
+                red = toFloat(values[0]);
+                values[0].slice(-1) == "%" && (red *= 2.55);
+                green = toFloat(values[1]);
+                values[1].slice(-1) == "%" && (green *= 2.55);
+                blue = toFloat(values[2]);
+                values[2].slice(-1) == "%" && (blue *= 2.55);
+                (values[0].slice(-3) == "deg" || values[0].slice(-1) == "\xb0") && (red /= 360);
+                rgb[1].toLowerCase().slice(0, 4) == "hsba" && (opacity = toFloat(values[3]));
+                values[3] && values[3].slice(-1) == "%" && (opacity /= 100);
+                return R.hsb2rgb(red, green, blue, opacity);
+            }
+            if (rgb[6]) {
+                values = rgb[6][split](commaSpaces);
+                red = toFloat(values[0]);
+                values[0].slice(-1) == "%" && (red *= 2.55);
+                green = toFloat(values[1]);
+                values[1].slice(-1) == "%" && (green *= 2.55);
+                blue = toFloat(values[2]);
+                values[2].slice(-1) == "%" && (blue *= 2.55);
+                (values[0].slice(-3) == "deg" || values[0].slice(-1) == "\xb0") && (red /= 360);
+                rgb[1].toLowerCase().slice(0, 4) == "hsla" && (opacity = toFloat(values[3]));
+                values[3] && values[3].slice(-1) == "%" && (opacity /= 100);
+                return R.hsl2rgb(red, green, blue, opacity);
+            }
+            rgb = {r: red, g: green, b: blue};
+            rgb.hex = "#" + (16777216 | blue | (green << 8) | (red << 16)).toString(16).slice(1);
+            R.is(opacity, "finite") && (rgb.opacity = opacity);
+            return rgb;
+        }
+        return {r: -1, g: -1, b: -1, hex: "none", error: 1};
+    }, R);
+    R.getColor = function (value) {
+        var start = this.getColor.start = this.getColor.start || {h: 0, s: 1, b: value || .75},
+            rgb = this.hsb2rgb(start.h, start.s, start.b);
+        start.h += .075;
+        if (start.h > 1) {
+            start.h = 0;
+            start.s -= .2;
+            start.s <= 0 && (this.getColor.start = {h: 0, s: 1, b: start.b});
+        }
+        return rgb.hex;
+    };
+    R.getColor.reset = function () {
+        delete this.start;
+    };
+    // path utilities
+    R.parsePathString = cacher(function (pathString) {
+        if (!pathString) {
+            return null;
+        }
+        var paramCounts = {a: 7, c: 6, h: 1, l: 2, m: 2, q: 4, s: 4, t: 2, v: 1, z: 0},
+            data = [];
+        if (R.is(pathString, array) && R.is(pathString[0], array)) { // rough assumption
+            data = pathClone(pathString);
+        }
+        if (!data[length]) {
+            Str(pathString)[rp](pathCommand, function (a, b, c) {
+                var params = [],
+                    name = lowerCase.call(b);
+                c[rp](pathValues, function (a, b) {
+                    b && params[push](+b);
+                });
+                if (name == "m" && params[length] > 2) {
+                    data[push]([b][concat](params.splice(0, 2)));
+                    name = "l";
+                    b = b == "m" ? "l" : "L";
+                }
+                while (params[length] >= paramCounts[name]) {
+                    data[push]([b][concat](params.splice(0, paramCounts[name])));
+                    if (!paramCounts[name]) {
+                        break;
+                    }
+                }
+            });
+        }
+        data[toString] = R._path2string;
+        return data;
+    });
+    R.findDotsAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {
+        var t1 = 1 - t,
+            x = pow(t1, 3) * p1x + pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + pow(t, 3) * p2x,
+            y = pow(t1, 3) * p1y + pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + pow(t, 3) * p2y,
+            mx = p1x + 2 * t * (c1x - p1x) + t * t * (c2x - 2 * c1x + p1x),
+            my = p1y + 2 * t * (c1y - p1y) + t * t * (c2y - 2 * c1y + p1y),
+            nx = c1x + 2 * t * (c2x - c1x) + t * t * (p2x - 2 * c2x + c1x),
+            ny = c1y + 2 * t * (c2y - c1y) + t * t * (p2y - 2 * c2y + c1y),
+            ax = (1 - t) * p1x + t * c1x,
+            ay = (1 - t) * p1y + t * c1y,
+            cx = (1 - t) * c2x + t * p2x,
+            cy = (1 - t) * c2y + t * p2y,
+            alpha = (90 - math.atan((mx - nx) / (my - ny)) * 180 / PI);
+        (mx > nx || my < ny) && (alpha += 180);
+        return {x: x, y: y, m: {x: mx, y: my}, n: {x: nx, y: ny}, start: {x: ax, y: ay}, end: {x: cx, y: cy}, alpha: alpha};
+    };
+    var pathDimensions = cacher(function (path) {
+        if (!path) {
+            return {x: 0, y: 0, width: 0, height: 0};
+        }
+        path = path2curve(path);
+        var x = 0, 
+            y = 0,
+            X = [],
+            Y = [],
+            p;
+        for (var i = 0, ii = path[length]; i < ii; i++) {
+            p = path[i];
+            if (p[0] == "M") {
+                x = p[1];
+                y = p[2];
+                X[push](x);
+                Y[push](y);
+            } else {
+                var dim = curveDim(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);
+                X = X[concat](dim.min.x, dim.max.x);
+                Y = Y[concat](dim.min.y, dim.max.y);
+                x = p[5];
+                y = p[6];
+            }
+        }
+        var xmin = mmin[apply](0, X),
+            ymin = mmin[apply](0, Y);
+        return {
+            x: xmin,
+            y: ymin,
+            width: mmax[apply](0, X) - xmin,
+            height: mmax[apply](0, Y) - ymin
+        };
+    }),
+        pathClone = function (pathArray) {
+            var res = [];
+            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption
+                pathArray = R.parsePathString(pathArray);
+            }
+            for (var i = 0, ii = pathArray[length]; i < ii; i++) {
+                res[i] = [];
+                for (var j = 0, jj = pathArray[i][length]; j < jj; j++) {
+                    res[i][j] = pathArray[i][j];
+                }
+            }
+            res[toString] = R._path2string;
+            return res;
+        },
+        pathToRelative = cacher(function (pathArray) {
+            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption
+                pathArray = R.parsePathString(pathArray);
+            }
+            var res = [],
+                x = 0,
+                y = 0,
+                mx = 0,
+                my = 0,
+                start = 0;
+            if (pathArray[0][0] == "M") {
+                x = pathArray[0][1];
+                y = pathArray[0][2];
+                mx = x;
+                my = y;
+                start++;
+                res[push](["M", x, y]);
+            }
+            for (var i = start, ii = pathArray[length]; i < ii; i++) {
+                var r = res[i] = [],
+                    pa = pathArray[i];
+                if (pa[0] != lowerCase.call(pa[0])) {
+                    r[0] = lowerCase.call(pa[0]);
+                    switch (r[0]) {
+                        case "a":
+                            r[1] = pa[1];
+                            r[2] = pa[2];
+                            r[3] = pa[3];
+                            r[4] = pa[4];
+                            r[5] = pa[5];
+                            r[6] = +(pa[6] - x).toFixed(3);
+                            r[7] = +(pa[7] - y).toFixed(3);
+                            break;
+                        case "v":
+                            r[1] = +(pa[1] - y).toFixed(3);
+                            break;
+                        case "m":
+                            mx = pa[1];
+                            my = pa[2];
+                        default:
+                            for (var j = 1, jj = pa[length]; j < jj; j++) {
+                                r[j] = +(pa[j] - ((j % 2) ? x : y)).toFixed(3);
+                            }
+                    }
+                } else {
+                    r = res[i] = [];
+                    if (pa[0] == "m") {
+                        mx = pa[1] + x;
+                        my = pa[2] + y;
+                    }
+                    for (var k = 0, kk = pa[length]; k < kk; k++) {
+                        res[i][k] = pa[k];
+                    }
+                }
+                var len = res[i][length];
+                switch (res[i][0]) {
+                    case "z":
+                        x = mx;
+                        y = my;
+                        break;
+                    case "h":
+                        x += +res[i][len - 1];
+                        break;
+                    case "v":
+                        y += +res[i][len - 1];
+                        break;
+                    default:
+                        x += +res[i][len - 2];
+                        y += +res[i][len - 1];
+                }
+            }
+            res[toString] = R._path2string;
+            return res;
+        }, 0, pathClone),
+        pathToAbsolute = cacher(function (pathArray) {
+            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption
+                pathArray = R.parsePathString(pathArray);
+            }
+            var res = [],
+                x = 0,
+                y = 0,
+                mx = 0,
+                my = 0,
+                start = 0;
+            if (pathArray[0][0] == "M") {
+                x = +pathArray[0][1];
+                y = +pathArray[0][2];
+                mx = x;
+                my = y;
+                start++;
+                res[0] = ["M", x, y];
+            }
+            for (var i = start, ii = pathArray[length]; i < ii; i++) {
+                var r = res[i] = [],
+                    pa = pathArray[i];
+                if (pa[0] != upperCase.call(pa[0])) {
+                    r[0] = upperCase.call(pa[0]);
+                    switch (r[0]) {
+                        case "A":
+                            r[1] = pa[1];
+                            r[2] = pa[2];
+                            r[3] = pa[3];
+                            r[4] = pa[4];
+                            r[5] = pa[5];
+                            r[6] = +(pa[6] + x);
+                            r[7] = +(pa[7] + y);
+                            break;
+                        case "V":
+                            r[1] = +pa[1] + y;
+                            break;
+                        case "H":
+                            r[1] = +pa[1] + x;
+                            break;
+                        case "M":
+                            mx = +pa[1] + x;
+                            my = +pa[2] + y;
+                        default:
+                            for (var j = 1, jj = pa[length]; j < jj; j++) {
+                                r[j] = +pa[j] + ((j % 2) ? x : y);
+                            }
+                    }
+                } else {
+                    for (var k = 0, kk = pa[length]; k < kk; k++) {
+                        res[i][k] = pa[k];
+                    }
+                }
+                switch (r[0]) {
+                    case "Z":
+                        x = mx;
+                        y = my;
+                        break;
+                    case "H":
+                        x = r[1];
+                        break;
+                    case "V":
+                        y = r[1];
+                        break;
+                    case "M":
+                        mx = res[i][res[i][length] - 2];
+                        my = res[i][res[i][length] - 1];
+                    default:
+                        x = res[i][res[i][length] - 2];
+                        y = res[i][res[i][length] - 1];
+                }
+            }
+            res[toString] = R._path2string;
+            return res;
+        }, null, pathClone),
+        l2c = function (x1, y1, x2, y2) {
+            return [x1, y1, x2, y2, x2, y2];
+        },
+        q2c = function (x1, y1, ax, ay, x2, y2) {
+            var _13 = 1 / 3,
+                _23 = 2 / 3;
+            return [
+                    _13 * x1 + _23 * ax,
+                    _13 * y1 + _23 * ay,
+                    _13 * x2 + _23 * ax,
+                    _13 * y2 + _23 * ay,
+                    x2,
+                    y2
+                ];
+        },
+        a2c = function (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {
+            // for more information of where this math came from visit:
+            // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes
+            var _120 = PI * 120 / 180,
+                rad = PI / 180 * (+angle || 0),
+                res = [],
+                xy,
+                rotate = cacher(function (x, y, rad) {
+                    var X = x * math.cos(rad) - y * math.sin(rad),
+                        Y = x * math.sin(rad) + y * math.cos(rad);
+                    return {x: X, y: Y};
+                });
+            if (!recursive) {
+                xy = rotate(x1, y1, -rad);
+                x1 = xy.x;
+                y1 = xy.y;
+                xy = rotate(x2, y2, -rad);
+                x2 = xy.x;
+                y2 = xy.y;
+                var cos = math.cos(PI / 180 * angle),
+                    sin = math.sin(PI / 180 * angle),
+                    x = (x1 - x2) / 2,
+                    y = (y1 - y2) / 2;
+                var h = (x * x) / (rx * rx) + (y * y) / (ry * ry);
+                if (h > 1) {
+                    h = math.sqrt(h);
+                    rx = h * rx;
+                    ry = h * ry;
+                }
+                var rx2 = rx * rx,
+                    ry2 = ry * ry,
+                    k = (large_arc_flag == sweep_flag ? -1 : 1) *
+                        math.sqrt(abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x))),
+                    cx = k * rx * y / ry + (x1 + x2) / 2,
+                    cy = k * -ry * x / rx + (y1 + y2) / 2,
+                    f1 = math.asin(((y1 - cy) / ry).toFixed(9)),
+                    f2 = math.asin(((y2 - cy) / ry).toFixed(9));
+
+                f1 = x1 < cx ? PI - f1 : f1;
+                f2 = x2 < cx ? PI - f2 : f2;
+                f1 < 0 && (f1 = PI * 2 + f1);
+                f2 < 0 && (f2 = PI * 2 + f2);
+                if (sweep_flag && f1 > f2) {
+                    f1 = f1 - PI * 2;
+                }
+                if (!sweep_flag && f2 > f1) {
+                    f2 = f2 - PI * 2;
+                }
+            } else {
+                f1 = recursive[0];
+                f2 = recursive[1];
+                cx = recursive[2];
+                cy = recursive[3];
+            }
+            var df = f2 - f1;
+            if (abs(df) > _120) {
+                var f2old = f2,
+                    x2old = x2,
+                    y2old = y2;
+                f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);
+                x2 = cx + rx * math.cos(f2);
+                y2 = cy + ry * math.sin(f2);
+                res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);
+            }
+            df = f2 - f1;
+            var c1 = math.cos(f1),
+                s1 = math.sin(f1),
+                c2 = math.cos(f2),
+                s2 = math.sin(f2),
+                t = math.tan(df / 4),
+                hx = 4 / 3 * rx * t,
+                hy = 4 / 3 * ry * t,
+                m1 = [x1, y1],
+                m2 = [x1 + hx * s1, y1 - hy * c1],
+                m3 = [x2 + hx * s2, y2 - hy * c2],
+                m4 = [x2, y2];
+            m2[0] = 2 * m1[0] - m2[0];
+            m2[1] = 2 * m1[1] - m2[1];
+            if (recursive) {
+                return [m2, m3, m4][concat](res);
+            } else {
+                res = [m2, m3, m4][concat](res)[join]()[split](",");
+                var newres = [];
+                for (var i = 0, ii = res[length]; i < ii; i++) {
+                    newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x;
+                }
+                return newres;
+            }
+        },
+        findDotAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {
+            var t1 = 1 - t;
+            return {
+                x: pow(t1, 3) * p1x + pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + pow(t, 3) * p2x,
+                y: pow(t1, 3) * p1y + pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + pow(t, 3) * p2y
+            };
+        },
+        curveDim = cacher(function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {
+            var a = (c2x - 2 * c1x + p1x) - (p2x - 2 * c2x + c1x),
+                b = 2 * (c1x - p1x) - 2 * (c2x - c1x),
+                c = p1x - c1x,
+                t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a,
+                t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a,
+                y = [p1y, p2y],
+                x = [p1x, p2x],
+                dot;
+            abs(t1) > "1e12" && (t1 = .5);
+            abs(t2) > "1e12" && (t2 = .5);
+            if (t1 > 0 && t1 < 1) {
+                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);
+                x[push](dot.x);
+                y[push](dot.y);
+            }
+            if (t2 > 0 && t2 < 1) {
+                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);
+                x[push](dot.x);
+                y[push](dot.y);
+            }
+            a = (c2y - 2 * c1y + p1y) - (p2y - 2 * c2y + c1y);
+            b = 2 * (c1y - p1y) - 2 * (c2y - c1y);
+            c = p1y - c1y;
+            t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a;
+            t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a;
+            abs(t1) > "1e12" && (t1 = .5);
+            abs(t2) > "1e12" && (t2 = .5);
+            if (t1 > 0 && t1 < 1) {
+                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);
+                x[push](dot.x);
+                y[push](dot.y);
+            }
+            if (t2 > 0 && t2 < 1) {
+                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);
+                x[push](dot.x);
+                y[push](dot.y);
+            }
+            return {
+                min: {x: mmin[apply](0, x), y: mmin[apply](0, y)},
+                max: {x: mmax[apply](0, x), y: mmax[apply](0, y)}
+            };
+        }),
+        path2curve = cacher(function (path, path2) {
+            var p = pathToAbsolute(path),
+                p2 = path2 && pathToAbsolute(path2),
+                attrs = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},
+                attrs2 = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},
+                processPath = function (path, d) {
+                    var nx, ny;
+                    if (!path) {
+                        return ["C", d.x, d.y, d.x, d.y, d.x, d.y];
+                    }
+                    !(path[0] in {T:1, Q:1}) && (d.qx = d.qy = null);
+                    switch (path[0]) {
+                        case "M":
+                            d.X = path[1];
+                            d.Y = path[2];
+                            break;
+                        case "A":
+                            path = ["C"][concat](a2c[apply](0, [d.x, d.y][concat](path.slice(1))));
+                            break;
+                        case "S":
+                            nx = d.x + (d.x - (d.bx || d.x));
+                            ny = d.y + (d.y - (d.by || d.y));
+                            path = ["C", nx, ny][concat](path.slice(1));
+                            break;
+                        case "T":
+                            d.qx = d.x + (d.x - (d.qx || d.x));
+                            d.qy = d.y + (d.y - (d.qy || d.y));
+                            path = ["C"][concat](q2c(d.x, d.y, d.qx, d.qy, path[1], path[2]));
+                            break;
+                        case "Q":
+                            d.qx = path[1];
+                            d.qy = path[2];
+                            path = ["C"][concat](q2c(d.x, d.y, path[1], path[2], path[3], path[4]));
+                            break;
+                        case "L":
+                            path = ["C"][concat](l2c(d.x, d.y, path[1], path[2]));
+                            break;
+                        case "H":
+                            path = ["C"][concat](l2c(d.x, d.y, path[1], d.y));
+                            break;
+                        case "V":
+                            path = ["C"][concat](l2c(d.x, d.y, d.x, path[1]));
+                            break;
+                        case "Z":
+                            path = ["C"][concat](l2c(d.x, d.y, d.X, d.Y));
+                            break;
+                    }
+                    return path;
+                },
+                fixArc = function (pp, i) {
+                    if (pp[i][length] > 7) {
+                        pp[i].shift();
+                        var pi = pp[i];
+                        while (pi[length]) {
+                            pp.splice(i++, 0, ["C"][concat](pi.splice(0, 6)));
+                        }
+                        pp.splice(i, 1);
+                        ii = mmax(p[length], p2 && p2[length] || 0);
+                    }
+                },
+                fixM = function (path1, path2, a1, a2, i) {
+                    if (path1 && path2 && path1[i][0] == "M" && path2[i][0] != "M") {
+                        path2.splice(i, 0, ["M", a2.x, a2.y]);
+                        a1.bx = 0;
+                        a1.by = 0;
+                        a1.x = path1[i][1];
+                        a1.y = path1[i][2];
+                        ii = mmax(p[length], p2 && p2[length] || 0);
+                    }
+                };
+            for (var i = 0, ii = mmax(p[length], p2 && p2[length] || 0); i < ii; i++) {
+                p[i] = processPath(p[i], attrs);
+                fixArc(p, i);
+                p2 && (p2[i] = processPath(p2[i], attrs2));
+                p2 && fixArc(p2, i);
+                fixM(p, p2, attrs, attrs2, i);
+                fixM(p2, p, attrs2, attrs, i);
+                var seg = p[i],
+                    seg2 = p2 && p2[i],
+                    seglen = seg[length],
+                    seg2len = p2 && seg2[length];
+                attrs.x = seg[seglen - 2];
+                attrs.y = seg[seglen - 1];
+                attrs.bx = toFloat(seg[seglen - 4]) || attrs.x;
+                attrs.by = toFloat(seg[seglen - 3]) || attrs.y;
+                attrs2.bx = p2 && (toFloat(seg2[seg2len - 4]) || attrs2.x);
+                attrs2.by = p2 && (toFloat(seg2[seg2len - 3]) || attrs2.y);
+                attrs2.x = p2 && seg2[seg2len - 2];
+                attrs2.y = p2 && seg2[seg2len - 1];
+            }
+            return p2 ? [p, p2] : p;
+        }, null, pathClone),
+        parseDots = cacher(function (gradient) {
+            var dots = [];
+            for (var i = 0, ii = gradient[length]; i < ii; i++) {
+                var dot = {},
+                    par = gradient[i].match(/^([^:]*):?([\d\.]*)/);
+                dot.color = R.getRGB(par[1]);
+                if (dot.color.error) {
+                    return null;
+                }
+                dot.color = dot.color.hex;
+                par[2] && (dot.offset = par[2] + "%");
+                dots[push](dot);
+            }
+            for (i = 1, ii = dots[length] - 1; i < ii; i++) {
+                if (!dots[i].offset) {
+                    var start = toFloat(dots[i - 1].offset || 0),
+                        end = 0;
+                    for (var j = i + 1; j < ii; j++) {
+                        if (dots[j].offset) {
+                            end = dots[j].offset;
+                            break;
+                        }
+                    }
+                    if (!end) {
+                        end = 100;
+                        j = ii;
+                    }
+                    end = toFloat(end);
+                    var d = (end - start) / (j - i + 1);
+                    for (; i < j; i++) {
+                        start += d;
+                        dots[i].offset = start + "%";
+                    }
+                }
+            }
+            return dots;
+        }),
+        getContainer = function (x, y, w, h) {
+            var container;
+            if (R.is(x, string) || R.is(x, "object")) {
+                container = R.is(x, string) ? doc.getElementById(x) : x;
+                if (container.tagName) {
+                    if (y == null) {
+                        return {
+                            container: container,
+                            width: container.style.pixelWidth || container.offsetWidth,
+                            height: container.style.pixelHeight || container.offsetHeight
+                        };
+                    } else {
+                        return {container: container, width: y, height: w};
+                    }
+                }
+            } else {
+                return {container: 1, x: x, y: y, width: w, height: h};
+            }
+        },
+        plugins = function (con, add) {
+            var that = this;
+            for (var prop in add) {
+                if (add[has](prop) && !(prop in con)) {
+                    switch (typeof add[prop]) {
+                        case "function":
+                            (function (f) {
+                                con[prop] = con === that ? f : function () { return f[apply](that, arguments); };
+                            })(add[prop]);
+                        break;
+                        case "object":
+                            con[prop] = con[prop] || {};
+                            plugins.call(this, con[prop], add[prop]);
+                        break;
+                        default:
+                            con[prop] = add[prop];
+                        break;
+                    }
+                }
+            }
+        },
+        tear = function (el, paper) {
+            el == paper.top && (paper.top = el.prev);
+            el == paper.bottom && (paper.bottom = el.next);
+            el.next && (el.next.prev = el.prev);
+            el.prev && (el.prev.next = el.next);
+        },
+        tofront = function (el, paper) {
+            if (paper.top === el) {
+                return;
+            }
+            tear(el, paper);
+            el.next = null;
+            el.prev = paper.top;
+            paper.top.next = el;
+            paper.top = el;
+        },
+        toback = function (el, paper) {
+            if (paper.bottom === el) {
+                return;
+            }
+            tear(el, paper);
+            el.next = paper.bottom;
+            el.prev = null;
+            paper.bottom.prev = el;
+            paper.bottom = el;
+        },
+        insertafter = function (el, el2, paper) {
+            tear(el, paper);
+            el2 == paper.top && (paper.top = el);
+            el2.next && (el2.next.prev = el);
+            el.next = el2.next;
+            el.prev = el2;
+            el2.next = el;
+        },
+        insertbefore = function (el, el2, paper) {
+            tear(el, paper);
+            el2 == paper.bottom && (paper.bottom = el);
+            el2.prev && (el2.prev.next = el);
+            el.prev = el2.prev;
+            el2.prev = el;
+            el.next = el2;
+        },
+        removed = function (methodname) {
+            return function () {
+                throw new Error("Rapha\xebl: you are calling to method \u201c" + methodname + "\u201d of removed object");
+            };
+        };
+    R.pathToRelative = pathToRelative;
+    // SVG
+    if (R.svg) {
+        paperproto.svgns = "http://www.w3.org/2000/svg";
+        paperproto.xlink = "http://www.w3.org/1999/xlink";
+        round = function (num) {
+            return +num + (~~num === num) * .5;
+        };
+        var $ = function (el, attr) {
+            if (attr) {
+                for (var key in attr) {
+                    if (attr[has](key)) {
+                        el[setAttribute](key, Str(attr[key]));
+                    }
+                }
+            } else {
+                el = doc.createElementNS(paperproto.svgns, el);
+                el.style.webkitTapHighlightColor = "rgba(0,0,0,0)";
+                return el;
+            }
+        };
+        R[toString] = function () {
+            return  "Your browser supports SVG.\nYou are running Rapha\xebl " + this.version;
+        };
+        var thePath = function (pathString, SVG) {
+            var el = $("path");
+            SVG.canvas && SVG.canvas[appendChild](el);
+            var p = new Element(el, SVG);
+            p.type = "path";
+            setFillAndStroke(p, {fill: "none", stroke: "#000", path: pathString});
+            return p;
+        };
+        var addGradientFill = function (o, gradient, SVG) {
+            var type = "linear",
+                fx = .5, fy = .5,
+                s = o.style;
+            gradient = Str(gradient)[rp](radial_gradient, function (all, _fx, _fy) {
+                type = "radial";
+                if (_fx && _fy) {
+                    fx = toFloat(_fx);
+                    fy = toFloat(_fy);
+                    var dir = ((fy > .5) * 2 - 1);
+                    pow(fx - .5, 2) + pow(fy - .5, 2) > .25 &&
+                        (fy = math.sqrt(.25 - pow(fx - .5, 2)) * dir + .5) &&
+                        fy != .5 &&
+                        (fy = fy.toFixed(5) - 1e-5 * dir);
+                }
+                return E;
+            });
+            gradient = gradient[split](/\s*\-\s*/);
+            if (type == "linear") {
+                var angle = gradient.shift();
+                angle = -toFloat(angle);
+                if (isNaN(angle)) {
+                    return null;
+                }
+                var vector = [0, 0, math.cos(angle * PI / 180), math.sin(angle * PI / 180)],
+                    max = 1 / (mmax(abs(vector[2]), abs(vector[3])) || 1);
+                vector[2] *= max;
+                vector[3] *= max;
+                if (vector[2] < 0) {
+                    vector[0] = -vector[2];
+                    vector[2] = 0;
+                }
+                if (vector[3] < 0) {
+                    vector[1] = -vector[3];
+                    vector[3] = 0;
+                }
+            }
+            var dots = parseDots(gradient);
+            if (!dots) {
+                return null;
+            }
+            var id = o.getAttribute(fillString);
+            id = id.match(/^url\(#(.*)\)$/);
+            id && SVG.defs.removeChild(doc.getElementById(id[1]));
+
+            var el = $(type + "Gradient");
+            el.id = createUUID();
+            $(el, type == "radial" ? {fx: fx, fy: fy} : {x1: vector[0], y1: vector[1], x2: vector[2], y2: vector[3]});
+            SVG.defs[appendChild](el);
+            for (var i = 0, ii = dots[length]; i < ii; i++) {
+                var stop = $("stop");
+                $(stop, {
+                    offset: dots[i].offset ? dots[i].offset : !i ? "0%" : "100%",
+                    "stop-color": dots[i].color || "#fff"
+                });
+                el[appendChild](stop);
+            }
+            $(o, {
+                fill: "url(#" + el.id + ")",
+                opacity: 1,
+                "fill-opacity": 1
+            });
+            s.fill = E;
+            s.opacity = 1;
+            s.fillOpacity = 1;
+            return 1;
+        };
+        var updatePosition = function (o) {
+            var bbox = o.getBBox();
+            $(o.pattern, {patternTransform: R.format("translate({0},{1})", bbox.x, bbox.y)});
+        };
+        var setFillAndStroke = function (o, params) {
+            var dasharray = {
+                    "": [0],
+                    "none": [0],
+                    "-": [3, 1],
+                    ".": [1, 1],
+                    "-.": [3, 1, 1, 1],
+                    "-..": [3, 1, 1, 1, 1, 1],
+                    ". ": [1, 3],
+                    "- ": [4, 3],
+                    "--": [8, 3],
+                    "- .": [4, 3, 1, 3],
+                    "--.": [8, 3, 1, 3],
+                    "--..": [8, 3, 1, 3, 1, 3]
+                },
+                node = o.node,
+                attrs = o.attrs,
+                rot = o.rotate(),
+                addDashes = function (o, value) {
+                    value = dasharray[lowerCase.call(value)];
+                    if (value) {
+                        var width = o.attrs["stroke-width"] || "1",
+                            butt = {round: width, square: width, butt: 0}[o.attrs["stroke-linecap"] || params["stroke-linecap"]] || 0,
+                            dashes = [];
+                        var i = value[length];
+                        while (i--) {
+                            dashes[i] = value[i] * width + ((i % 2) ? 1 : -1) * butt;
+                        }
+                        $(node, {"stroke-dasharray": dashes[join](",")});
+                    }
+                };
+            params[has]("rotation") && (rot = params.rotation);
+            var rotxy = Str(rot)[split](separator);
+            if (!(rotxy.length - 1)) {
+                rotxy = null;
+            } else {
+                rotxy[1] = +rotxy[1];
+                rotxy[2] = +rotxy[2];
+            }
+            toFloat(rot) && o.rotate(0, true);
+            for (var att in params) {
+                if (params[has](att)) {
+                    if (!availableAttrs[has](att)) {
+                        continue;
+                    }
+                    var value = params[att];
+                    attrs[att] = value;
+                    switch (att) {
+                        case "blur":
+                            o.blur(value);
+                            break;
+                        case "rotation":
+                            o.rotate(value, true);
+                            break;
+                        case "href":
+                        case "title":
+                        case "target":
+                            var pn = node.parentNode;
+                            if (lowerCase.call(pn.tagName) != "a") {
+                                var hl = $("a");
+                                pn.insertBefore(hl, node);
+                                hl[appendChild](node);
+                                pn = hl;
+                            }
+                            if (att == "target" && value == "blank") {
+                                pn.setAttributeNS(o.paper.xlink, "show", "new");
+                            } else {
+                                pn.setAttributeNS(o.paper.xlink, att, value);
+                            }
+                            break;
+                        case "cursor":
+                            node.style.cursor = value;
+                            break;
+                        case "clip-rect":
+                            var rect = Str(value)[split](separator);
+                            if (rect[length] == 4) {
+                                o.clip && o.clip.parentNode.parentNode.removeChild(o.clip.parentNode);
+                                var el = $("clipPath"),
+                                    rc = $("rect");
+                                el.id = createUUID();
+                                $(rc, {
+                                    x: rect[0],
+                                    y: rect[1],
+                                    width: rect[2],
+                                    height: rect[3]
+                                });
+                                el[appendChild](rc);
+                                o.paper.defs[appendChild](el);
+                                $(node, {"clip-path": "url(#" + el.id + ")"});
+                                o.clip = rc;
+                            }
+                            if (!value) {
+                                var clip = doc.getElementById(node.getAttribute("clip-path")[rp](/(^url\(#|\)$)/g, E));
+                                clip && clip.parentNode.removeChild(clip);
+                                $(node, {"clip-path": E});
+                                delete o.clip;
+                            }
+                        break;
+                        case "path":
+                            if (o.type == "path") {
+                                $(node, {d: value ? attrs.path = pathToAbsolute(value) : "M0,0"});
+                            }
+                            break;
+                        case "width":
+                            node[setAttribute](att, value);
+                            if (attrs.fx) {
+                                att = "x";
+                                value = attrs.x;
+                            } else {
+                                break;
+                            }
+                        case "x":
+                            if (attrs.fx) {
+                                value = -attrs.x - (attrs.width || 0);
+                            }
+                        case "rx":
+                            if (att == "rx" && o.type == "rect") {
+                                break;
+                            }
+                        case "cx":
+                            rotxy && (att == "x" || att == "cx") && (rotxy[1] += value - attrs[att]);
+                            node[setAttribute](att, value);
+                            o.pattern && updatePosition(o);
+                            break;
+                        case "height":
+                            node[setAttribute](att, value);
+                            if (attrs.fy) {
+                                att = "y";
+                                value = attrs.y;
+                            } else {
+                                break;
+                            }
+                        case "y":
+                            if (attrs.fy) {
+                                value = -attrs.y - (attrs.height || 0);
+                            }
+                        case "ry":
+                            if (att == "ry" && o.type == "rect") {
+                                break;
+                            }
+                        case "cy":
+                            rotxy && (att == "y" || att == "cy") && (rotxy[2] += value - attrs[att]);
+                            node[setAttribute](att, value);
+                            o.pattern && updatePosition(o);
+                            break;
+                        case "r":
+                            if (o.type == "rect") {
+                                $(node, {rx: value, ry: value});
+                            } else {
+                                node[setAttribute](att, value);
+                            }
+                            break;
+                        case "src":
+                            if (o.type == "image") {
+                                node.setAttributeNS(o.paper.xlink, "href", value);
+                            }
+                            break;
+                        case "stroke-width":
+                            node.style.strokeWidth = value;
+                            // Need following line for Firefox
+                            node[setAttribute](att, value);
+                            if (attrs["stroke-dasharray"]) {
+                                addDashes(o, attrs["stroke-dasharray"]);
+                            }
+                            break;
+                        case "stroke-dasharray":
+                            addDashes(o, value);
+                            break;
+                        case "translation":
+                            var xy = Str(value)[split](separator);
+                            xy[0] = +xy[0] || 0;
+                            xy[1] = +xy[1] || 0;
+                            if (rotxy) {
+                                rotxy[1] += xy[0];
+                                rotxy[2] += xy[1];
+                            }
+                            translate.call(o, xy[0], xy[1]);
+                            break;
+                        case "scale":
+                            xy = Str(value)[split](separator);
+                            o.scale(+xy[0] || 1, +xy[1] || +xy[0] || 1, isNaN(toFloat(xy[2])) ? null : +xy[2], isNaN(toFloat(xy[3])) ? null : +xy[3]);
+                            break;
+                        case fillString:
+                            var isURL = Str(value).match(ISURL);
+                            if (isURL) {
+                                el = $("pattern");
+                                var ig = $("image");
+                                el.id = createUUID();
+                                $(el, {x: 0, y: 0, patternUnits: "userSpaceOnUse", height: 1, width: 1});
+                                $(ig, {x: 0, y: 0});
+                                ig.setAttributeNS(o.paper.xlink, "href", isURL[1]);
+                                el[appendChild](ig);
+ 
+                                var img = doc.createElement("img");
+                                img.style.cssText = "position:absolute;left:-9999em;top-9999em";
+                                img.onload = function () {
+                                    $(el, {width: this.offsetWidth, height: this.offsetHeight});
+                                    $(ig, {width: this.offsetWidth, height: this.offsetHeight});
+                                    doc.body.removeChild(this);
+                                    o.paper.safari();
+                                };
+                                doc.body[appendChild](img);
+                                img.src = isURL[1];
+                                o.paper.defs[appendChild](el);
+                                node.style.fill = "url(#" + el.id + ")";
+                                $(node, {fill: "url(#" + el.id + ")"});
+                                o.pattern = el;
+                                o.pattern && updatePosition(o);
+                                break;
+                            }
+                            var clr = R.getRGB(value);
+                            if (!clr.error) {
+                                delete params.gradient;
+                                delete attrs.gradient;
+                                !R.is(attrs.opacity, "undefined") &&
+                                    R.is(params.opacity, "undefined") &&
+                                    $(node, {opacity: attrs.opacity});
+                                !R.is(attrs["fill-opacity"], "undefined") &&
+                                    R.is(params["fill-opacity"], "undefined") &&
+                                    $(node, {"fill-opacity": attrs["fill-opacity"]});
+                            } else if ((({circle: 1, ellipse: 1})[has](o.type) || Str(value).charAt() != "r") && addGradientFill(node, value, o.paper)) {
+                                attrs.gradient = value;
+                                attrs.fill = "none";
+                                break;
+                            }
+                            clr[has]("opacity") && $(node, {"fill-opacity": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});
+                        case "stroke":
+                            clr = R.getRGB(value);
+                            node[setAttribute](att, clr.hex);
+                            att == "stroke" && clr[has]("opacity") && $(node, {"stroke-opacity": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});
+                            break;
+                        case "gradient":
+                            (({circle: 1, ellipse: 1})[has](o.type) || Str(value).charAt() != "r") && addGradientFill(node, value, o.paper);
+                            break;
+                        case "opacity":
+                            if (attrs.gradient && !attrs[has]("stroke-opacity")) {
+                                $(node, {"stroke-opacity": value > 1 ? value / 100 : value});
+                            }
+                            // fall
+                        case "fill-opacity":
+                            if (attrs.gradient) {
+                                var gradient = doc.getElementById(node.getAttribute(fillString)[rp](/^url\(#|\)$/g, E));
+                                if (gradient) {
+                                    var stops = gradient.getElementsByTagName("stop");
+                                    stops[stops[length] - 1][setAttribute]("stop-opacity", value);
+                                }
+                                break;
+                            }
+                        default:
+                            att == "font-size" && (value = toInt(value, 10) + "px");
+                            var cssrule = att[rp](/(\-.)/g, function (w) {
+                                return upperCase.call(w.substring(1));
+                            });
+                            node.style[cssrule] = value;
+                            // Need following line for Firefox
+                            node[setAttribute](att, value);
+                            break;
+                    }
+                }
+            }
+            
+            tuneText(o, params);
+            if (rotxy) {
+                o.rotate(rotxy.join(S));
+            } else {
+                toFloat(rot) && o.rotate(rot, true);
+            }
+        };
+        var leading = 1.2,
+        tuneText = function (el, params) {
+            if (el.type != "text" || !(params[has]("text") || params[has]("font") || params[has]("font-size") || params[has]("x") || params[has]("y"))) {
+                return;
+            }
+            var a = el.attrs,
+                node = el.node,
+                fontSize = node.firstChild ? toInt(doc.defaultView.getComputedStyle(node.firstChild, E).getPropertyValue("font-size"), 10) : 10;
+ 
+            if (params[has]("text")) {
+                a.text = params.text;
+                while (node.firstChild) {
+                    node.removeChild(node.firstChild);
+                }
+                var texts = Str(params.text)[split]("\n");
+                for (var i = 0, ii = texts[length]; i < ii; i++) if (texts[i]) {
+                    var tspan = $("tspan");
+                    i && $(tspan, {dy: fontSize * leading, x: a.x});
+                    tspan[appendChild](doc.createTextNode(texts[i]));
+                    node[appendChild](tspan);
+                }
+            } else {
+                texts = node.getElementsByTagName("tspan");
+                for (i = 0, ii = texts[length]; i < ii; i++) {
+                    i && $(texts[i], {dy: fontSize * leading, x: a.x});
+                }
+            }
+            $(node, {y: a.y});
+            var bb = el.getBBox(),
+                dif = a.y - (bb.y + bb.height / 2);
+            dif && R.is(dif, "finite") && $(node, {y: a.y + dif});
+        },
+        Element = function (node, svg) {
+            var X = 0,
+                Y = 0;
+            this[0] = node;
+            this.id = R._oid++;
+            this.node = node;
+            node.raphael = this;
+            this.paper = svg;
+            this.attrs = this.attrs || {};
+            this.transformations = []; // rotate, translate, scale
+            this._ = {
+                tx: 0,
+                ty: 0,
+                rt: {deg: 0, cx: 0, cy: 0},
+                sx: 1,
+                sy: 1
+            };
+            !svg.bottom && (svg.bottom = this);
+            this.prev = svg.top;
+            svg.top && (svg.top.next = this);
+            svg.top = this;
+            this.next = null;
+        };
+        var elproto = Element[proto];
+        Element[proto].rotate = function (deg, cx, cy) {
+            if (this.removed) {
+                return this;
+            }
+            if (deg == null) {
+                if (this._.rt.cx) {
+                    return [this._.rt.deg, this._.rt.cx, this._.rt.cy][join](S);
+                }
+                return this._.rt.deg;
+            }
+            var bbox = this.getBBox();
+            deg = Str(deg)[split](separator);
+            if (deg[length] - 1) {
+                cx = toFloat(deg[1]);
+                cy = toFloat(deg[2]);
+            }
+            deg = toFloat(deg[0]);
+            if (cx != null && cx !== false) {
+                this._.rt.deg = deg;
+            } else {
+                this._.rt.deg += deg;
+            }
+            (cy == null) && (cx = null);
+            this._.rt.cx = cx;
+            this._.rt.cy = cy;
+            cx = cx == null ? bbox.x + bbox.width / 2 : cx;
+            cy = cy == null ? bbox.y + bbox.height / 2 : cy;
+            if (this._.rt.deg) {
+                this.transformations[0] = R.format("rotate({0} {1} {2})", this._.rt.deg, cx, cy);
+                this.clip && $(this.clip, {transform: R.format("rotate({0} {1} {2})", -this._.rt.deg, cx, cy)});
+            } else {
+                this.transformations[0] = E;
+                this.clip && $(this.clip, {transform: E});
+            }
+            $(this.node, {transform: this.transformations[join](S)});
+            return this;
+        };
+        Element[proto].hide = function () {
+            !this.removed && (this.node.style.display = "none");
+            return this;
+        };
+        Element[proto].show = function () {
+            !this.removed && (this.node.style.display = "");
+            return this;
+        };
+        Element[proto].remove = function () {
+            if (this.removed) {
+                return;
+            }
+            tear(this, this.paper);
+            this.node.parentNode.removeChild(this.node);
+            for (var i in this) {
+                delete this[i];
+            }
+            this.removed = true;
+        };
+        Element[proto].getBBox = function () {
+            if (this.removed) {
+                return this;
+            }
+            if (this.type == "path") {
+                return pathDimensions(this.attrs.path);
+            }
+            if (this.node.style.display == "none") {
+                this.show();
+                var hide = true;
+            }
+            var bbox = {};
+            try {
+                bbox = this.node.getBBox();
+            } catch(e) {
+                // Firefox 3.0.x plays badly here
+            } finally {
+                bbox = bbox || {};
+            }
+            if (this.type == "text") {
+                bbox = {x: bbox.x, y: Infinity, width: 0, height: 0};
+                for (var i = 0, ii = this.node.getNumberOfChars(); i < ii; i++) {
+                    var bb = this.node.getExtentOfChar(i);
+                    (bb.y < bbox.y) && (bbox.y = bb.y);
+                    (bb.y + bb.height - bbox.y > bbox.height) && (bbox.height = bb.y + bb.height - bbox.y);
+                    (bb.x + bb.width - bbox.x > bbox.width) && (bbox.width = bb.x + bb.width - bbox.x);
+                }
+            }
+            hide && this.hide();
+            return bbox;
+        };
+        Element[proto].attr = function (name, value) {
+            if (this.removed) {
+                return this;
+            }
+            if (name == null) {
+                var res = {};
+                for (var i in this.attrs) if (this.attrs[has](i)) {
+                    res[i] = this.attrs[i];
+                }
+                this._.rt.deg && (res.rotation = this.rotate());
+                (this._.sx != 1 || this._.sy != 1) && (res.scale = this.scale());
+                res.gradient && res.fill == "none" && (res.fill = res.gradient) && delete res.gradient;
+                return res;
+            }
+            if (value == null && R.is(name, string)) {
+                if (name == "translation") {
+                    return translate.call(this);
+                }
+                if (name == "rotation") {
+                    return this.rotate();
+                }
+                if (name == "scale") {
+                    return this.scale();
+                }
+                if (name == fillString && this.attrs.fill == "none" && this.attrs.gradient) {
+                    return this.attrs.gradient;
+                }
+                return this.attrs[name];
+            }
+            if (value == null && R.is(name, array)) {
+                var values = {};
+                for (var j = 0, jj = name.length; j < jj; j++) {
+                    values[name[j]] = this.attr(name[j]);
+                }
+                return values;
+            }
+            if (value != null) {
+                var params = {};
+                params[name] = value;
+            } else if (name != null && R.is(name, "object")) {
+                params = name;
+            }
+            for (var key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], "function")) {
+                var par = this.paper.customAttributes[key].apply(this, [][concat](params[key]));
+                this.attrs[key] = params[key];
+                for (var subkey in par) if (par[has](subkey)) {
+                    params[subkey] = par[subkey];
+                }
+            }
+            setFillAndStroke(this, params);
+            return this;
+        };
+        Element[proto].toFront = function () {
+            if (this.removed) {
+                return this;
+            }
+            this.node.parentNode[appendChild](this.node);
+            var svg = this.paper;
+            svg.top != this && tofront(this, svg);
+            return this;
+        };
+        Element[proto].toBack = function () {
+            if (this.removed) {
+                return this;
+            }
+            if (this.node.parentNode.firstChild != this.node) {
+                this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild);
+                toback(this, this.paper);
+                var svg = this.paper;
+            }
+            return this;
+        };
+        Element[proto].insertAfter = function (element) {
+            if (this.removed) {
+                return this;
+            }
+            var node = element.node || element[element.length - 1].node;
+            if (node.nextSibling) {
+                node.parentNode.insertBefore(this.node, node.nextSibling);
+            } else {
+                node.parentNode[appendChild](this.node);
+            }
+            insertafter(this, element, this.paper);
+            return this;
+        };
+        Element[proto].insertBefore = function (element) {
+            if (this.removed) {
+                return this;
+            }
+            var node = element.node || element[0].node;
+            node.parentNode.insertBefore(this.node, node);
+            insertbefore(this, element, this.paper);
+            return this;
+        };
+        Element[proto].blur = function (size) {
+            // Experimental. No Safari support. Use it on your own risk.
+            var t = this;
+            if (+size !== 0) {
+                var fltr = $("filter"),
+                    blur = $("feGaussianBlur");
+                t.attrs.blur = size;
+                fltr.id = createUUID();
+                $(blur, {stdDeviation: +size || 1.5});
+                fltr.appendChild(blur);
+                t.paper.defs.appendChild(fltr);
+                t._blur = fltr;
+                $(t.node, {filter: "url(#" + fltr.id + ")"});
+            } else {
+                if (t._blur) {
+                    t._blur.parentNode.removeChild(t._blur);
+                    delete t._blur;
+                    delete t.attrs.blur;
+                }
+                t.node.removeAttribute("filter");
+            }
+        };
+        var theCircle = function (svg, x, y, r) {
+            var el = $("circle");
+            svg.canvas && svg.canvas[appendChild](el);
+            var res = new Element(el, svg);
+            res.attrs = {cx: x, cy: y, r: r, fill: "none", stroke: "#000"};
+            res.type = "circle";
+            $(el, res.attrs);
+            return res;
+        },
+        theRect = function (svg, x, y, w, h, r) {
+            var el = $("rect");
+            svg.canvas && svg.canvas[appendChild](el);
+            var res = new Element(el, svg);
+            res.attrs = {x: x, y: y, width: w, height: h, r: r || 0, rx: r || 0, ry: r || 0, fill: "none", stroke: "#000"};
+            res.type = "rect";
+            $(el, res.attrs);
+            return res;
+        },
+        theEllipse = function (svg, x, y, rx, ry) {
+            var el = $("ellipse");
+            svg.canvas && svg.canvas[appendChild](el);
+            var res = new Element(el, svg);
+            res.attrs = {cx: x, cy: y, rx: rx, ry: ry, fill: "none", stroke: "#000"};
+            res.type = "ellipse";
+            $(el, res.attrs);
+            return res;
+        },
+        theImage = function (svg, src, x, y, w, h) {
+            var el = $("image");
+            $(el, {x: x, y: y, width: w, height: h, preserveAspectRatio: "none"});
+            el.setAttributeNS(svg.xlink, "href", src);
+            svg.canvas && svg.canvas[appendChild](el);
+            var res = new Element(el, svg);
+            res.attrs = {x: x, y: y, width: w, height: h, src: src};
+            res.type = "image";
+            return res;
+        },
+        theText = function (svg, x, y, text) {
+            var el = $("text");
+            $(el, {x: x, y: y, "text-anchor": "middle"});
+            svg.canvas && svg.canvas[appendChild](el);
+            var res = new Element(el, svg);
+            res.attrs = {x: x, y: y, "text-anchor": "middle", text: text, font: availableAttrs.font, stroke: "none", fill: "#000"};
+            res.type = "text";
+            setFillAndStroke(res, res.attrs);
+            return res;
+        },
+        setSize = function (width, height) {
+            this.width = width || this.width;
+            this.height = height || this.height;
+            this.canvas[setAttribute]("width", this.width);
+            this.canvas[setAttribute]("height", this.height);
+            return this;
+        },
+        create = function () {
+            var con = getContainer[apply](0, arguments),
+                container = con && con.container,
+                x = con.x,
+                y = con.y,
+                width = con.width,
+                height = con.height;
+            if (!container) {
+                throw new Error("SVG container not found.");
+            }
+            var cnvs = $("svg");
+            x = x || 0;
+            y = y || 0;
+            width = width || 512;
+            height = height || 342;
+            $(cnvs, {
+                xmlns: "http://www.w3.org/2000/svg",
+                version: 1.1,
+                width: width,
+                height: height
+            });
+            if (container == 1) {
+                cnvs.style.cssText = "position:absolute;left:" + x + "px;top:" + y + "px";
+                doc.body[appendChild](cnvs);
+            } else {
+                if (container.firstChild) {
+                    container.insertBefore(cnvs, container.firstChild);
+                } else {
+                    container[appendChild](cnvs);
+                }
+            }
+            container = new Paper;
+            container.width = width;
+            container.height = height;
+            container.canvas = cnvs;
+            plugins.call(container, container, R.fn);
+            container.clear();
+            return container;
+        };
+        paperproto.clear = function () {
+            var c = this.canvas;
+            while (c.firstChild) {
+                c.removeChild(c.firstChild);
+            }
+            this.bottom = this.top = null;
+            (this.desc = $("desc"))[appendChild](doc.createTextNode("Created with Rapha\xebl"));
+            c[appendChild](this.desc);
+            c[appendChild](this.defs = $("defs"));
+        };
+        paperproto.remove = function () {
+            this.canvas.parentNode && this.canvas.parentNode.removeChild(this.canvas);
+            for (var i in this) {
+                this[i] = removed(i);
+            }
+        };
+    }
+
+    // VML
+    if (R.vml) {
+        var map = {M: "m", L: "l", C: "c", Z: "x", m: "t", l: "r", c: "v", z: "x"},
+            bites = /([clmz]),?([^clmz]*)/gi,
+            blurregexp = / progid:\S+Blur\([^\)]+\)/g,
+            val = /-?[^,\s-]+/g,
+            coordsize = 1e3 + S + 1e3,
+            zoom = 10,
+            pathlike = {path: 1, rect: 1},
+            path2vml = function (path) {
+                var total =  /[ahqstv]/ig,
+                    command = pathToAbsolute;
+                Str(path).match(total) && (command = path2curve);
+                total = /[clmz]/g;
+                if (command == pathToAbsolute && !Str(path).match(total)) {
+                    var res = Str(path)[rp](bites, function (all, command, args) {
+                        var vals = [],
+                            isMove = lowerCase.call(command) == "m",
+                            res = map[command];
+                        args[rp](val, function (value) {
+                            if (isMove && vals[length] == 2) {
+                                res += vals + map[command == "m" ? "l" : "L"];
+                                vals = [];
+                            }
+                            vals[push](round(value * zoom));
+                        });
+                        return res + vals;
+                    });
+                    return res;
+                }
+                var pa = command(path), p, r;
+                res = [];
+                for (var i = 0, ii = pa[length]; i < ii; i++) {
+                    p = pa[i];
+                    r = lowerCase.call(pa[i][0]);
+                    r == "z" && (r = "x");
+                    for (var j = 1, jj = p[length]; j < jj; j++) {
+                        r += round(p[j] * zoom) + (j != jj - 1 ? "," : E);
+                    }
+                    res[push](r);
+                }
+                return res[join](S);
+            };
+        
+        R[toString] = function () {
+            return  "Your browser doesn\u2019t support SVG. Falling down to VML.\nYou are running Rapha\xebl " + this.version;
+        };
+        thePath = function (pathString, vml) {
+            var g = createNode("group");
+            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
+            g.coordsize = vml.coordsize;
+            g.coordorigin = vml.coordorigin;
+            var el = createNode("shape"), ol = el.style;
+            ol.width = vml.width + "px";
+            ol.height = vml.height + "px";
+            el.coordsize = coordsize;
+            el.coordorigin = vml.coordorigin;
+            g[appendChild](el);
+            var p = new Element(el, g, vml),
+                attr = {fill: "none", stroke: "#000"};
+            pathString && (attr.path = pathString);
+            p.type = "path";
+            p.path = [];
+            p.Path = E;
+            setFillAndStroke(p, attr);
+            vml.canvas[appendChild](g);
+            return p;
+        };
+        setFillAndStroke = function (o, params) {
+            o.attrs = o.attrs || {};
+            var node = o.node,
+                a = o.attrs,
+                s = node.style,
+                xy,
+                newpath = (params.x != a.x || params.y != a.y || params.width != a.width || params.height != a.height || params.r != a.r) && o.type == "rect",
+                res = o;
+
+            for (var par in params) if (params[has](par)) {
+                a[par] = params[par];
+            }
+            if (newpath) {
+                a.path = rectPath(a.x, a.y, a.width, a.height, a.r);
+                o.X = a.x;
+                o.Y = a.y;
+                o.W = a.width;
+                o.H = a.height;
+            }
+            params.href && (node.href = params.href);
+            params.title && (node.title = params.title);
+            params.target && (node.target = params.target);
+            params.cursor && (s.cursor = params.cursor);
+            "blur" in params && o.blur(params.blur);
+            if (params.path && o.type == "path" || newpath) {
+                node.path = path2vml(a.path);
+            }
+            if (params.rotation != null) {
+                o.rotate(params.rotation, true);
+            }
+            if (params.translation) {
+                xy = Str(params.translation)[split](separator);
+                translate.call(o, xy[0], xy[1]);
+                if (o._.rt.cx != null) {
+                    o._.rt.cx +=+ xy[0];
+                    o._.rt.cy +=+ xy[1];
+                    o.setBox(o.attrs, xy[0], xy[1]);
+                }
+            }
+            if (params.scale) {
+                xy = Str(params.scale)[split](separator);
+                o.scale(+xy[0] || 1, +xy[1] || +xy[0] || 1, +xy[2] || null, +xy[3] || null);
+            }
+            if ("clip-rect" in params) {
+                var rect = Str(params["clip-rect"])[split](separator);
+                if (rect[length] == 4) {
+                    rect[2] = +rect[2] + (+rect[0]);
+                    rect[3] = +rect[3] + (+rect[1]);
+                    var div = node.clipRect || doc.createElement("div"),
+                        dstyle = div.style,
+                        group = node.parentNode;
+                    dstyle.clip = R.format("rect({1}px {2}px {3}px {0}px)", rect);
+                    if (!node.clipRect) {
+                        dstyle.position = "absolute";
+                        dstyle.top = 0;
+                        dstyle.left = 0;
+                        dstyle.width = o.paper.width + "px";
+                        dstyle.height = o.paper.height + "px";
+                        group.parentNode.insertBefore(div, group);
+                        div[appendChild](group);
+                        node.clipRect = div;
+                    }
+                }
+                if (!params["clip-rect"]) {
+                    node.clipRect && (node.clipRect.style.clip = E);
+                }
+            }
+            if (o.type == "image" && params.src) {
+                node.src = params.src;
+            }
+            if (o.type == "image" && params.opacity) {
+                node.filterOpacity = ms + ".Alpha(opacity=" + (params.opacity * 100) + ")";
+                s.filter = (node.filterMatrix || E) + (node.filterOpacity || E);
+            }
+            params.font && (s.font = params.font);
+            params["font-family"] && (s.fontFamily = '"' + params["font-family"][split](",")[0][rp](/^['"]+|['"]+$/g, E) + '"');
+            params["font-size"] && (s.fontSize = params["font-size"]);
+            params["font-weight"] && (s.fontWeight = params["font-weight"]);
+            params["font-style"] && (s.fontStyle = params["font-style"]);
+            if (params.opacity != null || 
+                params["stroke-width"] != null ||
+                params.fill != null ||
+                params.stroke != null ||
+                params["stroke-width"] != null ||
+                params["stroke-opacity"] != null ||
+                params["fill-opacity"] != null ||
+                params["stroke-dasharray"] != null ||
+                params["stroke-miterlimit"] != null ||
+                params["stroke-linejoin"] != null ||
+                params["stroke-linecap"] != null) {
+                node = o.shape || node;
+                var fill = (node.getElementsByTagName(fillString) && node.getElementsByTagName(fillString)[0]),
+                    newfill = false;
+                !fill && (newfill = fill = createNode(fillString));
+                if ("fill-opacity" in params || "opacity" in params) {
+                    var opacity = ((+a["fill-opacity"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+R.getRGB(params.fill).o + 1 || 2) - 1);
+                    opacity = mmin(mmax(opacity, 0), 1);
+                    fill.opacity = opacity;
+                }
+                params.fill && (fill.on = true);
+                if (fill.on == null || params.fill == "none") {
+                    fill.on = false;
+                }
+                if (fill.on && params.fill) {
+                    var isURL = params.fill.match(ISURL);
+                    if (isURL) {
+                        fill.src = isURL[1];
+                        fill.type = "tile";
+                    } else {
+                        fill.color = R.getRGB(params.fill).hex;
+                        fill.src = E;
+                        fill.type = "solid";
+                        if (R.getRGB(params.fill).error && (res.type in {circle: 1, ellipse: 1} || Str(params.fill).charAt() != "r") && addGradientFill(res, params.fill)) {
+                            a.fill = "none";
+                            a.gradient = params.fill;
+                        }
+                    }
+                }
+                newfill && node[appendChild](fill);
+                var stroke = (node.getElementsByTagName("stroke") && node.getElementsByTagName("stroke")[0]),
+                newstroke = false;
+                !stroke && (newstroke = stroke = createNode("stroke"));
+                if ((params.stroke && params.stroke != "none") ||
+                    params["stroke-width"] ||
+                    params["stroke-opacity"] != null ||
+                    params["stroke-dasharray"] ||
+                    params["stroke-miterlimit"] ||
+                    params["stroke-linejoin"] ||
+                    params["stroke-linecap"]) {
+                    stroke.on = true;
+                }
+                (params.stroke == "none" || stroke.on == null || params.stroke == 0 || params["stroke-width"] == 0) && (stroke.on = false);
+                var strokeColor = R.getRGB(params.stroke);
+                stroke.on && params.stroke && (stroke.color = strokeColor.hex);
+                opacity = ((+a["stroke-opacity"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+strokeColor.o + 1 || 2) - 1);
+                var width = (toFloat(params["stroke-width"]) || 1) * .75;
+                opacity = mmin(mmax(opacity, 0), 1);
+                params["stroke-width"] == null && (width = a["stroke-width"]);
+                params["stroke-width"] && (stroke.weight = width);
+                width && width < 1 && (opacity *= width) && (stroke.weight = 1);
+                stroke.opacity = opacity;
+                
+                params["stroke-linejoin"] && (stroke.joinstyle = params["stroke-linejoin"] || "miter");
+                stroke.miterlimit = params["stroke-miterlimit"] || 8;
+                params["stroke-linecap"] && (stroke.endcap = params["stroke-linecap"] == "butt" ? "flat" : params["stroke-linecap"] == "square" ? "square" : "round");
+                if (params["stroke-dasharray"]) {
+                    var dasharray = {
+                        "-": "shortdash",
+                        ".": "shortdot",
+                        "-.": "shortdashdot",
+                        "-..": "shortdashdotdot",
+                        ". ": "dot",
+                        "- ": "dash",
+                        "--": "longdash",
+                        "- .": "dashdot",
+                        "--.": "longdashdot",
+                        "--..": "longdashdotdot"
+                    };
+                    stroke.dashstyle = dasharray[has](params["stroke-dasharray"]) ? dasharray[params["stroke-dasharray"]] : E;
+                }
+                newstroke && node[appendChild](stroke);
+            }
+            if (res.type == "text") {
+                s = res.paper.span.style;
+                a.font && (s.font = a.font);
+                a["font-family"] && (s.fontFamily = a["font-family"]);
+                a["font-size"] && (s.fontSize = a["font-size"]);
+                a["font-weight"] && (s.fontWeight = a["font-weight"]);
+                a["font-style"] && (s.fontStyle = a["font-style"]);
+                res.node.string && (res.paper.span.innerHTML = Str(res.node.string)[rp](/</g, "&#60;")[rp](/&/g, "&#38;")[rp](/\n/g, "<br>"));
+                res.W = a.w = res.paper.span.offsetWidth;
+                res.H = a.h = res.paper.span.offsetHeight;
+                res.X = a.x;
+                res.Y = a.y + round(res.H / 2);
+ 
+                // text-anchor emulationm
+                switch (a["text-anchor"]) {
+                    case "start":
+                        res.node.style["v-text-align"] = "left";
+                        res.bbx = round(res.W / 2);
+                    break;
+                    case "end":
+                        res.node.style["v-text-align"] = "right";
+                        res.bbx = -round(res.W / 2);
+                    break;
+                    default:
+                        res.node.style["v-text-align"] = "center";
+                    break;
+                }
+            }
+        };
+        addGradientFill = function (o, gradient) {
+            o.attrs = o.attrs || {};
+            var attrs = o.attrs,
+                fill,
+                type = "linear",
+                fxfy = ".5 .5";
+            o.attrs.gradient = gradient;
+            gradient = Str(gradient)[rp](radial_gradient, function (all, fx, fy) {
+                type = "radial";
+                if (fx && fy) {
+                    fx = toFloat(fx);
+                    fy = toFloat(fy);
+                    pow(fx - .5, 2) + pow(fy - .5, 2) > .25 && (fy = math.sqrt(.25 - pow(fx - .5, 2)) * ((fy > .5) * 2 - 1) + .5);
+                    fxfy = fx + S + fy;
+                }
+                return E;
+            });
+            gradient = gradient[split](/\s*\-\s*/);
+            if (type == "linear") {
+                var angle = gradient.shift();
+                angle = -toFloat(angle);
+                if (isNaN(angle)) {
+                    return null;
+                }
+            }
+            var dots = parseDots(gradient);
+            if (!dots) {
+                return null;
+            }
+            o = o.shape || o.node;
+            fill = o.getElementsByTagName(fillString)[0] || createNode(fillString);
+            !fill.parentNode && o.appendChild(fill);
+            if (dots[length]) {
+                fill.on = true;
+                fill.method = "none";
+                fill.color = dots[0].color;
+                fill.color2 = dots[dots[length] - 1].color;
+                var clrs = [];
+                for (var i = 0, ii = dots[length]; i < ii; i++) {
+                    dots[i].offset && clrs[push](dots[i].offset + S + dots[i].color);
+                }
+                fill.colors && (fill.colors.value = clrs[length] ? clrs[join]() : "0% " + fill.color);
+                if (type == "radial") {
+                    fill.type = "gradientradial";
+                    fill.focus = "100%";
+                    fill.focussize = fxfy;
+                    fill.focusposition = fxfy;
+                } else {
+                    fill.type = "gradient";
+                    fill.angle = (270 - angle) % 360;
+                }
+            }
+            return 1;
+        };
+        Element = function (node, group, vml) {
+            var Rotation = 0,
+                RotX = 0,
+                RotY = 0,
+                Scale = 1;
+            this[0] = node;
+            this.id = R._oid++;
+            this.node = node;
+            node.raphael = this;
+            this.X = 0;
+            this.Y = 0;
+            this.attrs = {};
+            this.Group = group;
+            this.paper = vml;
+            this._ = {
+                tx: 0,
+                ty: 0,
+                rt: {deg:0},
+                sx: 1,
+                sy: 1
+            };
+            !vml.bottom && (vml.bottom = this);
+            this.prev = vml.top;
+            vml.top && (vml.top.next = this);
+            vml.top = this;
+            this.next = null;
+        };
+        elproto = Element[proto];
+        elproto.rotate = function (deg, cx, cy) {
+            if (this.removed) {
+                return this;
+            }
+            if (deg == null) {
+                if (this._.rt.cx) {
+                    return [this._.rt.deg, this._.rt.cx, this._.rt.cy][join](S);
+                }
+                return this._.rt.deg;
+            }
+            deg = Str(deg)[split](separator);
+            if (deg[length] - 1) {
+                cx = toFloat(deg[1]);
+                cy = toFloat(deg[2]);
+            }
+            deg = toFloat(deg[0]);
+            if (cx != null) {
+                this._.rt.deg = deg;
+            } else {
+                this._.rt.deg += deg;
+            }
+            cy == null && (cx = null);
+            this._.rt.cx = cx;
+            this._.rt.cy = cy;
+            this.setBox(this.attrs, cx, cy);
+            this.Group.style.rotation = this._.rt.deg;
+            // gradient fix for rotation. TODO
+            // var fill = (this.shape || this.node).getElementsByTagName(fillString);
+            // fill = fill[0] || {};
+            // var b = ((360 - this._.rt.deg) - 270) % 360;
+            // !R.is(fill.angle, "undefined") && (fill.angle = b);
+            return this;
+        };
+        elproto.setBox = function (params, cx, cy) {
+            if (this.removed) {
+                return this;
+            }
+            var gs = this.Group.style,
+                os = (this.shape && this.shape.style) || this.node.style;
+            params = params || {};
+            for (var i in params) if (params[has](i)) {
+                this.attrs[i] = params[i];
+            }
+            cx = cx || this._.rt.cx;
+            cy = cy || this._.rt.cy;
+            var attr = this.attrs,
+                x,
+                y,
+                w,
+                h;
+            switch (this.type) {
+                case "circle":
+                    x = attr.cx - attr.r;
+                    y = attr.cy - attr.r;
+                    w = h = attr.r * 2;
+                    break;
+                case "ellipse":
+                    x = attr.cx - attr.rx;
+                    y = attr.cy - attr.ry;
+                    w = attr.rx * 2;
+                    h = attr.ry * 2;
+                    break;
+                case "image":
+                    x = +attr.x;
+                    y = +attr.y;
+                    w = attr.width || 0;
+                    h = attr.height || 0;
+                    break;
+                case "text":
+                    this.textpath.v = ["m", round(attr.x), ", ", round(attr.y - 2), "l", round(attr.x) + 1, ", ", round(attr.y - 2)][join](E);
+                    x = attr.x - round(this.W / 2);
+                    y = attr.y - this.H / 2;
+                    w = this.W;
+                    h = this.H;
+                    break;
+                case "rect":
+                case "path":
+                    if (!this.attrs.path) {
+                        x = 0;
+                        y = 0;
+                        w = this.paper.width;
+                        h = this.paper.height;
+                    } else {
+                        var dim = pathDimensions(this.attrs.path);
+                        x = dim.x;
+                        y = dim.y;
+                        w = dim.width;
+                        h = dim.height;
+                    }
+                    break;
+                default:
+                    x = 0;
+                    y = 0;
+                    w = this.paper.width;
+                    h = this.paper.height;
+                    break;
+            }
+            cx = (cx == null) ? x + w / 2 : cx;
+            cy = (cy == null) ? y + h / 2 : cy;
+            var left = cx - this.paper.width / 2,
+                top = cy - this.paper.height / 2, t;
+            gs.left != (t = left + "px") && (gs.left = t);
+            gs.top != (t = top + "px") && (gs.top = t);
+            this.X = pathlike[has](this.type) ? -left : x;
+            this.Y = pathlike[has](this.type) ? -top : y;
+            this.W = w;
+            this.H = h;
+            if (pathlike[has](this.type)) {
+                os.left != (t = -left * zoom + "px") && (os.left = t);
+                os.top != (t = -top * zoom + "px") && (os.top = t);
+            } else if (this.type == "text") {
+                os.left != (t = -left + "px") && (os.left = t);
+                os.top != (t = -top + "px") && (os.top = t);
+            } else {
+                gs.width != (t = this.paper.width + "px") && (gs.width = t);
+                gs.height != (t = this.paper.height + "px") && (gs.height = t);
+                os.left != (t = x - left + "px") && (os.left = t);
+                os.top != (t = y - top + "px") && (os.top = t);
+                os.width != (t = w + "px") && (os.width = t);
+                os.height != (t = h + "px") && (os.height = t);
+            }
+        };
+        elproto.hide = function () {
+            !this.removed && (this.Group.style.display = "none");
+            return this;
+        };
+        elproto.show = function () {
+            !this.removed && (this.Group.style.display = "block");
+            return this;
+        };
+        elproto.getBBox = function () {
+            if (this.removed) {
+                return this;
+            }
+            if (pathlike[has](this.type)) {
+                return pathDimensions(this.attrs.path);
+            }
+            return {
+                x: this.X + (this.bbx || 0),
+                y: this.Y,
+                width: this.W,
+                height: this.H
+            };
+        };
+        elproto.remove = function () {
+            if (this.removed) {
+                return;
+            }
+            tear(this, this.paper);
+            this.node.parentNode.removeChild(this.node);
+            this.Group.parentNode.removeChild(this.Group);
+            this.shape && this.shape.parentNode.removeChild(this.shape);
+            for (var i in this) {
+                delete this[i];
+            }
+            this.removed = true;
+        };
+        elproto.attr = function (name, value) {
+            if (this.removed) {
+                return this;
+            }
+            if (name == null) {
+                var res = {};
+                for (var i in this.attrs) if (this.attrs[has](i)) {
+                    res[i] = this.attrs[i];
+                }
+                this._.rt.deg && (res.rotation = this.rotate());
+                (this._.sx != 1 || this._.sy != 1) && (res.scale = this.scale());
+                res.gradient && res.fill == "none" && (res.fill = res.gradient) && delete res.gradient;
+                return res;
+            }
+            if (value == null && R.is(name, "string")) {
+                if (name == "translation") {
+                    return translate.call(this);
+                }
+                if (name == "rotation") {
+                    return this.rotate();
+                }
+                if (name == "scale") {
+                    return this.scale();
+                }
+                if (name == fillString && this.attrs.fill == "none" && this.attrs.gradient) {
+                    return this.attrs.gradient;
+                }
+                return this.attrs[name];
+            }
+            if (this.attrs && value == null && R.is(name, array)) {
+                var ii, values = {};
+                for (i = 0, ii = name[length]; i < ii; i++) {
+                    values[name[i]] = this.attr(name[i]);
+                }
+                return values;
+            }
+            var params;
+            if (value != null) {
+                params = {};
+                params[name] = value;
+            }
+            value == null && R.is(name, "object") && (params = name);
+            if (params) {
+                for (var key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], "function")) {
+                    var par = this.paper.customAttributes[key].apply(this, [][concat](params[key]));
+                    this.attrs[key] = params[key];
+                    for (var subkey in par) if (par[has](subkey)) {
+                        params[subkey] = par[subkey];
+                    }
+                }
+                if (params.text && this.type == "text") {
+                    this.node.string = params.text;
+                }
+                setFillAndStroke(this, params);
+                if (params.gradient && (({circle: 1, ellipse: 1})[has](this.type) || Str(params.gradient).charAt() != "r")) {
+                    addGradientFill(this, params.gradient);
+                }
+                (!pathlike[has](this.type) || this._.rt.deg) && this.setBox(this.attrs);
+            }
+            return this;
+        };
+        elproto.toFront = function () {
+            !this.removed && this.Group.parentNode[appendChild](this.Group);
+            this.paper.top != this && tofront(this, this.paper);
+            return this;
+        };
+        elproto.toBack = function () {
+            if (this.removed) {
+                return this;
+            }
+            if (this.Group.parentNode.firstChild != this.Group) {
+                this.Group.parentNode.insertBefore(this.Group, this.Group.parentNode.firstChild);
+                toback(this, this.paper);
+            }
+            return this;
+        };
+        elproto.insertAfter = function (element) {
+            if (this.removed) {
+                return this;
+            }
+            if (element.constructor == Set) {
+                element = element[element.length - 1];
+            }
+            if (element.Group.nextSibling) {
+                element.Group.parentNode.insertBefore(this.Group, element.Group.nextSibling);
+            } else {
+                element.Group.parentNode[appendChild](this.Group);
+            }
+            insertafter(this, element, this.paper);
+            return this;
+        };
+        elproto.insertBefore = function (element) {
+            if (this.removed) {
+                return this;
+            }
+            if (element.constructor == Set) {
+                element = element[0];
+            }
+            element.Group.parentNode.insertBefore(this.Group, element.Group);
+            insertbefore(this, element, this.paper);
+            return this;
+        };
+        elproto.blur = function (size) {
+            var s = this.node.runtimeStyle,
+                f = s.filter;
+            f = f.replace(blurregexp, E);
+            if (+size !== 0) {
+                this.attrs.blur = size;
+                s.filter = f + S + ms + ".Blur(pixelradius=" + (+size || 1.5) + ")";
+                s.margin = R.format("-{0}px 0 0 -{0}px", round(+size || 1.5));
+            } else {
+                s.filter = f;
+                s.margin = 0;
+                delete this.attrs.blur;
+            }
+        };
+ 
+        theCircle = function (vml, x, y, r) {
+            var g = createNode("group"),
+                o = createNode("oval"),
+                ol = o.style;
+            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
+            g.coordsize = coordsize;
+            g.coordorigin = vml.coordorigin;
+            g[appendChild](o);
+            var res = new Element(o, g, vml);
+            res.type = "circle";
+            setFillAndStroke(res, {stroke: "#000", fill: "none"});
+            res.attrs.cx = x;
+            res.attrs.cy = y;
+            res.attrs.r = r;
+            res.setBox({x: x - r, y: y - r, width: r * 2, height: r * 2});
+            vml.canvas[appendChild](g);
+            return res;
+        };
+        function rectPath(x, y, w, h, r) {
+            if (r) {
+                return R.format("M{0},{1}l{2},0a{3},{3},0,0,1,{3},{3}l0,{5}a{3},{3},0,0,1,{4},{3}l{6},0a{3},{3},0,0,1,{4},{4}l0,{7}a{3},{3},0,0,1,{3},{4}z", x + r, y, w - r * 2, r, -r, h - r * 2, r * 2 - w, r * 2 - h);
+            } else {
+                return R.format("M{0},{1}l{2},0,0,{3},{4},0z", x, y, w, h, -w);
+            }
+        }
+        theRect = function (vml, x, y, w, h, r) {
+            var path = rectPath(x, y, w, h, r),
+                res = vml.path(path),
+                a = res.attrs;
+            res.X = a.x = x;
+            res.Y = a.y = y;
+            res.W = a.width = w;
+            res.H = a.height = h;
+            a.r = r;
+            a.path = path;
+            res.type = "rect";
+            return res;
+        };
+        theEllipse = function (vml, x, y, rx, ry) {
+            var g = createNode("group"),
+                o = createNode("oval"),
+                ol = o.style;
+            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
+            g.coordsize = coordsize;
+            g.coordorigin = vml.coordorigin;
+            g[appendChild](o);
+            var res = new Element(o, g, vml);
+            res.type = "ellipse";
+            setFillAndStroke(res, {stroke: "#000"});
+            res.attrs.cx = x;
+            res.attrs.cy = y;
+            res.attrs.rx = rx;
+            res.attrs.ry = ry;
+            res.setBox({x: x - rx, y: y - ry, width: rx * 2, height: ry * 2});
+            vml.canvas[appendChild](g);
+            return res;
+        };
+        theImage = function (vml, src, x, y, w, h) {
+            var g = createNode("group"),
+                o = createNode("image");
+            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
+            g.coordsize = coordsize;
+            g.coordorigin = vml.coordorigin;
+            o.src = src;
+            g[appendChild](o);
+            var res = new Element(o, g, vml);
+            res.type = "image";
+            res.attrs.src = src;
+            res.attrs.x = x;
+            res.attrs.y = y;
+            res.attrs.w = w;
+            res.attrs.h = h;
+            res.setBox({x: x, y: y, width: w, height: h});
+            vml.canvas[appendChild](g);
+            return res;
+        };
+        theText = function (vml, x, y, text) {
+            var g = createNode("group"),
+                el = createNode("shape"),
+                ol = el.style,
+                path = createNode("path"),
+                ps = path.style,
+                o = createNode("textpath");
+            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
+            g.coordsize = coordsize;
+            g.coordorigin = vml.coordorigin;
+            path.v = R.format("m{0},{1}l{2},{1}", round(x * 10), round(y * 10), round(x * 10) + 1);
+            path.textpathok = true;
+            ol.width = vml.width;
+            ol.height = vml.height;
+            o.string = Str(text);
+            o.on = true;
+            el[appendChild](o);
+            el[appendChild](path);
+            g[appendChild](el);
+            var res = new Element(o, g, vml);
+            res.shape = el;
+            res.textpath = path;
+            res.type = "text";
+            res.attrs.text = text;
+            res.attrs.x = x;
+            res.attrs.y = y;
+            res.attrs.w = 1;
+            res.attrs.h = 1;
+            setFillAndStroke(res, {font: availableAttrs.font, stroke: "none", fill: "#000"});
+            res.setBox();
+            vml.canvas[appendChild](g);
+            return res;
+        };
+        setSize = function (width, height) {
+            var cs = this.canvas.style;
+            width == +width && (width += "px");
+            height == +height && (height += "px");
+            cs.width = width;
+            cs.height = height;
+            cs.clip = "rect(0 " + width + " " + height + " 0)";
+            return this;
+        };
+        var createNode;
+        doc.createStyleSheet().addRule(".rvml", "behavior:url(#default#VML)");
+        try {
+            !doc.namespaces.rvml && doc.namespaces.add("rvml", "urn:schemas-microsoft-com:vml");
+            createNode = function (tagName) {
+                return doc.createElement('<rvml:' + tagName + ' class="rvml">');
+            };
+        } catch (e) {
+            createNode = function (tagName) {
+                return doc.createElement('<' + tagName + ' xmlns="urn:schemas-microsoft.com:vml" class="rvml">');
+            };
+        }
+        create = function () {
+            var con = getContainer[apply](0, arguments),
+                container = con.container,
+                height = con.height,
+                s,
+                width = con.width,
+                x = con.x,
+                y = con.y;
+            if (!container) {
+                throw new Error("VML container not found.");
+            }
+            var res = new Paper,
+                c = res.canvas = doc.createElement("div"),
+                cs = c.style;
+            x = x || 0;
+            y = y || 0;
+            width = width || 512;
+            height = height || 342;
+            width == +width && (width += "px");
+            height == +height && (height += "px");
+            res.width = 1e3;
+            res.height = 1e3;
+            res.coordsize = zoom * 1e3 + S + zoom * 1e3;
+            res.coordorigin = "0 0";
+            res.span = doc.createElement("span");
+            res.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";
+            c[appendChild](res.span);
+            cs.cssText = R.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden", width, height);
+            if (container == 1) {
+                doc.body[appendChild](c);
+                cs.left = x + "px";
+                cs.top = y + "px";
+                cs.position = "absolute";
+            } else {
+                if (container.firstChild) {
+                    container.insertBefore(c, container.firstChild);
+                } else {
+                    container[appendChild](c);
+                }
+            }
+            plugins.call(res, res, R.fn);
+            return res;
+        };
+        paperproto.clear = function () {
+            this.canvas.innerHTML = E;
+            this.span = doc.createElement("span");
+            this.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";
+            this.canvas[appendChild](this.span);
+            this.bottom = this.top = null;
+        };
+        paperproto.remove = function () {
+            this.canvas.parentNode.removeChild(this.canvas);
+            for (var i in this) {
+                this[i] = removed(i);
+            }
+            return true;
+        };
+    }
+ 
+    // rest
+    // WebKit rendering bug workaround method
+    var version = navigator.userAgent.match(/Version\/(.*?)\s/);
+    if ((navigator.vendor == "Apple Computer, Inc.") && (version && version[1] < 4 || navigator.platform.slice(0, 2) == "iP")) {
+        paperproto.safari = function () {
+            var rect = this.rect(-99, -99, this.width + 99, this.height + 99).attr({stroke: "none"});
+            win.setTimeout(function () {rect.remove();});
+        };
+    } else {
+        paperproto.safari = function () {};
+    }
+ 
+    // Events
+    var preventDefault = function () {
+        this.returnValue = false;
+    },
+    preventTouch = function () {
+        return this.originalEvent.preventDefault();
+    },
+    stopPropagation = function () {
+        this.cancelBubble = true;
+    },
+    stopTouch = function () {
+        return this.originalEvent.stopPropagation();
+    },
+    addEvent = (function () {
+        if (doc.addEventListener) {
+            return function (obj, type, fn, element) {
+                var realName = supportsTouch && touchMap[type] ? touchMap[type] : type;
+                var f = function (e) {
+                    if (supportsTouch && touchMap[has](type)) {
+                        for (var i = 0, ii = e.targetTouches && e.targetTouches.length; i < ii; i++) {
+                            if (e.targetTouches[i].target == obj) {
+                                var olde = e;
+                                e = e.targetTouches[i];
+                                e.originalEvent = olde;
+                                e.preventDefault = preventTouch;
+                                e.stopPropagation = stopTouch;
+                                break;
+                            }
+                        }
+                    }
+                    return fn.call(element, e);
+                };
+                obj.addEventListener(realName, f, false);
+                return function () {
+                    obj.removeEventListener(realName, f, false);
+                    return true;
+                };
+            };
+        } else if (doc.attachEvent) {
+            return function (obj, type, fn, element) {
+                var f = function (e) {
+                    e = e || win.event;
+                    e.preventDefault = e.preventDefault || preventDefault;
+                    e.stopPropagation = e.stopPropagation || stopPropagation;
+                    return fn.call(element, e);
+                };
+                obj.attachEvent("on" + type, f);
+                var detacher = function () {
+                    obj.detachEvent("on" + type, f);
+                    return true;
+                };
+                return detacher;
+            };
+        }
+    })(),
+    drag = [],
+    dragMove = function (e) {
+        var x = e.clientX,
+            y = e.clientY,
+            scrollY = doc.documentElement.scrollTop || doc.body.scrollTop,
+            scrollX = doc.documentElement.scrollLeft || doc.body.scrollLeft,
+            dragi,
+            j = drag.length;
+        while (j--) {
+            dragi = drag[j];
+            if (supportsTouch) {
+                var i = e.touches.length,
+                    touch;
+                while (i--) {
+                    touch = e.touches[i];
+                    if (touch.identifier == dragi.el._drag.id) {
+                        x = touch.clientX;
+                        y = touch.clientY;
+                        (e.originalEvent ? e.originalEvent : e).preventDefault();
+                        break;
+                    }
+                }
+            } else {
+                e.preventDefault();
+            }
+            x += scrollX;
+            y += scrollY;
+            dragi.move && dragi.move.call(dragi.move_scope || dragi.el, x - dragi.el._drag.x, y - dragi.el._drag.y, x, y, e);
+        }
+    },
+    dragUp = function (e) {
+        R.unmousemove(dragMove).unmouseup(dragUp);
+        var i = drag.length,
+            dragi;
+        while (i--) {
+            dragi = drag[i];
+            dragi.el._drag = {};
+            dragi.end && dragi.end.call(dragi.end_scope || dragi.start_scope || dragi.move_scope || dragi.el, e);
+        }
+        drag = [];
+    };
+    for (var i = events[length]; i--;) {
+        (function (eventName) {
+            R[eventName] = Element[proto][eventName] = function (fn, scope) {
+                if (R.is(fn, "function")) {
+                    this.events = this.events || [];
+                    this.events.push({name: eventName, f: fn, unbind: addEvent(this.shape || this.node || doc, eventName, fn, scope || this)});
+                }
+                return this;
+            };
+            R["un" + eventName] = Element[proto]["un" + eventName] = function (fn) {
+                var events = this.events,
+                    l = events[length];
+                while (l--) if (events[l].name == eventName && events[l].f == fn) {
+                    events[l].unbind();
+                    events.splice(l, 1);
+                    !events.length && delete this.events;
+                    return this;
+                }
+                return this;
+            };
+        })(events[i]);
+    }
+    elproto.hover = function (f_in, f_out, scope_in, scope_out) {
+        return this.mouseover(f_in, scope_in).mouseout(f_out, scope_out || scope_in);
+    };
+    elproto.unhover = function (f_in, f_out) {
+        return this.unmouseover(f_in).unmouseout(f_out);
+    };
+    elproto.drag = function (onmove, onstart, onend, move_scope, start_scope, end_scope) {
+        this._drag = {};
+        this.mousedown(function (e) {
+            (e.originalEvent || e).preventDefault();
+            var scrollY = doc.documentElement.scrollTop || doc.body.scrollTop,
+                scrollX = doc.documentElement.scrollLeft || doc.body.scrollLeft;
+            this._drag.x = e.clientX + scrollX;
+            this._drag.y = e.clientY + scrollY;
+            this._drag.id = e.identifier;
+            onstart && onstart.call(start_scope || move_scope || this, e.clientX + scrollX, e.clientY + scrollY, e);
+            !drag.length && R.mousemove(dragMove).mouseup(dragUp);
+            drag.push({el: this, move: onmove, end: onend, move_scope: move_scope, start_scope: start_scope, end_scope: end_scope});
+        });
+        return this;
+    };
+    elproto.undrag = function (onmove, onstart, onend) {
+        var i = drag.length;
+        while (i--) {
+            drag[i].el == this && (drag[i].move == onmove && drag[i].end == onend) && drag.splice(i++, 1);
+        }
+        !drag.length && R.unmousemove(dragMove).unmouseup(dragUp);
+    };
+    paperproto.circle = function (x, y, r) {
+        return theCircle(this, x || 0, y || 0, r || 0);
+    };
+    paperproto.rect = function (x, y, w, h, r) {
+        return theRect(this, x || 0, y || 0, w || 0, h || 0, r || 0);
+    };
+    paperproto.ellipse = function (x, y, rx, ry) {
+        return theEllipse(this, x || 0, y || 0, rx || 0, ry || 0);
+    };
+    paperproto.path = function (pathString) {
+        pathString && !R.is(pathString, string) && !R.is(pathString[0], array) && (pathString += E);
+        return thePath(R.format[apply](R, arguments), this);
+    };
+    paperproto.image = function (src, x, y, w, h) {
+        return theImage(this, src || "about:blank", x || 0, y || 0, w || 0, h || 0);
+    };
+    paperproto.text = function (x, y, text) {
+        return theText(this, x || 0, y || 0, Str(text));
+    };
+    paperproto.set = function (itemsArray) {
+        arguments[length] > 1 && (itemsArray = Array[proto].splice.call(arguments, 0, arguments[length]));
+        return new Set(itemsArray);
+    };
+    paperproto.setSize = setSize;
+    paperproto.top = paperproto.bottom = null;
+    paperproto.raphael = R;
+    function x_y() {
+        return this.x + S + this.y;
+    }
+    elproto.resetScale = function () {
+        if (this.removed) {
+            return this;
+        }
+        this._.sx = 1;
+        this._.sy = 1;
+        this.attrs.scale = "1 1";
+    };
+    elproto.scale = function (x, y, cx, cy) {
+        if (this.removed) {
+            return this;
+        }
+        if (x == null && y == null) {
+            return {
+                x: this._.sx,
+                y: this._.sy,
+                toString: x_y
+            };
+        }
+        y = y || x;
+        !+y && (y = x);
+        var dx,
+            dy,
+            dcx,
+            dcy,
+            a = this.attrs;
+        if (x != 0) {
+            var bb = this.getBBox(),
+                rcx = bb.x + bb.width / 2,
+                rcy = bb.y + bb.height / 2,
+                kx = abs(x / this._.sx),
+                ky = abs(y / this._.sy);
+            cx = (+cx || cx == 0) ? cx : rcx;
+            cy = (+cy || cy == 0) ? cy : rcy;
+            var posx = this._.sx > 0,
+                posy = this._.sy > 0,
+                dirx = ~~(x / abs(x)),
+                diry = ~~(y / abs(y)),
+                dkx = kx * dirx,
+                dky = ky * diry,
+                s = this.node.style,
+                ncx = cx + abs(rcx - cx) * dkx * (rcx > cx == posx ? 1 : -1),
+                ncy = cy + abs(rcy - cy) * dky * (rcy > cy == posy ? 1 : -1),
+                fr = (x * dirx > y * diry ? ky : kx);
+            switch (this.type) {
+                case "rect":
+                case "image":
+                    var neww = a.width * kx,
+                        newh = a.height * ky;
+                    this.attr({
+                        height: newh,
+                        r: a.r * fr,
+                        width: neww,
+                        x: ncx - neww / 2,
+                        y: ncy - newh / 2
+                    });
+                    break;
+                case "circle":
+                case "ellipse":
+                    this.attr({
+                        rx: a.rx * kx,
+                        ry: a.ry * ky,
+                        r: a.r * fr,
+                        cx: ncx,
+                        cy: ncy
+                    });
+                    break;
+                case "text":
+                    this.attr({
+                        x: ncx,
+                        y: ncy
+                    });
+                    break;
+                case "path":
+                    var path = pathToRelative(a.path),
+                        skip = true,
+                        fx = posx ? dkx : kx,
+                        fy = posy ? dky : ky;
+                    for (var i = 0, ii = path[length]; i < ii; i++) {
+                        var p = path[i],
+                            P0 = upperCase.call(p[0]);
+                        if (P0 == "M" && skip) {
+                            continue;
+                        } else {
+                            skip = false;
+                        }
+                        if (P0 == "A") {
+                            p[path[i][length] - 2] *= fx;
+                            p[path[i][length] - 1] *= fy;
+                            p[1] *= kx;
+                            p[2] *= ky;
+                            p[5] = +(dirx + diry ? !!+p[5] : !+p[5]);
+                        } else if (P0 == "H") {
+                            for (var j = 1, jj = p[length]; j < jj; j++) {
+                                p[j] *= fx;
+                            }
+                        } else if (P0 == "V") {
+                            for (j = 1, jj = p[length]; j < jj; j++) {
+                                p[j] *= fy;
+                            }
+                         } else {
+                            for (j = 1, jj = p[length]; j < jj; j++) {
+                                p[j] *= (j % 2) ? fx : fy;
+                            }
+                        }
+                    }
+                    var dim2 = pathDimensions(path);
+                    dx = ncx - dim2.x - dim2.width / 2;
+                    dy = ncy - dim2.y - dim2.height / 2;
+                    path[0][1] += dx;
+                    path[0][2] += dy;
+                    this.attr({path: path});
+                break;
+            }
+            if (this.type in {text: 1, image:1} && (dirx != 1 || diry != 1)) {
+                if (this.transformations) {
+                    this.transformations[2] = "scale("[concat](dirx, ",", diry, ")");
+                    this.node[setAttribute]("transform", this.transformations[join](S));
+                    dx = (dirx == -1) ? -a.x - (neww || 0) : a.x;
+                    dy = (diry == -1) ? -a.y - (newh || 0) : a.y;
+                    this.attr({x: dx, y: dy});
+                    a.fx = dirx - 1;
+                    a.fy = diry - 1;
+                } else {
+                    this.node.filterMatrix = ms + ".Matrix(M11="[concat](dirx,
+                        ", M12=0, M21=0, M22=", diry,
+                        ", Dx=0, Dy=0, sizingmethod='auto expand', filtertype='bilinear')");
+                    s.filter = (this.node.filterMatrix || E) + (this.node.filterOpacity || E);
+                }
+            } else {
+                if (this.transformations) {
+                    this.transformations[2] = E;
+                    this.node[setAttribute]("transform", this.transformations[join](S));
+                    a.fx = 0;
+                    a.fy = 0;
+                } else {
+                    this.node.filterMatrix = E;
+                    s.filter = (this.node.filterMatrix || E) + (this.node.filterOpacity || E);
+                }
+            }
+            a.scale = [x, y, cx, cy][join](S);
+            this._.sx = x;
+            this._.sy = y;
+        }
+        return this;
+    };
+    elproto.clone = function () {
+        if (this.removed) {
+            return null;
+        }
+        var attr = this.attr();
+        delete attr.scale;
+        delete attr.translation;
+        return this.paper[this.type]().attr(attr);
+    };
+    var curveslengths = {},
+    getPointAtSegmentLength = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length) {
+        var len = 0,
+            precision = 100,
+            name = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y].join(),
+            cache = curveslengths[name],
+            old, dot;
+        !cache && (curveslengths[name] = cache = {data: []});
+        cache.timer && clearTimeout(cache.timer);
+        cache.timer = setTimeout(function () {delete curveslengths[name];}, 2000);
+        if (length != null) {
+            var total = getPointAtSegmentLength(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y);
+            precision = ~~total * 10;
+        }
+        for (var i = 0; i < precision + 1; i++) {
+            if (cache.data[length] > i) {
+                dot = cache.data[i * precision];
+            } else {
+                dot = R.findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, i / precision);
+                cache.data[i] = dot;
+            }
+            i && (len += pow(pow(old.x - dot.x, 2) + pow(old.y - dot.y, 2), .5));
+            if (length != null && len >= length) {
+                return dot;
+            }
+            old = dot;
+        }
+        if (length == null) {
+            return len;
+        }
+    },
+    getLengthFactory = function (istotal, subpath) {
+        return function (path, length, onlystart) {
+            path = path2curve(path);
+            var x, y, p, l, sp = "", subpaths = {}, point,
+                len = 0;
+            for (var i = 0, ii = path.length; i < ii; i++) {
+                p = path[i];
+                if (p[0] == "M") {
+                    x = +p[1];
+                    y = +p[2];
+                } else {
+                    l = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);
+                    if (len + l > length) {
+                        if (subpath && !subpaths.start) {
+                            point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);
+                            sp += ["C", point.start.x, point.start.y, point.m.x, point.m.y, point.x, point.y];
+                            if (onlystart) {return sp;}
+                            subpaths.start = sp;
+                            sp = ["M", point.x, point.y + "C", point.n.x, point.n.y, point.end.x, point.end.y, p[5], p[6]][join]();
+                            len += l;
+                            x = +p[5];
+                            y = +p[6];
+                            continue;
+                        }
+                        if (!istotal && !subpath) {
+                            point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);
+                            return {x: point.x, y: point.y, alpha: point.alpha};
+                        }
+                    }
+                    len += l;
+                    x = +p[5];
+                    y = +p[6];
+                }
+                sp += p;
+            }
+            subpaths.end = sp;
+            point = istotal ? len : subpath ? subpaths : R.findDotsAtSegment(x, y, p[1], p[2], p[3], p[4], p[5], p[6], 1);
+            point.alpha && (point = {x: point.x, y: point.y, alpha: point.alpha});
+            return point;
+        };
+    };
+    var getTotalLength = getLengthFactory(1),
+        getPointAtLength = getLengthFactory(),
+        getSubpathsAtLength = getLengthFactory(0, 1);
+    elproto.getTotalLength = function () {
+        if (this.type != "path") {return;}
+        if (this.node.getTotalLength) {
+            return this.node.getTotalLength();
+        }
+        return getTotalLength(this.attrs.path);
+    };
+    elproto.getPointAtLength = function (length) {
+        if (this.type != "path") {return;}
+        return getPointAtLength(this.attrs.path, length);
+    };
+    elproto.getSubpath = function (from, to) {
+        if (this.type != "path") {return;}
+        if (abs(this.getTotalLength() - to) < "1e-6") {
+            return getSubpathsAtLength(this.attrs.path, from).end;
+        }
+        var a = getSubpathsAtLength(this.attrs.path, to, 1);
+        return from ? getSubpathsAtLength(a, from).end : a;
+    };
+
+    // animation easing formulas
+    R.easing_formulas = {
+        linear: function (n) {
+            return n;
+        },
+        "<": function (n) {
+            return pow(n, 3);
+        },
+        ">": function (n) {
+            return pow(n - 1, 3) + 1;
+        },
+        "<>": function (n) {
+            n = n * 2;
+            if (n < 1) {
+                return pow(n, 3) / 2;
+            }
+            n -= 2;
+            return (pow(n, 3) + 2) / 2;
+        },
+        backIn: function (n) {
+            var s = 1.70158;
+            return n * n * ((s + 1) * n - s);
+        },
+        backOut: function (n) {
+            n = n - 1;
+            var s = 1.70158;
+            return n * n * ((s + 1) * n + s) + 1;
+        },
+        elastic: function (n) {
+            if (n == 0 || n == 1) {
+                return n;
+            }
+            var p = .3,
+                s = p / 4;
+            return pow(2, -10 * n) * math.sin((n - s) * (2 * PI) / p) + 1;
+        },
+        bounce: function (n) {
+            var s = 7.5625,
+                p = 2.75,
+                l;
+            if (n < (1 / p)) {
+                l = s * n * n;
+            } else {
+                if (n < (2 / p)) {
+                    n -= (1.5 / p);
+                    l = s * n * n + .75;
+                } else {
+                    if (n < (2.5 / p)) {
+                        n -= (2.25 / p);
+                        l = s * n * n + .9375;
+                    } else {
+                        n -= (2.625 / p);
+                        l = s * n * n + .984375;
+                    }
+                }
+            }
+            return l;
+        }
+    };
+
+    var animationElements = [],
+        animation = function () {
+            var Now = +new Date;
+            for (var l = 0; l < animationElements[length]; l++) {
+                var e = animationElements[l];
+                if (e.stop || e.el.removed) {
+                    continue;
+                }
+                var time = Now - e.start,
+                    ms = e.ms,
+                    easing = e.easing,
+                    from = e.from,
+                    diff = e.diff,
+                    to = e.to,
+                    t = e.t,
+                    that = e.el,
+                    set = {},
+                    now;
+                if (time < ms) {
+                    var pos = easing(time / ms);
+                    for (var attr in from) if (from[has](attr)) {
+                        switch (availableAnimAttrs[attr]) {
+                            case "along":
+                                now = pos * ms * diff[attr];
+                                to.back && (now = to.len - now);
+                                var point = getPointAtLength(to[attr], now);
+                                that.translate(diff.sx - diff.x || 0, diff.sy - diff.y || 0);
+                                diff.x = point.x;
+                                diff.y = point.y;
+                                that.translate(point.x - diff.sx, point.y - diff.sy);
+                                to.rot && that.rotate(diff.r + point.alpha, point.x, point.y);
+                                break;
+                            case nu:
+                                now = +from[attr] + pos * ms * diff[attr];
+                                break;
+                            case "colour":
+                                now = "rgb(" + [
+                                    upto255(round(from[attr].r + pos * ms * diff[attr].r)),
+                                    upto255(round(from[attr].g + pos * ms * diff[attr].g)),
+                                    upto255(round(from[attr].b + pos * ms * diff[attr].b))
+                                ][join](",") + ")";
+                                break;
+                            case "path":
+                                now = [];
+                                for (var i = 0, ii = from[attr][length]; i < ii; i++) {
+                                    now[i] = [from[attr][i][0]];
+                                    for (var j = 1, jj = from[attr][i][length]; j < jj; j++) {
+                                        now[i][j] = +from[attr][i][j] + pos * ms * diff[attr][i][j];
+                                    }
+                                    now[i] = now[i][join](S);
+                                }
+                                now = now[join](S);
+                                break;
+                            case "csv":
+                                switch (attr) {
+                                    case "translation":
+                                        var x = pos * ms * diff[attr][0] - t.x,
+                                            y = pos * ms * diff[attr][1] - t.y;
+                                        t.x += x;
+                                        t.y += y;
+                                        now = x + S + y;
+                                    break;
+                                    case "rotation":
+                                        now = +from[attr][0] + pos * ms * diff[attr][0];
+                                        from[attr][1] && (now += "," + from[attr][1] + "," + from[attr][2]);
+                                    break;
+                                    case "scale":
+                                        now = [+from[attr][0] + pos * ms * diff[attr][0], +from[attr][1] + pos * ms * diff[attr][1], (2 in to[attr] ? to[attr][2] : E), (3 in to[attr] ? to[attr][3] : E)][join](S);
+                                    break;
+                                    case "clip-rect":
+                                        now = [];
+                                        i = 4;
+                                        while (i--) {
+                                            now[i] = +from[attr][i] + pos * ms * diff[attr][i];
+                                        }
+                                    break;
+                                }
+                                break;
+                            default:
+                              var from2 = [].concat(from[attr]);
+                                now = [];
+                                i = that.paper.customAttributes[attr].length;
+                                while (i--) {
+                                    now[i] = +from2[i] + pos * ms * diff[attr][i];
+                                }
+                                break;
+                        }
+                        set[attr] = now;
+                    }
+                    that.attr(set);
+                    that._run && that._run.call(that);
+                } else {
+                    if (to.along) {
+                        point = getPointAtLength(to.along, to.len * !to.back);
+                        that.translate(diff.sx - (diff.x || 0) + point.x - diff.sx, diff.sy - (diff.y || 0) + point.y - diff.sy);
+                        to.rot && that.rotate(diff.r + point.alpha, point.x, point.y);
+                    }
+                    (t.x || t.y) && that.translate(-t.x, -t.y);
+                    to.scale && (to.scale += E);
+                    that.attr(to);
+                    animationElements.splice(l--, 1);
+                }
+            }
+            R.svg && that && that.paper && that.paper.safari();
+            animationElements[length] && setTimeout(animation);
+        },
+        keyframesRun = function (attr, element, time, prev, prevcallback) {
+            var dif = time - prev;
+            element.timeouts.push(setTimeout(function () {
+                R.is(prevcallback, "function") && prevcallback.call(element);
+                element.animate(attr, dif, attr.easing);
+            }, prev));
+        },
+        upto255 = function (color) {
+            return mmax(mmin(color, 255), 0);
+        },
+        translate = function (x, y) {
+            if (x == null) {
+                return {x: this._.tx, y: this._.ty, toString: x_y};
+            }
+            this._.tx += +x;
+            this._.ty += +y;
+            switch (this.type) {
+                case "circle":
+                case "ellipse":
+                    this.attr({cx: +x + this.attrs.cx, cy: +y + this.attrs.cy});
+                    break;
+                case "rect":
+                case "image":
+                case "text":
+                    this.attr({x: +x + this.attrs.x, y: +y + this.attrs.y});
+                    break;
+                case "path":
+                    var path = pathToRelative(this.attrs.path);
+                    path[0][1] += +x;
+                    path[0][2] += +y;
+                    this.attr({path: path});
+                break;
+            }
+            return this;
+        };
+    elproto.animateWith = function (element, params, ms, easing, callback) {
+        for (var i = 0, ii = animationElements.length; i < ii; i++) {
+            if (animationElements[i].el.id == element.id) {
+                params.start = animationElements[i].start;
+            }
+        }
+        return this.animate(params, ms, easing, callback);
+    };
+    elproto.animateAlong = along();
+    elproto.animateAlongBack = along(1);
+    function along(isBack) {
+        return function (path, ms, rotate, callback) {
+            var params = {back: isBack};
+            R.is(rotate, "function") ? (callback = rotate) : (params.rot = rotate);
+            path && path.constructor == Element && (path = path.attrs.path);
+            path && (params.along = path);
+            return this.animate(params, ms, callback);
+        };
+    }
+    function CubicBezierAtTime(t, p1x, p1y, p2x, p2y, duration) {
+        var cx = 3 * p1x,
+            bx = 3 * (p2x - p1x) - cx,
+            ax = 1 - cx - bx,
+            cy = 3 * p1y,
+            by = 3 * (p2y - p1y) - cy,
+            ay = 1 - cy - by;
+        function sampleCurveX(t) {
+            return ((ax * t + bx) * t + cx) * t;
+        }
+        function solve(x, epsilon) {
+            var t = solveCurveX(x, epsilon);
+            return ((ay * t + by) * t + cy) * t;
+        }
+        function solveCurveX(x, epsilon) {
+            var t0, t1, t2, x2, d2, i;
+            for(t2 = x, i = 0; i < 8; i++) {
+                x2 = sampleCurveX(t2) - x;
+                if (abs(x2) < epsilon) {
+                    return t2;
+                }
+                d2 = (3 * ax * t2 + 2 * bx) * t2 + cx;
+                if (abs(d2) < 1e-6) {
+                    break;
+                }
+                t2 = t2 - x2 / d2;
+            }
+            t0 = 0;
+            t1 = 1;
+            t2 = x;
+            if (t2 < t0) {
+                return t0;
+            }
+            if (t2 > t1) {
+                return t1;
+            }
+            while (t0 < t1) {
+                x2 = sampleCurveX(t2);
+                if (abs(x2 - x) < epsilon) {
+                    return t2;
+                }
+                if (x > x2) {
+                    t0 = t2;
+                } else {
+                    t1 = t2;
+                }
+                t2 = (t1 - t0) / 2 + t0;
+            }
+            return t2;
+        }
+        return solve(t, 1 / (200 * duration));
+    }
+    elproto.onAnimation = function (f) {
+        this._run = f || 0;
+        return this;
+    };
+    elproto.animate = function (params, ms, easing, callback) {
+        var element = this;
+        element.timeouts = element.timeouts || [];
+        if (R.is(easing, "function") || !easing) {
+            callback = easing || null;
+        }
+        if (element.removed) {
+            callback && callback.call(element);
+            return element;
+        }
+        var from = {},
+            to = {},
+            animateable = false,
+            diff = {};
+        for (var attr in params) if (params[has](attr)) {
+            if (availableAnimAttrs[has](attr) || element.paper.customAttributes[has](attr)) {
+                animateable = true;
+                from[attr] = element.attr(attr);
+                (from[attr] == null) && (from[attr] = availableAttrs[attr]);
+                to[attr] = params[attr];
+                switch (availableAnimAttrs[attr]) {
+                    case "along":
+                        var len = getTotalLength(params[attr]);
+                        var point = getPointAtLength(params[attr], len * !!params.back);
+                        var bb = element.getBBox();
+                        diff[attr] = len / ms;
+                        diff.tx = bb.x;
+                        diff.ty = bb.y;
+                        diff.sx = point.x;
+                        diff.sy = point.y;
+                        to.rot = params.rot;
+                        to.back = params.back;
+                        to.len = len;
+                        params.rot && (diff.r = toFloat(element.rotate()) || 0);
+                        break;
+                    case nu:
+                        diff[attr] = (to[attr] - from[attr]) / ms;
+                        break;
+                    case "colour":
+                        from[attr] = R.getRGB(from[attr]);
+                        var toColour = R.getRGB(to[attr]);
+                        diff[attr] = {
+                            r: (toColour.r - from[attr].r) / ms,
+                            g: (toColour.g - from[attr].g) / ms,
+                            b: (toColour.b - from[attr].b) / ms
+                        };
+                        break;
+                    case "path":
+                        var pathes = path2curve(from[attr], to[attr]);
+                        from[attr] = pathes[0];
+                        var toPath = pathes[1];
+                        diff[attr] = [];
+                        for (var i = 0, ii = from[attr][length]; i < ii; i++) {
+                            diff[attr][i] = [0];
+                            for (var j = 1, jj = from[attr][i][length]; j < jj; j++) {
+                                diff[attr][i][j] = (toPath[i][j] - from[attr][i][j]) / ms;
+                            }
+                        }
+                        break;
+                    case "csv":
+                        var values = Str(params[attr])[split](separator),
+                            from2 = Str(from[attr])[split](separator);
+                        switch (attr) {
+                            case "translation":
+                                from[attr] = [0, 0];
+                                diff[attr] = [values[0] / ms, values[1] / ms];
+                            break;
+                            case "rotation":
+                                from[attr] = (from2[1] == values[1] && from2[2] == values[2]) ? from2 : [0, values[1], values[2]];
+                                diff[attr] = [(values[0] - from[attr][0]) / ms, 0, 0];
+                            break;
+                            case "scale":
+                                params[attr] = values;
+                                from[attr] = Str(from[attr])[split](separator);
+                                diff[attr] = [(values[0] - from[attr][0]) / ms, (values[1] - from[attr][1]) / ms, 0, 0];
+                            break;
+                            case "clip-rect":
+                                from[attr] = Str(from[attr])[split](separator);
+                                diff[attr] = [];
+                                i = 4;
+                                while (i--) {
+                                    diff[attr][i] = (values[i] - from[attr][i]) / ms;
+                                }
+                            break;
+                        }
+                        to[attr] = values;
+                        break;
+                    default:
+                        values = [].concat(params[attr]);
+                        from2 = [].concat(from[attr]);
+                        diff[attr] = [];
+                        i = element.paper.customAttributes[attr][length];
+                        while (i--) {
+                            diff[attr][i] = ((values[i] || 0) - (from2[i] || 0)) / ms;
+                        }
+                        break;
+                }
+            }
+        }
+        if (!animateable) {
+            var attrs = [],
+                lastcall;
+            for (var key in params) if (params[has](key) && animKeyFrames.test(key)) {
+                attr = {value: params[key]};
+                key == "from" && (key = 0);
+                key == "to" && (key = 100);
+                attr.key = toInt(key, 10);
+                attrs.push(attr);
+            }
+            attrs.sort(sortByKey);
+            if (attrs[0].key) {
+                attrs.unshift({key: 0, value: element.attrs});
+            }
+            for (i = 0, ii = attrs[length]; i < ii; i++) {
+                keyframesRun(attrs[i].value, element, ms / 100 * attrs[i].key, ms / 100 * (attrs[i - 1] && attrs[i - 1].key || 0), attrs[i - 1] && attrs[i - 1].value.callback);
+            }
+            lastcall = attrs[attrs[length] - 1].value.callback;
+            if (lastcall) {
+                element.timeouts.push(setTimeout(function () {lastcall.call(element);}, ms));
+            }
+        } else {
+            var easyeasy = R.easing_formulas[easing];
+            if (!easyeasy) {
+                easyeasy = Str(easing).match(bezierrg);
+                if (easyeasy && easyeasy[length] == 5) {
+                    var curve = easyeasy;
+                    easyeasy = function (t) {
+                        return CubicBezierAtTime(t, +curve[1], +curve[2], +curve[3], +curve[4], ms);
+                    };
+                } else {
+                    easyeasy = function (t) {
+                        return t;
+                    };
+                }
+            }
+            animationElements.push({
+                start: params.start || +new Date,
+                ms: ms,
+                easing: easyeasy,
+                from: from,
+                diff: diff,
+                to: to,
+                el: element,
+                t: {x: 0, y: 0}
+            });
+            R.is(callback, "function") && (element._ac = setTimeout(function () {
+                callback.call(element);
+            }, ms));
+            animationElements[length] == 1 && setTimeout(animation);
+        }
+        return this;
+    };
+    elproto.stop = function () {
+        for (var i = 0; i < animationElements.length; i++) {
+            animationElements[i].el.id == this.id && animationElements.splice(i--, 1);
+        }
+        for (i = 0, ii = this.timeouts && this.timeouts.length; i < ii; i++) {
+            clearTimeout(this.timeouts[i]);
+        }
+        this.timeouts = [];
+        clearTimeout(this._ac);
+        delete this._ac;
+        return this;
+    };
+    elproto.translate = function (x, y) {
+        return this.attr({translation: x + " " + y});
+    };
+    elproto[toString] = function () {
+        return "Rapha\xebl\u2019s object";
+    };
+    R.ae = animationElements;
+ 
+    // Set
+    var Set = function (items) {
+        this.items = [];
+        this[length] = 0;
+        this.type = "set";
+        if (items) {
+            for (var i = 0, ii = items[length]; i < ii; i++) {
+                if (items[i] && (items[i].constructor == Element || items[i].constructor == Set)) {
+                    this[this.items[length]] = this.items[this.items[length]] = items[i];
+                    this[length]++;
+                }
+            }
+        }
+    };
+    Set[proto][push] = function () {
+        var item,
+            len;
+        for (var i = 0, ii = arguments[length]; i < ii; i++) {
+            item = arguments[i];
+            if (item && (item.constructor == Element || item.constructor == Set)) {
+                len = this.items[length];
+                this[len] = this.items[len] = item;
+                this[length]++;
+            }
+        }
+        return this;
+    };
+    Set[proto].pop = function () {
+        delete this[this[length]--];
+        return this.items.pop();
+    };
+    for (var method in elproto) if (elproto[has](method)) {
+        Set[proto][method] = (function (methodname) {
+            return function () {
+                for (var i = 0, ii = this.items[length]; i < ii; i++) {
+                    this.items[i][methodname][apply](this.items[i], arguments);
+                }
+                return this;
+            };
+        })(method);
+    }
+    Set[proto].attr = function (name, value) {
+        if (name && R.is(name, array) && R.is(name[0], "object")) {
+            for (var j = 0, jj = name[length]; j < jj; j++) {
+                this.items[j].attr(name[j]);
+            }
+        } else {
+            for (var i = 0, ii = this.items[length]; i < ii; i++) {
+                this.items[i].attr(name, value);
+            }
+        }
+        return this;
+    };
+    Set[proto].animate = function (params, ms, easing, callback) {
+        (R.is(easing, "function") || !easing) && (callback = easing || null);
+        var len = this.items[length],
+            i = len,
+            item,
+            set = this,
+            collector;
+        callback && (collector = function () {
+            !--len && callback.call(set);
+        });
+        easing = R.is(easing, string) ? easing : collector;
+        item = this.items[--i].animate(params, ms, easing, collector);
+        while (i--) {
+            this.items[i] && !this.items[i].removed && this.items[i].animateWith(item, params, ms, easing, collector);
+        }
+        return this;
+    };
+    Set[proto].insertAfter = function (el) {
+        var i = this.items[length];
+        while (i--) {
+            this.items[i].insertAfter(el);
+        }
+        return this;
+    };
+    Set[proto].getBBox = function () {
+        var x = [],
+            y = [],
+            w = [],
+            h = [];
+        for (var i = this.items[length]; i--;) {
+            var box = this.items[i].getBBox();
+            x[push](box.x);
+            y[push](box.y);
+            w[push](box.x + box.width);
+            h[push](box.y + box.height);
+        }
+        x = mmin[apply](0, x);
+        y = mmin[apply](0, y);
+        return {
+            x: x,
+            y: y,
+            width: mmax[apply](0, w) - x,
+            height: mmax[apply](0, h) - y
+        };
+    };
+    Set[proto].clone = function (s) {
+        s = new Set;
+        for (var i = 0, ii = this.items[length]; i < ii; i++) {
+            s[push](this.items[i].clone());
+        }
+        return s;
+    };
+
+    R.registerFont = function (font) {
+        if (!font.face) {
+            return font;
+        }
+        this.fonts = this.fonts || {};
+        var fontcopy = {
+                w: font.w,
+                face: {},
+                glyphs: {}
+            },
+            family = font.face["font-family"];
+        for (var prop in font.face) if (font.face[has](prop)) {
+            fontcopy.face[prop] = font.face[prop];
+        }
+        if (this.fonts[family]) {
+            this.fonts[family][push](fontcopy);
+        } else {
+            this.fonts[family] = [fontcopy];
+        }
+        if (!font.svg) {
+            fontcopy.face["units-per-em"] = toInt(font.face["units-per-em"], 10);
+            for (var glyph in font.glyphs) if (font.glyphs[has](glyph)) {
+                var path = font.glyphs[glyph];
+                fontcopy.glyphs[glyph] = {
+                    w: path.w,
+                    k: {},
+                    d: path.d && "M" + path.d[rp](/[mlcxtrv]/g, function (command) {
+                            return {l: "L", c: "C", x: "z", t: "m", r: "l", v: "c"}[command] || "M";
+                        }) + "z"
+                };
+                if (path.k) {
+                    for (var k in path.k) if (path[has](k)) {
+                        fontcopy.glyphs[glyph].k[k] = path.k[k];
+                    }
+                }
+            }
+        }
+        return font;
+    };
+    paperproto.getFont = function (family, weight, style, stretch) {
+        stretch = stretch || "normal";
+        style = style || "normal";
+        weight = +weight || {normal: 400, bold: 700, lighter: 300, bolder: 800}[weight] || 400;
+        if (!R.fonts) {
+            return;
+        }
+        var font = R.fonts[family];
+        if (!font) {
+            var name = new RegExp("(^|\\s)" + family[rp](/[^\w\d\s+!~.:_-]/g, E) + "(\\s|$)", "i");
+            for (var fontName in R.fonts) if (R.fonts[has](fontName)) {
+                if (name.test(fontName)) {
+                    font = R.fonts[fontName];
+                    break;
+                }
+            }
+        }
+        var thefont;
+        if (font) {
+            for (var i = 0, ii = font[length]; i < ii; i++) {
+                thefont = font[i];
+                if (thefont.face["font-weight"] == weight && (thefont.face["font-style"] == style || !thefont.face["font-style"]) && thefont.face["font-stretch"] == stretch) {
+                    break;
+                }
+            }
+        }
+        return thefont;
+    };
+    paperproto.print = function (x, y, string, font, size, origin, letter_spacing) {
+        origin = origin || "middle"; // baseline|middle
+        letter_spacing = mmax(mmin(letter_spacing || 0, 1), -1);
+        var out = this.set(),
+            letters = Str(string)[split](E),
+            shift = 0,
+            path = E,
+            scale;
+        R.is(font, string) && (font = this.getFont(font));
+        if (font) {
+            scale = (size || 16) / font.face["units-per-em"];
+            var bb = font.face.bbox.split(separator),
+                top = +bb[0],
+                height = +bb[1] + (origin == "baseline" ? bb[3] - bb[1] + (+font.face.descent) : (bb[3] - bb[1]) / 2);
+            for (var i = 0, ii = letters[length]; i < ii; i++) {
+                var prev = i && font.glyphs[letters[i - 1]] || {},
+                    curr = font.glyphs[letters[i]];
+                shift += i ? (prev.w || font.w) + (prev.k && prev.k[letters[i]] || 0) + (font.w * letter_spacing) : 0;
+                curr && curr.d && out[push](this.path(curr.d).attr({fill: "#000", stroke: "none", translation: [shift, 0]}));
+            }
+            out.scale(scale, scale, top, height).translate(x - top, y - height);
+        }
+        return out;
+    };
+
+    R.format = function (token, params) {
+        var args = R.is(params, array) ? [0][concat](params) : arguments;
+        token && R.is(token, string) && args[length] - 1 && (token = token[rp](formatrg, function (str, i) {
+            return args[++i] == null ? E : args[i];
+        }));
+        return token || E;
+    };
+    R.ninja = function () {
+        oldRaphael.was ? (win.Raphael = oldRaphael.is) : delete Raphael;
+        return R;
+    };
+    R.el = elproto;
+    R.st = Set[proto];
+
+    oldRaphael.was ? (win.Raphael = R) : (Raphael = R);
+})();/*!
+ * g.Raphael 0.4.1 - Charting library, based on Raphaël
+ *
+ * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
+ * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
+ */
+ 
+ 
+(function () {
+    var mmax = Math.max,
+        mmin = Math.min;
+    Raphael.fn.g = Raphael.fn.g || {};
+    Raphael.fn.g.markers = {
+        disc: "disc",
+        o: "disc",
+        flower: "flower",
+        f: "flower",
+        diamond: "diamond",
+        d: "diamond",
+        square: "square",
+        s: "square",
+        triangle: "triangle",
+        t: "triangle",
+        star: "star",
+        "*": "star",
+        cross: "cross",
+        x: "cross",
+        plus: "plus",
+        "+": "plus",
+        arrow: "arrow",
+        "->": "arrow"
+    };
+    Raphael.fn.g.shim = {stroke: "none", fill: "#000", "fill-opacity": 0};
+    Raphael.fn.g.txtattr = {font: "12px Arial, sans-serif"};
+    Raphael.fn.g.colors = [];
+    var hues = [.6, .2, .05, .1333, .75, 0];
+    for (var i = 0; i < 10; i++) {
+        if (i < hues.length) {
+            Raphael.fn.g.colors.push("hsb(" + hues[i] + ", .75, .75)");
+        } else {
+            Raphael.fn.g.colors.push("hsb(" + hues[i - hues.length] + ", 1, .5)");
+        }
+    }
+    Raphael.fn.g.text = function (x, y, text) {
+        return this.text(x, y, text).attr(this.g.txtattr);
+    };
+    Raphael.fn.g.labelise = function (label, val, total) {
+        if (label) {
+            return (label + "").replace(/(##+(?:\.#+)?)|(%%+(?:\.%+)?)/g, function (all, value, percent) {
+                if (value) {
+                    return (+val).toFixed(value.replace(/^#+\.?/g, "").length);
+                }
+                if (percent) {
+                    return (val * 100 / total).toFixed(percent.replace(/^%+\.?/g, "").length) + "%";
+                }
+            });
+        } else {
+            return (+val).toFixed(0);
+        }
+    };
+
+    Raphael.fn.g.finger = function (x, y, width, height, dir, ending, isPath) {
+        // dir 0 for horisontal and 1 for vertical
+        if ((dir && !height) || (!dir && !width)) {
+            return isPath ? "" : this.path();
+        }
+        ending = {square: "square", sharp: "sharp", soft: "soft"}[ending] || "round";
+        var path;
+        height = Math.round(height);
+        width = Math.round(width);
+        x = Math.round(x);
+        y = Math.round(y);
+        switch (ending) {
+            case "round":
+            if (!dir) {
+                var r = ~~(height / 2);
+                if (width < r) {
+                    r = width;
+                    path = ["M", x + .5, y + .5 - ~~(height / 2), "l", 0, 0, "a", r, ~~(height / 2), 0, 0, 1, 0, height, "l", 0, 0, "z"];
+                } else {
+                    path = ["M", x + .5, y + .5 - r, "l", width - r, 0, "a", r, r, 0, 1, 1, 0, height, "l", r - width, 0, "z"];
+                }
+            } else {
+                r = ~~(width / 2);
+                if (height < r) {
+                    r = height;
+                    path = ["M", x - ~~(width / 2), y, "l", 0, 0, "a", ~~(width / 2), r, 0, 0, 1, width, 0, "l", 0, 0, "z"];
+                } else {
+                    path = ["M", x - r, y, "l", 0, r - height, "a", r, r, 0, 1, 1, width, 0, "l", 0, height - r, "z"];
+                }
+            }
+            break;
+            case "sharp":
+            if (!dir) {
+                var half = ~~(height / 2);
+                path = ["M", x, y + half, "l", 0, -height, mmax(width - half, 0), 0, mmin(half, width), half, -mmin(half, width), half + (half * 2 < height), "z"];
+            } else {
+                half = ~~(width / 2);
+                path = ["M", x + half, y, "l", -width, 0, 0, -mmax(height - half, 0), half, -mmin(half, height), half, mmin(half, height), half, "z"];
+            }
+            break;
+            case "square":
+            if (!dir) {
+                path = ["M", x, y + ~~(height / 2), "l", 0, -height, width, 0, 0, height, "z"];
+            } else {
+                path = ["M", x + ~~(width / 2), y, "l", 1 - width, 0, 0, -height, width - 1, 0, "z"];
+            }
+            break;
+            case "soft":
+            if (!dir) {
+                r = mmin(width, Math.round(height / 5));
+                path = ["M", x + .5, y + .5 - ~~(height / 2), "l", width - r, 0, "a", r, r, 0, 0, 1, r, r, "l", 0, height - r * 2, "a", r, r, 0, 0, 1, -r, r, "l", r - width, 0, "z"];
+            } else {
+                r = mmin(Math.round(width / 5), height);
+                path = ["M", x - ~~(width / 2), y, "l", 0, r - height, "a", r, r, 0, 0, 1, r, -r, "l", width - 2 * r, 0, "a", r, r, 0, 0, 1, r, r, "l", 0, height - r, "z"];
+            }
+        }
+        if (isPath) {
+            return path.join(",");
+        } else {
+            return this.path(path);
+        }
+    };
+
+    // Symbols
+    Raphael.fn.g.disc = function (cx, cy, r) {
+        return this.circle(cx, cy, r);
+    };
+    Raphael.fn.g.line = function (cx, cy, r) {
+        return this.rect(cx - r, cy - r / 5, 2 * r, 2 * r / 5);
+    };
+    Raphael.fn.g.square = function (cx, cy, r) {
+        r = r * .7;
+        return this.rect(cx - r, cy - r, 2 * r, 2 * r);
+    };
+    Raphael.fn.g.triangle = function (cx, cy, r) {
+        r *= 1.75;
+        return this.path("M".concat(cx, ",", cy, "m0-", r * .58, "l", r * .5, ",", r * .87, "-", r, ",0z"));
+    };
+    Raphael.fn.g.diamond = function (cx, cy, r) {
+        return this.path(["M", cx, cy - r, "l", r, r, -r, r, -r, -r, r, -r, "z"]);
+    };
+    Raphael.fn.g.flower = function (cx, cy, r, n) {
+        r = r * 1.25;
+        var rout = r,
+            rin = rout * .5;
+        n = +n < 3 || !n ? 5 : n;
+        var points = ["M", cx, cy + rin, "Q"],
+            R;
+        for (var i = 1; i < n * 2 + 1; i++) {
+            R = i % 2 ? rout : rin;
+            points = points.concat([+(cx + R * Math.sin(i * Math.PI / n)).toFixed(3), +(cy + R * Math.cos(i * Math.PI / n)).toFixed(3)]);
+        }
+        points.push("z");
+        return this.path(points.join(","));
+    };
+    Raphael.fn.g.star = function (cx, cy, r, r2, rays) {
+        r2 = r2 || r * .382;
+        rays = rays || 5;
+        var points = ["M", cx, cy + r2, "L"],
+            R;
+        for (var i = 1; i < rays * 2; i++) {
+            R = i % 2 ? r : r2;
+            points = points.concat([(cx + R * Math.sin(i * Math.PI / rays)), (cy + R * Math.cos(i * Math.PI / rays))]);
+        }
+        points.push("z");
+        return this.path(points.join(","));
+    };
+    Raphael.fn.g.cross = function (cx, cy, r) {
+        r = r / 2.5;
+        return this.path("M".concat(cx - r, ",", cy, "l", [-r, -r, r, -r, r, r, r, -r, r, r, -r, r, r, r, -r, r, -r, -r, -r, r, -r, -r, "z"]));
+    };
+    Raphael.fn.g.plus = function (cx, cy, r) {
+        r = r / 2;
+        return this.path("M".concat(cx - r / 2, ",", cy - r / 2, "l", [0, -r, r, 0, 0, r, r, 0, 0, r, -r, 0, 0, r, -r, 0, 0, -r, -r, 0, 0, -r, "z"]));
+    };
+    Raphael.fn.g.arrow = function (cx, cy, r) {
+        return this.path("M".concat(cx - r * .7, ",", cy - r * .4, "l", [r * .6, 0, 0, -r * .4, r, r * .8, -r, r * .8, 0, -r * .4, -r * .6, 0], "z"));
+    };
+
+    // Tooltips
+    Raphael.fn.g.tag = function (x, y, text, angle, r) {
+        angle = angle || 0;
+        r = r == null ? 5 : r;
+        text = text == null ? "$9.99" : text;
+        var R = .5522 * r,
+            res = this.set(),
+            d = 3;
+        res.push(this.path().attr({fill: "#000", stroke: "#000"}));
+        res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff", "font-family": "Helvetica, Arial"}));
+        res.update = function () {
+            this.rotate(0, x, y);
+            var bb = this[1].getBBox();
+            if (bb.height >= r * 2) {
+                this[0].attr({path: ["M", x, y + r, "a", r, r, 0, 1, 1, 0, -r * 2, r, r, 0, 1, 1, 0, r * 2, "m", 0, -r * 2 -d, "a", r + d, r + d, 0, 1, 0, 0, (r + d) * 2, "L", x + r + d, y + bb.height / 2 + d, "l", bb.width + 2 * d, 0, 0, -bb.height - 2 * d, -bb.width - 2 * d, 0, "L", x, y - r - d].join(",")});
+            } else {
+                var dx = Math.sqrt(Math.pow(r + d, 2) - Math.pow(bb.height / 2 + d, 2));
+                this[0].attr({path: ["M", x, y + r, "c", -R, 0, -r, R - r, -r, -r, 0, -R, r - R, -r, r, -r, R, 0, r, r - R, r, r, 0, R, R - r, r, -r, r, "M", x + dx, y - bb.height / 2 - d, "a", r + d, r + d, 0, 1, 0, 0, bb.height + 2 * d, "l", r + d - dx + bb.width + 2 * d, 0, 0, -bb.height - 2 * d, "L", x + dx, y - bb.height / 2 - d].join(",")});
+            }
+            this[1].attr({x: x + r + d + bb.width / 2, y: y});
+            angle = (360 - angle) % 360;
+            this.rotate(angle, x, y);
+            angle > 90 && angle < 270 && this[1].attr({x: x - r - d - bb.width / 2, y: y, rotation: [180 + angle, x, y]});
+            return this;
+        };
+        res.update();
+        return res;
+    };
+    Raphael.fn.g.popupit = function (x, y, set, dir, size) {
+        dir = dir == null ? 2 : dir;
+        size = size || 5;
+        x = Math.round(x);
+        y = Math.round(y);
+        var bb = set.getBBox(),
+            w = Math.round(bb.width / 2),
+            h = Math.round(bb.height / 2),
+            dx = [0, w + size * 2, 0, -w - size * 2],
+            dy = [-h * 2 - size * 3, -h - size, 0, -h - size],
+            p = ["M", x - dx[dir], y - dy[dir], "l", -size, (dir == 2) * -size, -mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, -size, -size,
+                "l", 0, -mmax(h - size, 0), (dir == 3) * -size, -size, (dir == 3) * size, -size, 0, -mmax(h - size, 0), "a", size, size, 0, 0, 1, size, -size,
+                "l", mmax(w - size, 0), 0, size, !dir * -size, size, !dir * size, mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, size, size,
+                "l", 0, mmax(h - size, 0), (dir == 1) * size, size, (dir == 1) * -size, size, 0, mmax(h - size, 0), "a", size, size, 0, 0, 1, -size, size,
+                "l", -mmax(w - size, 0), 0, "z"].join(","),
+            xy = [{x: x, y: y + size * 2 + h}, {x: x - size * 2 - w, y: y}, {x: x, y: y - size * 2 - h}, {x: x + size * 2 + w, y: y}][dir];
+        set.translate(xy.x - w - bb.x, xy.y - h - bb.y);
+        return this.path(p).attr({fill: "#000", stroke: "none"}).insertBefore(set.node ? set : set[0]);
+    };
+    Raphael.fn.g.popup = function (x, y, text, dir, size) {
+        dir = dir == null ? 2 : dir > 3 ? 3 : dir;
+        size = size || 5;
+        text = text || "$9.99";
+        var res = this.set(),
+            d = 3;
+        res.push(this.path().attr({fill: "#000", stroke: "#000"}));
+        res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff", "font-family": "Helvetica, Arial"}));
+        res.update = function (X, Y, withAnimation) {
+            X = X || x;
+            Y = Y || y;
+            var bb = this[1].getBBox(),
+                w = bb.width / 2,
+                h = bb.height / 2,
+                dx = [0, w + size * 2, 0, -w - size * 2],
+                dy = [-h * 2 - size * 3, -h - size, 0, -h - size],
+                p = ["M", X - dx[dir], Y - dy[dir], "l", -size, (dir == 2) * -size, -mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, -size, -size,
+                    "l", 0, -mmax(h - size, 0), (dir == 3) * -size, -size, (dir == 3) * size, -size, 0, -mmax(h - size, 0), "a", size, size, 0, 0, 1, size, -size,
+                    "l", mmax(w - size, 0), 0, size, !dir * -size, size, !dir * size, mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, size, size,
+                    "l", 0, mmax(h - size, 0), (dir == 1) * size, size, (dir == 1) * -size, size, 0, mmax(h - size, 0), "a", size, size, 0, 0, 1, -size, size,
+                    "l", -mmax(w - size, 0), 0, "z"].join(","),
+                xy = [{x: X, y: Y + size * 2 + h}, {x: X - size * 2 - w, y: Y}, {x: X, y: Y - size * 2 - h}, {x: X + size * 2 + w, y: Y}][dir];
+            xy.path = p;
+            if (withAnimation) {
+                this.animate(xy, 500, ">");
+            } else {
+                this.attr(xy);
+            }
+            return this;
+        };
+        return res.update(x, y);
+    };
+    Raphael.fn.g.flag = function (x, y, text, angle) {
+        angle = angle || 0;
+        text = text || "$9.99";
+        var res = this.set(),
+            d = 3;
+        res.push(this.path().attr({fill: "#000", stroke: "#000"}));
+        res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff", "font-family": "Helvetica, Arial"}));
+        res.update = function (x, y) {
+            this.rotate(0, x, y);
+            var bb = this[1].getBBox(),
+                h = bb.height / 2;
+            this[0].attr({path: ["M", x, y, "l", h + d, -h - d, bb.width + 2 * d, 0, 0, bb.height + 2 * d, -bb.width - 2 * d, 0, "z"].join(",")});
+            this[1].attr({x: x + h + d + bb.width / 2, y: y});
+            angle = 360 - angle;
+            this.rotate(angle, x, y);
+            angle > 90 && angle < 270 && this[1].attr({x: x - r - d - bb.width / 2, y: y, rotation: [180 + angle, x, y]});
+            return this;
+        };
+        return res.update(x, y);
+    };
+    Raphael.fn.g.label = function (x, y, text) {
+        var res = this.set();
+        res.push(this.rect(x, y, 10, 10).attr({stroke: "none", fill: "#000"}));
+        res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff"}));
+        res.update = function () {
+            var bb = this[1].getBBox(),
+                r = mmin(bb.width + 10, bb.height + 10) / 2;
+            this[0].attr({x: bb.x - r / 2, y: bb.y - r / 2, width: bb.width + r, height: bb.height + r, r: r});
+        };
+        res.update();
+        return res;
+    };
+    Raphael.fn.g.labelit = function (set) {
+        var bb = set.getBBox(),
+            r = mmin(20, bb.width + 10, bb.height + 10) / 2;
+        return this.rect(bb.x - r / 2, bb.y - r / 2, bb.width + r, bb.height + r, r).attr({stroke: "none", fill: "#000"}).insertBefore(set.node ? set : set[0]);
+    };
+    Raphael.fn.g.drop = function (x, y, text, size, angle) {
+        size = size || 30;
+        angle = angle || 0;
+        var res = this.set();
+        res.push(this.path(["M", x, y, "l", size, 0, "A", size * .4, size * .4, 0, 1, 0, x + size * .7, y - size * .7, "z"]).attr({fill: "#000", stroke: "none", rotation: [22.5 - angle, x, y]}));
+        angle = (angle + 90) * Math.PI / 180;
+        res.push(this.text(x + size * Math.sin(angle), y + size * Math.cos(angle), text).attr(this.g.txtattr).attr({"font-size": size * 12 / 30, fill: "#fff"}));
+        res.drop = res[0];
+        res.text = res[1];
+        return res;
+    };
+    Raphael.fn.g.blob = function (x, y, text, angle, size) {
+        angle = (+angle + 1 ? angle : 45) + 90;
+        size = size || 12;
+        var rad = Math.PI / 180,
+            fontSize = size * 12 / 12;
+        var res = this.set();
+        res.push(this.path().attr({fill: "#000", stroke: "none"}));
+        res.push(this.text(x + size * Math.sin((angle) * rad), y + size * Math.cos((angle) * rad) - fontSize / 2, text).attr(this.g.txtattr).attr({"font-size": fontSize, fill: "#fff"}));
+        res.update = function (X, Y, withAnimation) {
+            X = X || x;
+            Y = Y || y;
+            var bb = this[1].getBBox(),
+                w = mmax(bb.width + fontSize, size * 25 / 12),
+                h = mmax(bb.height + fontSize, size * 25 / 12),
+                x2 = X + size * Math.sin((angle - 22.5) * rad),
+                y2 = Y + size * Math.cos((angle - 22.5) * rad),
+                x1 = X + size * Math.sin((angle + 22.5) * rad),
+                y1 = Y + size * Math.cos((angle + 22.5) * rad),
+                dx = (x1 - x2) / 2,
+                dy = (y1 - y2) / 2,
+                rx = w / 2,
+                ry = h / 2,
+                k = -Math.sqrt(Math.abs(rx * rx * ry * ry - rx * rx * dy * dy - ry * ry * dx * dx) / (rx * rx * dy * dy + ry * ry * dx * dx)),
+                cx = k * rx * dy / ry + (x1 + x2) / 2,
+                cy = k * -ry * dx / rx + (y1 + y2) / 2;
+            if (withAnimation) {
+                this.animate({x: cx, y: cy, path: ["M", x, y, "L", x1, y1, "A", rx, ry, 0, 1, 1, x2, y2, "z"].join(",")}, 500, ">");
+            } else {
+                this.attr({x: cx, y: cy, path: ["M", x, y, "L", x1, y1, "A", rx, ry, 0, 1, 1, x2, y2, "z"].join(",")});
+            }
+            return this;
+        };
+        res.update(x, y);
+        return res;
+    };
+
+    Raphael.fn.g.colorValue = function (value, total, s, b) {
+        return "hsb(" + [mmin((1 - value / total) * .4, 1), s || .75, b || .75] + ")";
+    };
+
+    Raphael.fn.g.snapEnds = function (from, to, steps) {
+        var f = from,
+            t = to;
+        if (f == t) {
+            return {from: f, to: t, power: 0};
+        }
+        function round(a) {
+            return Math.abs(a - .5) < .25 ? ~~(a) + .5 : Math.round(a);
+        }
+        var d = (t - f) / steps,
+            r = ~~(d),
+            R = r,
+            i = 0;
+        if (r) {
+            while (R) {
+                i--;
+                R = ~~(d * Math.pow(10, i)) / Math.pow(10, i);
+            }
+            i ++;
+        } else {
+            while (!r) {
+                i = i || 1;
+                r = ~~(d * Math.pow(10, i)) / Math.pow(10, i);
+                i++;
+            }
+            i && i--;
+        }
+        t = round(to * Math.pow(10, i)) / Math.pow(10, i);
+        if (t < to) {
+            t = round((to + .5) * Math.pow(10, i)) / Math.pow(10, i);
+        }
+        f = round((from - (i > 0 ? 0 : .5)) * Math.pow(10, i)) / Math.pow(10, i);
+        return {from: f, to: t, power: i};
+    };
+    Raphael.fn.g.axis = function (x, y, length, from, to, steps, orientation, labels, type, dashsize) {
+        dashsize = dashsize == null ? 2 : dashsize;
+        type = type || "t";
+        steps = steps || 10;
+        var path = type == "|" || type == " " ? ["M", x + .5, y, "l", 0, .001] : orientation == 1 || orientation == 3 ? ["M", x + .5, y, "l", 0, -length] : ["M", x, y + .5, "l", length, 0],
+            ends = this.g.snapEnds(from, to, steps),
+            f = ends.from,
+            t = ends.to,
+            i = ends.power,
+            j = 0,
+            text = this.set();
+        d = (t - f) / steps;
+        var label = f,
+            rnd = i > 0 ? i : 0;
+            dx = length / steps;
+        if (+orientation == 1 || +orientation == 3) {
+            var Y = y,
+                addon = (orientation - 1 ? 1 : -1) * (dashsize + 3 + !!(orientation - 1));
+            while (Y >= y - length) {
+                type != "-" && type != " " && (path = path.concat(["M", x - (type == "+" || type == "|" ? dashsize : !(orientation - 1) * dashsize * 2), Y + .5, "l", dashsize * 2 + 1, 0]));
+                text.push(this.text(x + addon, Y, (labels && labels[j++]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr).attr({"text-anchor": orientation - 1 ? "start" : "end"}));
+                label += d;
+                Y -= dx;
+            }
+            if (Math.round(Y + dx - (y - length))) {
+                type != "-" && type != " " && (path = path.concat(["M", x - (type == "+" || type == "|" ? dashsize : !(orientation - 1) * dashsize * 2), y - length + .5, "l", dashsize * 2 + 1, 0]));
+                text.push(this.text(x + addon, y - length, (labels && labels[j]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr).attr({"text-anchor": orientation - 1 ? "start" : "end"}));
+            }
+        } else {
+            label = f;
+            rnd = (i > 0) * i;
+            addon = (orientation ? -1 : 1) * (dashsize + 9 + !orientation);
+            var X = x,
+                dx = length / steps,
+                txt = 0,
+                prev = 0;
+            while (X <= x + length) {
+                type != "-" && type != " " && (path = path.concat(["M", X + .5, y - (type == "+" ? dashsize : !!orientation * dashsize * 2), "l", 0, dashsize * 2 + 1]));
+                text.push(txt = this.text(X, y + addon, (labels && labels[j++]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr));
+                var bb = txt.getBBox();
+                if (prev >= bb.x - 5) {
+                    text.pop(text.length - 1).remove();
+                } else {
+                    prev = bb.x + bb.width;
+                }
+                label += d;
+                X += dx;
+            }
+            if (Math.round(X - dx - x - length)) {
+                type != "-" && type != " " && (path = path.concat(["M", x + length + .5, y - (type == "+" ? dashsize : !!orientation * dashsize * 2), "l", 0, dashsize * 2 + 1]));
+                text.push(this.text(x + length, y + addon, (labels && labels[j]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr));
+            }
+        }
+        var res = this.path(path);
+        res.text = text;
+        res.all = this.set([res, text]);
+        res.remove = function () {
+            this.text.remove();
+            this.constructor.prototype.remove.call(this);
+        };
+        return res;
+    };
+
+    Raphael.el.lighter = function (times) {
+        times = times || 2;
+        var fs = [this.attrs.fill, this.attrs.stroke];
+        this.fs = this.fs || [fs[0], fs[1]];
+        fs[0] = Raphael.rgb2hsb(Raphael.getRGB(fs[0]).hex);
+        fs[1] = Raphael.rgb2hsb(Raphael.getRGB(fs[1]).hex);
+        fs[0].b = mmin(fs[0].b * times, 1);
+        fs[0].s = fs[0].s / times;
+        fs[1].b = mmin(fs[1].b * times, 1);
+        fs[1].s = fs[1].s / times;
+        this.attr({fill: "hsb(" + [fs[0].h, fs[0].s, fs[0].b] + ")", stroke: "hsb(" + [fs[1].h, fs[1].s, fs[1].b] + ")"});
+    };
+    Raphael.el.darker = function (times) {
+        times = times || 2;
+        var fs = [this.attrs.fill, this.attrs.stroke];
+        this.fs = this.fs || [fs[0], fs[1]];
+        fs[0] = Raphael.rgb2hsb(Raphael.getRGB(fs[0]).hex);
+        fs[1] = Raphael.rgb2hsb(Raphael.getRGB(fs[1]).hex);
+        fs[0].s = mmin(fs[0].s * times, 1);
+        fs[0].b = fs[0].b / times;
+        fs[1].s = mmin(fs[1].s * times, 1);
+        fs[1].b = fs[1].b / times;
+        this.attr({fill: "hsb(" + [fs[0].h, fs[0].s, fs[0].b] + ")", stroke: "hsb(" + [fs[1].h, fs[1].s, fs[1].b] + ")"});
+    };
+    Raphael.el.original = function () {
+        if (this.fs) {
+            this.attr({fill: this.fs[0], stroke: this.fs[1]});
+            delete this.fs;
+        }
+    };
+})();/*!
+ * g.Raphael 0.4.1 - Charting library, based on Raphaël
+ *
+ * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
+ * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
+ */
+Raphael.fn.g.barchart = function (x, y, width, height, values, opts) {
+    opts = opts || {};
+    var type = {round: "round", sharp: "sharp", soft: "soft"}[opts.type] || "square",
+        gutter = parseFloat(opts.gutter || "20%"),
+        chart = this.set(),
+        bars = this.set(),
+        covers = this.set(),
+        covers2 = this.set(),
+        total = Math.max.apply(Math, values),
+        stacktotal = [],
+        paper = this,
+        multi = 0,
+        colors = opts.colors || this.g.colors,
+        len = values.length;
+    if (this.raphael.is(values[0], "array")) {
+        total = [];
+        multi = len;
+        len = 0;
+        for (var i = values.length; i--;) {
+            bars.push(this.set());
+            total.push(Math.max.apply(Math, values[i]));
+            len = Math.max(len, values[i].length);
+        }
+        if (opts.stacked) {
+            for (var i = len; i--;) {
+                var tot = 0;
+                for (var j = values.length; j--;) {
+                    tot +=+ values[j][i] || 0;
+                }
+                stacktotal.push(tot);
+            }
+        }
+        for (var i = values.length; i--;) {
+            if (values[i].length < len) {
+                for (var j = len; j--;) {
+                    values[i].push(0);
+                }
+            }
+        }
+        total = Math.max.apply(Math, opts.stacked ? stacktotal : total);
+    }
+    
+    total = (opts.to) || total;
+    var barwidth = width / (len * (100 + gutter) + gutter) * 100,
+        barhgutter = barwidth * gutter / 100,
+        barvgutter = opts.vgutter == null ? 20 : opts.vgutter,
+        stack = [],
+        X = x + barhgutter,
+        Y = (height - 2 * barvgutter) / total;
+    if (!opts.stretch) {
+        barhgutter = Math.round(barhgutter);
+        barwidth = Math.floor(barwidth);
+    }
+    !opts.stacked && (barwidth /= multi || 1);
+    for (var i = 0; i < len; i++) {
+        stack = [];
+        for (var j = 0; j < (multi || 1); j++) {
+            var h = Math.round((multi ? values[j][i] : values[i]) * Y),
+                top = y + height - barvgutter - h,
+                bar = this.g.finger(Math.round(X + barwidth / 2), top + h, barwidth, h, true, type).attr({stroke: "none", fill: colors[multi ? j : i]});
+            if (multi) {
+                bars[j].push(bar);
+            } else {
+                bars.push(bar);
+            }
+            bar.y = top;
+            bar.x = Math.round(X + barwidth / 2);
+            bar.w = barwidth;
+            bar.h = h;
+						bar.index = i;
+            bar.value = multi ? values[j][i] : values[i];
+            if (!opts.stacked) {
+                X += barwidth;
+            } else {
+                stack.push(bar);
+            }
+        }
+        if (opts.stacked) {
+            var cvr;
+            covers2.push(cvr = this.rect(stack[0].x - stack[0].w / 2, y, barwidth, height).attr(this.g.shim));
+            cvr.bars = this.set();
+            var size = 0;
+            for (var s = stack.length; s--;) {
+                stack[s].toFront();
+            }
+            for (var s = 0, ss = stack.length; s < ss; s++) {
+                var bar = stack[s],
+                    cover,
+                    h = (size + bar.value) * Y,
+                    path = this.g.finger(bar.x, y + height - barvgutter - !!size * .5, barwidth, h, true, type, 1);
+                cvr.bars.push(bar);
+                size && bar.attr({path: path});
+                bar.h = h;
+                bar.y = y + height - barvgutter - !!size * .5 - h;
+                covers.push(cover = this.rect(bar.x - bar.w / 2, bar.y, barwidth, bar.value * Y).attr(this.g.shim));
+                cover.bar = bar;
+                cover.value = bar.value;
+                size += bar.value;
+            }
+            X += barwidth;
+        }
+        X += barhgutter;
+    }
+    covers2.toFront();
+    X = x + barhgutter;
+    if (!opts.stacked) {
+        for (var i = 0; i < len; i++) {
+            for (var j = 0; j < (multi || 1); j++) {
+                var cover;
+                covers.push(cover = this.rect(Math.round(X), y + barvgutter, barwidth, height - barvgutter).attr(this.g.shim));
+                cover.bar = multi ? bars[j][i] : bars[i];
+                cover.value = cover.bar.value;
+                X += barwidth;
+            }
+            X += barhgutter;
+        }
+    }
+    chart.label = function (labels, isBottom, rotate) {
+        labels = labels || [];
+        isBottom = isBottom == undefined ? true : isBottom;
+	rotate = rotate == undefined ? false : rotate;
+        this.labels = paper.set();
+        var L, l = -Infinity;
+        if (opts.stacked) {
+            for (var i = 0; i < len; i++) {
+                var tot = 0;
+                for (var j = 0; j < (multi || 1); j++) {
+                    tot += multi ? values[j][i] : values[i];
+                    if (j == 0) {
+                        var label = paper.g.labelise(labels[j][i], tot, total);
+                        L = paper.g.text(bars[j][i].x, isBottom ? y + height - barvgutter / 2 : bars[j][i].y - 10, label);
+			if (rotate) {
+				L.rotate(90);
+			}
+                        var bb = L.getBBox();
+                        if (bb.x - 7 < l) {
+                            L.remove();
+                        } else {
+                            this.labels.push(L);
+                            l = bb.x + (rotate ? bb.height : bb.width);
+                        }
+                    }
+                }
+            }
+        } else {
+            for (var i = 0; i < len; i++) {
+                for (var j = 0; j < (multi || 1); j++) {
+                    // did not remove the loop because don't yet know whether to accept multi array input for arrays
+                    var label = paper.g.labelise(multi ? labels[0] && labels[0][i] : labels[i], multi ? values[0][i] : values[i], total);
+                     L = paper.g.text(bars[0][i].x, isBottom ? y + 5 + height - barvgutter / 2 : bars[0][i].y - 10, label);
+			if (rotate) {
+				L.rotate(90);
+				// If we rotated it, we need to move it as well. Still have to use the width
+				// to get the "length" of the label, divided it in two and shift down.
+				L.translate(0, (L.getBBox().width / 2));
+			}
+                    var bb = L.getBBox();
+//                    if (bb.x - 7 < l) {
+                    if (bb.x - (this.getBBox().width) < l) {
+                        L.remove();
+                    } else {
+                        this.labels.push(L);
+                        l = bb.x + (rotate ? bb.height : bb.width);
+                    }
+                }
+            }
+        }
+        return this;
+    };
+    chart.hover = function (fin, fout) {
+        covers2.hide();
+        covers.show();
+        covers.mouseover(fin).mouseout(fout);
+        return this;
+    };
+    chart.hoverColumn = function (fin, fout) {
+        covers.hide();
+        covers2.show();
+        fout = fout || function () {};
+        covers2.mouseover(fin).mouseout(fout);
+        return this;
+    };
+    chart.click = function (f) {
+        covers2.hide();
+        covers.show();
+        covers.click(f);
+        return this;
+    };
+    chart.each = function (f) {
+        if (!Raphael.is(f, "function")) {
+            return this;
+        }
+        for (var i = covers.length; i--;) {
+            f.call(covers[i]);
+        }
+        return this;
+    };
+    chart.eachColumn = function (f) {
+        if (!Raphael.is(f, "function")) {
+            return this;
+        }
+        for (var i = covers2.length; i--;) {
+            f.call(covers2[i]);
+        }
+        return this;
+    };
+    chart.clickColumn = function (f) {
+        covers.hide();
+        covers2.show();
+        covers2.click(f);
+        return this;
+    };
+    chart.push(bars, covers, covers2);
+    chart.bars = bars;
+    chart.covers = covers;
+    return chart;
+};
+Raphael.fn.g.hbarchart = function (x, y, width, height, values, opts) {
+    opts = opts || {};
+    var type = {round: "round", sharp: "sharp", soft: "soft"}[opts.type] || "square",
+        gutter = parseFloat(opts.gutter || "20%"),
+        chart = this.set(),
+        bars = this.set(),
+        covers = this.set(),
+        covers2 = this.set(),
+        total = Math.max.apply(Math, values),
+        stacktotal = [],
+        paper = this,
+        multi = 0,
+        colors = opts.colors || this.g.colors,
+        len = values.length;
+    if (this.raphael.is(values[0], "array")) {
+        total = [];
+        multi = len;
+        len = 0;
+        for (var i = values.length; i--;) {
+            bars.push(this.set());
+            total.push(Math.max.apply(Math, values[i]));
+            len = Math.max(len, values[i].length);
+        }
+        if (opts.stacked) {
+            for (var i = len; i--;) {
+                var tot = 0;
+                for (var j = values.length; j--;) {
+                    tot +=+ values[j][i] || 0;
+                }
+                stacktotal.push(tot);
+            }
+        }
+        for (var i = values.length; i--;) {
+            if (values[i].length < len) {
+                for (var j = len; j--;) {
+                    values[i].push(0);
+                }
+            }
+        }
+        total = Math.max.apply(Math, opts.stacked ? stacktotal : total);
+    }
+    
+    total = (opts.to) || total;
+    var barheight = Math.floor(height / (len * (100 + gutter) + gutter) * 100),
+        bargutter = Math.floor(barheight * gutter / 100),
+        stack = [],
+        Y = y + bargutter,
+        X = (width - 1) / total;
+    !opts.stacked && (barheight /= multi || 1);
+    for (var i = 0; i < len; i++) {
+        stack = [];
+        for (var j = 0; j < (multi || 1); j++) {
+            var val = multi ? values[j][i] : values[i],
+                bar = this.g.finger(x, Y + barheight / 2, Math.round(val * X), barheight - 1, false, type).attr({stroke: "none", fill: colors[multi ? j : i]});
+            if (multi) {
+                bars[j].push(bar);
+            } else {
+                bars.push(bar);
+            }
+            bar.x = x + Math.round(val * X);
+            bar.y = Y + barheight / 2;
+            bar.w = Math.round(val * X);
+            bar.h = barheight;
+            bar.value = +val;
+            if (!opts.stacked) {
+                Y += barheight;
+            } else {
+                stack.push(bar);
+            }
+        }
+        if (opts.stacked) {
+            var cvr = this.rect(x, stack[0].y - stack[0].h / 2, width, barheight).attr(this.g.shim);
+            covers2.push(cvr);
+            cvr.bars = this.set();
+            var size = 0;
+            for (var s = stack.length; s--;) {
+                stack[s].toFront();
+            }
+            for (var s = 0, ss = stack.length; s < ss; s++) {
+                var bar = stack[s],
+                    cover,
+                    val = Math.round((size + bar.value) * X),
+                    path = this.g.finger(x, bar.y, val, barheight - 1, false, type, 1);
+                cvr.bars.push(bar);
+                size && bar.attr({path: path});
+                bar.w = val;
+                bar.x = x + val;
+                covers.push(cover = this.rect(x + size * X, bar.y - bar.h / 2, bar.value * X, barheight).attr(this.g.shim));
+                cover.bar = bar;
+                size += bar.value;
+            }
+            Y += barheight;
+        }
+        Y += bargutter;
+    }
+    covers2.toFront();
+    Y = y + bargutter;
+    if (!opts.stacked) {
+        for (var i = 0; i < len; i++) {
+            for (var j = 0; j < (multi || 1); j++) {
+                var cover = this.rect(x, Y, width, barheight).attr(this.g.shim);
+                covers.push(cover);
+                cover.bar = multi ? bars[j][i] : bars[i];
+                cover.value = cover.bar.value;
+                Y += barheight;
+            }
+            Y += bargutter;
+        }
+    }
+    chart.label = function (labels, isRight) {
+        labels = labels || [];
+        this.labels = paper.set();
+        for (var i = 0; i < len; i++) {
+            for (var j = 0; j < multi; j++) {
+                var  label = paper.g.labelise(multi ? labels[j] && labels[j][i] : labels[i], multi ? values[j][i] : values[i], total);
+                var X = isRight ? bars[i * (multi || 1) + j].x - barheight / 2 + 3 : x + 5,
+                    A = isRight ? "end" : "start",
+                    L;
+                this.labels.push(L = paper.g.text(X, bars[i * (multi || 1) + j].y, label).attr({"text-anchor": A}).insertBefore(covers[0]));
+                if (L.getBBox().x < x + 5) {
+                    L.attr({x: x + 5, "text-anchor": "start"});
+                } else {
+                    bars[i * (multi || 1) + j].label = L;
+                }
+            }
+        }
+        return this;
+    };
+    chart.hover = function (fin, fout) {
+        covers2.hide();
+        covers.show();
+        fout = fout || function () {};
+        covers.mouseover(fin).mouseout(fout);
+        return this;
+    };
+    chart.hoverColumn = function (fin, fout) {
+        covers.hide();
+        covers2.show();
+        fout = fout || function () {};
+        covers2.mouseover(fin).mouseout(fout);
+        return this;
+    };
+    chart.each = function (f) {
+        if (!Raphael.is(f, "function")) {
+            return this;
+        }
+        for (var i = covers.length; i--;) {
+            f.call(covers[i]);
+        }
+        return this;
+    };
+    chart.eachColumn = function (f) {
+        if (!Raphael.is(f, "function")) {
+            return this;
+        }
+        for (var i = covers2.length; i--;) {
+            f.call(covers2[i]);
+        }
+        return this;
+    };
+    chart.click = function (f) {
+        covers2.hide();
+        covers.show();
+        covers.click(f);
+        return this;
+    };
+    chart.clickColumn = function (f) {
+        covers.hide();
+        covers2.show();
+        covers2.click(f);
+        return this;
+    };
+    chart.push(bars, covers, covers2);
+    chart.bars = bars;
+    chart.covers = covers;
+    return chart;
+};
+/*!
+ * g.Raphael 0.4.1 - Charting library, based on Raphaël
+ *
+ * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
+ * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
+ */
+Raphael.fn.g.dotchart = function (x, y, width, height, valuesx, valuesy, size, opts) {
+    function drawAxis(ax) {
+        +ax[0] && (ax[0] = paper.g.axis(x + gutter, y + gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 2, opts.axisxlabels || null, opts.axisxtype || "t"));
+        +ax[1] && (ax[1] = paper.g.axis(x + width - gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 3, opts.axisylabels || null, opts.axisytype || "t"));
+        +ax[2] && (ax[2] = paper.g.axis(x + gutter, y + height - gutter + maxR, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 0, opts.axisxlabels || null, opts.axisxtype || "t"));
+        +ax[3] && (ax[3] = paper.g.axis(x + gutter - maxR, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 1, opts.axisylabels || null, opts.axisytype || "t"));
+    }
+    opts = opts || {};
+    var xdim = this.g.snapEnds(Math.min.apply(Math, valuesx), Math.max.apply(Math, valuesx), valuesx.length - 1),
+        minx = xdim.from,
+        maxx = xdim.to,
+        gutter = opts.gutter || 10,
+        ydim = this.g.snapEnds(Math.min.apply(Math, valuesy), Math.max.apply(Math, valuesy), valuesy.length - 1),
+        miny = ydim.from,
+        maxy = ydim.to,
+        len = Math.max(valuesx.length, valuesy.length, size.length),
+        symbol = this.g.markers[opts.symbol] || "disc",
+        res = this.set(),
+        series = this.set(),
+        max = opts.max || 100,
+        top = Math.max.apply(Math, size),
+        R = [],
+        paper = this,
+        k = Math.sqrt(top / Math.PI) * 2 / max;
+
+    for (var i = 0; i < len; i++) {
+        R[i] = Math.min(Math.sqrt(size[i] / Math.PI) * 2 / k, max);
+    }
+    gutter = Math.max.apply(Math, R.concat(gutter));
+    var axis = this.set(),
+        maxR = Math.max.apply(Math, R);
+    if (opts.axis) {
+        var ax = (opts.axis + "").split(/[,\s]+/);
+        drawAxis(ax);
+        var g = [], b = [];
+        for (var i = 0, ii = ax.length; i < ii; i++) {
+            var bb = ax[i].all ? ax[i].all.getBBox()[["height", "width"][i % 2]] : 0;
+            g[i] = bb + gutter;
+            b[i] = bb;
+        }
+        gutter = Math.max.apply(Math, g.concat(gutter));
+        for (var i = 0, ii = ax.length; i < ii; i++) if (ax[i].all) {
+            ax[i].remove();
+            ax[i] = 1;
+        }
+        drawAxis(ax);
+        for (var i = 0, ii = ax.length; i < ii; i++) if (ax[i].all) {
+            axis.push(ax[i].all);
+        }
+        res.axis = axis;
+    }
+    var kx = (width - gutter * 2) / ((maxx - minx) || 1),
+        ky = (height - gutter * 2) / ((maxy - miny) || 1);
+    for (var i = 0, ii = valuesy.length; i < ii; i++) {
+        var sym = this.raphael.is(symbol, "array") ? symbol[i] : symbol,
+            X = x + gutter + (valuesx[i] - minx) * kx,
+            Y = y + height - gutter - (valuesy[i] - miny) * ky;
+        sym && R[i] && series.push(this.g[sym](X, Y, R[i]).attr({fill: opts.heat ? this.g.colorValue(R[i], maxR) : Raphael.fn.g.colors[0], "fill-opacity": opts.opacity ? R[i] / max : 1, stroke: "none"}));
+    }
+    var covers = this.set();
+    for (var i = 0, ii = valuesy.length; i < ii; i++) {
+        var X = x + gutter + (valuesx[i] - minx) * kx,
+            Y = y + height - gutter - (valuesy[i] - miny) * ky;
+        covers.push(this.circle(X, Y, maxR).attr(this.g.shim));
+        opts.href && opts.href[i] && covers[i].attr({href: opts.href[i]});
+        covers[i].r = +R[i].toFixed(3);
+        covers[i].x = +X.toFixed(3);
+        covers[i].y = +Y.toFixed(3);
+        covers[i].X = valuesx[i];
+        covers[i].Y = valuesy[i];
+        covers[i].value = size[i] || 0;
+        covers[i].dot = series[i];
+    }
+    res.covers = covers;
+    res.series = series;
+    res.push(series, axis, covers);
+    res.hover = function (fin, fout) {
+        covers.mouseover(fin).mouseout(fout);
+        return this;
+    };
+    res.click = function (f) {
+        covers.click(f);
+        return this;
+    };
+    res.each = function (f) {
+        if (!Raphael.is(f, "function")) {
+            return this;
+        }
+        for (var i = covers.length; i--;) {
+            f.call(covers[i]);
+        }
+        return this;
+    };
+    res.href = function (map) {
+        var cover;
+        for (var i = covers.length; i--;) {
+            cover = covers[i];
+            if (cover.X == map.x && cover.Y == map.y && cover.value == map.value) {
+                cover.attr({href: map.href});
+            }
+        }
+    };
+    return res;
+};
+/*!
+ * g.Raphael 0.4.2 - Charting library, based on Raphaël
+ *
+ * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
+ * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
+ */
+Raphael.fn.g.linechart = function (x, y, width, height, valuesx, valuesy, opts) {
+    function shrink(values, dim) {
+        var k = values.length / dim,
+            j = 0,
+            l = k,
+            sum = 0,
+            res = [];
+        while (j < values.length) {
+            l--;
+            if (l < 0) {
+                sum += values[j] * (1 + l);
+                res.push(sum / k);
+                sum = values[j++] * -l;
+                l += k;
+            } else {
+                sum += values[j++];
+            }
+        }
+        return res;
+    }
+    function getAnchors(p1x, p1y, p2x, p2y, p3x, p3y) {
+        var l1 = (p2x - p1x) / 2,
+            l2 = (p3x - p2x) / 2,
+            a = Math.atan((p2x - p1x) / Math.abs(p2y - p1y)),
+            b = Math.atan((p3x - p2x) / Math.abs(p2y - p3y));
+        a = p1y < p2y ? Math.PI - a : a;
+        b = p3y < p2y ? Math.PI - b : b;
+        var alpha = Math.PI / 2 - ((a + b) % (Math.PI * 2)) / 2,
+            dx1 = l1 * Math.sin(alpha + a),
+            dy1 = l1 * Math.cos(alpha + a),
+            dx2 = l2 * Math.sin(alpha + b),
+            dy2 = l2 * Math.cos(alpha + b);
+        return {
+            x1: p2x - dx1,
+            y1: p2y + dy1,
+            x2: p2x + dx2,
+            y2: p2y + dy2
+        };
+    }
+    opts = opts || {};
+    if (!this.raphael.is(valuesx[0], "array")) {
+        valuesx = [valuesx];
+    }
+    if (!this.raphael.is(valuesy[0], "array")) {
+        valuesy = [valuesy];
+    }
+    var gutter = opts.gutter || 10,
+        len = Math.max(valuesx[0].length, valuesy[0].length),
+        symbol = opts.symbol || "",
+        colors = opts.colors || Raphael.fn.g.colors,
+        that = this,
+        columns = null,
+        dots = null,
+        chart = this.set(),
+        path = [];
+
+    for (var i = 0, ii = valuesy.length; i < ii; i++) {
+        len = Math.max(len, valuesy[i].length);
+    }
+    var shades = this.set();
+    for (i = 0, ii = valuesy.length; i < ii; i++) {
+        if (opts.shade) {
+            shades.push(this.path().attr({stroke: "none", fill: colors[i], opacity: opts.nostroke ? 1 : .3}));
+        }
+        if (valuesy[i].length > width - 2 * gutter) {
+            valuesy[i] = shrink(valuesy[i], width - 2 * gutter);
+            len = width - 2 * gutter;
+        }
+        if (valuesx[i] && valuesx[i].length > width - 2 * gutter) {
+            valuesx[i] = shrink(valuesx[i], width - 2 * gutter);
+        }
+    }
+    var allx = Array.prototype.concat.apply([], valuesx),
+        ally = Array.prototype.concat.apply([], valuesy),
+        xdim = this.g.snapEnds(Math.min.apply(Math, allx), Math.max.apply(Math, allx), valuesx[0].length - 1);
+        if(opts.clip) {
+            var minx = opts.minx || xdim.from,
+                maxx = opts.maxx || xdim.to,
+                ydim = this.g.snapEnds(Math.min.apply(Math, ally), Math.max.apply(Math, ally), valuesy[0].length - 1),
+                miny = opts.miny || ydim.from,
+                maxy = opts.maxy || ydim.to;
+        } else {
+            var minx = opts.minx && Math.min(opts.minx, xdim.from) || xdim.from,
+                maxx = opts.maxx && Math.max(opts.maxx, xdimt.to) || xdim.to,
+                ydim = this.g.snapEnds(Math.min.apply(Math, ally), Math.max.apply(Math, ally), valuesy[0].length - 1),
+                miny = opts.miny && Math.min(opts.miny, ydim.from) || ydim.from,
+                maxy = opts.maxy && Math.max(opts.maxy, ydim.to) || ydim.to;
+        }
+        kx = (width - gutter * 2) / ((maxx - minx) || 1),
+        ky = (height - gutter * 2) / ((maxy - miny) || 1);
+
+    var lines = this.set(),
+        symbols = this.set(),
+        line;
+    for (i = 0, ii = valuesy.length; i < ii; i++) {
+        if (!opts.nostroke) {
+            lines.push(line = this.path().attr({
+                stroke: colors[i],
+                "stroke-width": opts.width || 2,
+                "stroke-linejoin": "round",
+                "stroke-linecap": "round",
+                "stroke-dasharray": opts.dash || ""
+            }));
+        }
+        var sym = this.raphael.is(symbol, "array") ? symbol[i] : symbol,
+            symset = this.set();
+        path = [];
+        for (var j = 0, jj = valuesy[i].length; j < jj; j++) {
+            var X = x + gutter + ((valuesx[i] || valuesx[0])[j] - minx) * kx,
+                Y = y + height - gutter - (valuesy[i][j] - miny) * ky;
+            (Raphael.is(sym, "array") ? sym[j] : sym) && symset.push(this.g[Raphael.fn.g.markers[this.raphael.is(sym, "array") ? sym[j] : sym]](X, Y, (opts.width || 2) * 3).attr({fill: colors[i], stroke: "none"}));
+            if (opts.smooth) {
+                if (j && j != jj - 1) {
+                    var X0 = x + gutter + ((valuesx[i] || valuesx[0])[j - 1] - minx) * kx,
+                        Y0 = y + height - gutter - (valuesy[i][j - 1] - miny) * ky,
+                        X2 = x + gutter + ((valuesx[i] || valuesx[0])[j + 1] - minx) * kx,
+                        Y2 = y + height - gutter - (valuesy[i][j + 1] - miny) * ky;
+                    var a = getAnchors(X0, Y0, X, Y, X2, Y2);
+                    path = path.concat([a.x1, a.y1, X, Y, a.x2, a.y2]);
+                }
+                if (!j) {
+                    path = ["M", X, Y, "C", X, Y];
+                }
+            } else {
+                path = path.concat([j ? "L" : "M", X, Y]);
+            }
+        }
+        if (opts.smooth) {
+            path = path.concat([X, Y, X, Y]);
+        }
+        symbols.push(symset);
+        if (opts.shade) {
+            shades[i].attr({path: path.concat(["L", X, y + height - gutter, "L",  x + gutter + ((valuesx[i] || valuesx[0])[0] - minx) * kx, y + height - gutter, "z"]).join(",")});
+        }
+        !opts.nostroke && line.attr({path: path.join(","), 'clip-rect': [x + gutter, y + gutter, width - 2 * gutter, height - 2 * gutter].join(",")});
+    }
+
+    function createColumns(f) {
+        // unite Xs together
+        var Xs = [];
+        for (var i = 0, ii = valuesx.length; i < ii; i++) {
+            Xs = Xs.concat(valuesx[i]);
+        }
+        Xs.sort(function(a,b) { return a - b; });
+        // remove duplicates
+        var Xs2 = [],
+            xs = [];
+        for (i = 0, ii = Xs.length; i < ii; i++) {
+            Xs[i] != Xs[i - 1] && Xs2.push(Xs[i]) && xs.push(x + gutter + (Xs[i] - minx) * kx);
+        }
+        Xs = Xs2;
+        ii = Xs.length;
+        var cvrs = f || that.set();
+        for (i = 0; i < ii; i++) {
+            var X = xs[i] - (xs[i] - (xs[i - 1] || x)) / 2,
+                w = ((xs[i + 1] || x + width) - xs[i]) / 2 + (xs[i] - (xs[i - 1] || x)) / 2,
+                C;
+            f ? (C = {}) : cvrs.push(C = that.rect(X - 1, y, Math.max(w + 1, 1), height).attr({stroke: "none", fill: "#000", opacity: 0}));
+            C.values = [];
+            C.symbols = that.set();
+            C.y = [];
+            C.x = xs[i];
+            C.axis = Xs[i];
+            for (var j = 0, jj = valuesy.length; j < jj; j++) {
+                Xs2 = valuesx[j] || valuesx[0];
+                for (var k = 0, kk = Xs2.length; k < kk; k++) {
+                    if (Xs2[k] == Xs[i]) {
+                        C.values.push(valuesy[j][k]);
+                        C.y.push(y + height - gutter - (valuesy[j][k] - miny) * ky);
+                        C.symbols.push(chart.symbols[j][k]);
+                    }
+                }
+            }
+            f && f.call(C);
+        }
+        !f && (columns = cvrs);
+    }
+    function createDots(f) {
+        var cvrs = f || that.set(),
+            C;
+        for (var i = 0, ii = valuesy.length; i < ii; i++) {
+            for (var j = 0, jj = valuesy[i].length; j < jj; j++) {
+                var X = x + gutter + ((valuesx[i] || valuesx[0])[j] - minx) * kx,
+                    nearX = x + gutter + ((valuesx[i] || valuesx[0])[j ? j - 1 : 1] - minx) * kx,
+                    Y = y + height - gutter - (valuesy[i][j] - miny) * ky;
+                f ? (C = {}) : cvrs.push(C = that.circle(X, Y, Math.abs(nearX - X) / 2).attr({stroke: "none", fill: "#000", opacity: 0}));
+                C.x = X;
+                C.y = Y;
+                C.value = valuesy[i][j];
+                C.line = chart.lines[i];
+                C.shade = chart.shades[i];
+                C.symbol = chart.symbols[i][j];
+                C.symbols = chart.symbols[i];
+                C.axis = (valuesx[i] || valuesx[0])[j];
+                f && f.call(C);
+            }
+        }
+        !f && (dots = cvrs);
+    }
+
+    var axis = this.set();
+    if (opts.axis) {
+        var ax = (opts.axis + "").split(/[,\s]+/);
+        +ax[0] && axis.push(this.g.axis(x + gutter, y + gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 2, opts.axisxlabels || null, opts.axisxtype || "t"));
+        +ax[1] && axis.push(this.g.axis(x + width - gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 3, opts.axisylabels || null, opts.axisytype || "t"));
+        +ax[2] && axis.push(this.g.axis(x + gutter, y + height - gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 0, opts.axisxlabels || null, opts.axisxtype || "t"));
+        +ax[3] && axis.push(this.g.axis(x + gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 1, opts.axisylabels || null, opts.axisytype || "t"));
+    }
+
+    chart.push(lines, shades, symbols, axis, columns, dots);
+    chart.lines = lines;
+    chart.shades = shades;
+    chart.symbols = symbols;
+    chart.axis = axis;
+    chart.hoverColumn = function (fin, fout) {
+        !columns && createColumns();
+        columns.mouseover(fin).mouseout(fout);
+        return this;
+    };
+    chart.clickColumn = function (f) {
+        !columns && createColumns();
+        columns.click(f);
+        return this;
+    };
+    chart.hrefColumn = function (cols) {
+        var hrefs = that.raphael.is(arguments[0], "array") ? arguments[0] : arguments;
+        if (!(arguments.length - 1) && typeof cols == "object") {
+            for (var x in cols) {
+                for (var i = 0, ii = columns.length; i < ii; i++) if (columns[i].axis == x) {
+                    columns[i].attr("href", cols[x]);
+                }
+            }
+        }
+        !columns && createColumns();
+        for (i = 0, ii = hrefs.length; i < ii; i++) {
+            columns[i] && columns[i].attr("href", hrefs[i]);
+        }
+        return this;
+    };
+    chart.hover = function (fin, fout) {
+        !dots && createDots();
+        dots.mouseover(fin).mouseout(fout);
+        return this;
+    };
+    chart.click = function (f) {
+        !dots && createDots();
+        dots.click(f);
+        return this;
+    };
+    chart.each = function (f) {
+        createDots(f);
+        return this;
+    };
+    chart.eachColumn = function (f) {
+        createColumns(f);
+        return this;
+    };
+    return chart;
+};
+/*!
+ * g.Raphael 0.4.1 - Charting library, based on Raphaël
+ *
+ * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
+ * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
+ */
+Raphael.fn.g.piechart = function (cx, cy, r, values, opts) {
+    opts = opts || {};
+    var paper = this,
+        sectors = [],
+        covers = this.set(),
+        chart = this.set(),
+        series = this.set(),
+        order = [],
+        len = values.length,
+        angle = 0,
+        total = 0,
+        others = 0,
+        cut = 9,
+        defcut = true;
+
+    var sum = 0;
+    for (var i = 0; i < len; i++)
+        sum += values[i];
+    var single = false;
+    var single_index = -1;
+    for (var i = 0; i < len; i++)
+        if (sum == values[i]) {
+            single = true;
+            single_index = i;
+            break;
+        }
+    if (len == 1 || single == true) {
+        for(var i = 0; i < len; i++) {
+            var radius = 0.1;
+            if (i == single_index) {
+                radius = r;
+            }
+            series.push(this.circle(cx, cy, radius).attr({fill: opts.colors && opts.colors[i] || this.g.colors[i], stroke: opts.stroke || "#fff", "stroke-width": opts.strokewidth == null ? 1 : opts.strokewidth}));
+            covers.push(this.circle(cx, cy, radius).attr({href: opts.href ? opts.href[i] : null}).attr(this.g.shim));
+            values[i] = {value: values[i], order: i, valueOf: function () { return this.value; }};
+            series[i].middle = {x: cx, y: cy};
+            series[i].mangle = 180;
+        }
+        total = values[single_index];
+    } else {
+        function sector(cx, cy, r, startAngle, endAngle, fill) {
+            var rad = Math.PI / 180,
+                x1 = cx + r * Math.cos(-startAngle * rad),
+                x2 = cx + r * Math.cos(-endAngle * rad),
+                xm = cx + r / 2 * Math.cos(-(startAngle + (endAngle - startAngle) / 2) * rad),
+                y1 = cy + r * Math.sin(-startAngle * rad),
+                y2 = cy + r * Math.sin(-endAngle * rad),
+                ym = cy + r / 2 * Math.sin(-(startAngle + (endAngle - startAngle) / 2) * rad),
+                res = ["M", cx, cy, "L", x1, y1, "A", r, r, 0, +(Math.abs(endAngle - startAngle) > 180), 1, x2, y2, "z"];
+            res.middle = {x: xm, y: ym};
+            return res;
+        }
+        for (var i = 0; i < len; i++) {
+            total += values[i];
+            values[i] = {value: values[i], order: i, valueOf: function () { return this.value; }};
+        }
+        values.sort(function (a, b) {
+            return b.value - a.value;
+        });
+        for (i = 0; i < len; i++) {
+            if (defcut && values[i] * 360 / total <= 1.5) {
+                cut = i;
+                defcut = false;
+            }
+            if (i > cut) {
+                defcut = false;
+                values[cut].value += values[i];
+                values[cut].others = true;
+                others = values[cut].value;
+            }
+        }
+        len = Math.min(cut + 1, values.length);
+        others && values.splice(len) && (values[cut].others = true);
+        for (i = 0; i < len; i++) {
+            var valueOrder = values[i].order;
+            var mangle = angle - 360 * values[i] / total / 2;
+            if (!i) {
+                angle = 90 - mangle;
+                mangle = angle - 360 * values[i] / total / 2;
+            }
+            if (opts.init) {
+                var ipath = sector(cx, cy, 1, angle, angle - 360 * values[i] / total).join(",");
+            }
+            var path = sector(cx, cy, r, angle, angle -= 360 * values[i] / total);
+            var p = this.path(opts.init ? ipath : path).attr({fill: opts.colors && opts.colors[valueOrder] || this.g.colors[valueOrder] || "#666", stroke: opts.stroke || "#fff", "stroke-width": (opts.strokewidth == null ? 1 : opts.strokewidth), "stroke-linejoin": "round"});
+            p.value = values[i];
+            p.middle = path.middle;
+            p.mangle = mangle;
+            sectors.push(p);
+            series.push(p);
+            opts.init && p.animate({path: path.join(",")}, (+opts.init - 1) || 1000, ">");
+        }
+        for (i = 0; i < len; i++) {
+            p = paper.path(sectors[i].attr("path")).attr(this.g.shim);
+            var valueOrder = values[i].order;
+            opts.href && opts.href[valueOrder] && p.attr({href: opts.href[valueOrder]});
+            //p.attr = function () {}; // this breaks translate!
+            covers.push(p);
+        }
+    }
+
+    chart.hover = function (fin, fout) {
+        fout = fout || function () {};
+        var that = this;
+        for (var i = 0; i < len; i++) {
+            (function (sector, cover, j) {
+                var o = {
+                    sector: sector,
+                    cover: cover,
+                    cx: cx,
+                    cy: cy,
+                    mx: sector.middle.x,
+                    my: sector.middle.y,
+                    mangle: sector.mangle,
+                    r: r,
+                    value: values[j],
+                    total: total,
+                    label: that.labels && that.labels[j]
+                };
+                cover.mouseover(function () {
+                    fin.call(o);
+                }).mouseout(function () {
+                    fout.call(o);
+                });
+            })(series[i], covers[i], i);
+        }
+        return this;
+    };
+    // x: where label could be put
+    // y: where label could be put
+    // value: value to show
+    // total: total number to count %
+    chart.each = function (f) {
+        var that = this;
+        for (var i = 0; i < len; i++) {
+            (function (sector, cover, j) {
+                var o = {
+                    sector: sector,
+                    cover: cover,
+                    cx: cx,
+                    cy: cy,
+                    x: sector.middle.x,
+                    y: sector.middle.y,
+                    mangle: sector.mangle,
+                    r: r,
+                    value: values[j],
+                    total: total,
+                    label: that.labels && that.labels[j]
+                };
+                f.call(o);
+            })(series[i], covers[i], i);
+        }
+        return this;
+    };
+    chart.click = function (f) {
+        var that = this;
+        for (var i = 0; i < len; i++) {
+            (function (sector, cover, j) {
+                var o = {
+                    sector: sector,
+                    cover: cover,
+                    cx: cx,
+                    cy: cy,
+                    mx: sector.middle.x,
+                    my: sector.middle.y,
+                    mangle: sector.mangle,
+                    r: r,
+                    value: values[j],
+                    total: total,
+                    label: that.labels && that.labels[j]
+                };
+                cover.click(function () { f.call(o); });
+            })(series[i], covers[i], i);
+        }
+        return this;
+    };
+    chart.inject = function (element) {
+        element.insertBefore(covers[0]);
+    };
+    var legend = function (labels, otherslabel, mark, dir) {
+        var x = cx + r + r / 5,
+            y = cy,
+            h = y + 10;
+        labels = labels || [];
+        dir = (dir && dir.toLowerCase && dir.toLowerCase()) || "east";
+        mark = paper.g.markers[mark && mark.toLowerCase()] || "disc";
+        chart.labels = paper.set();
+        for (var i = 0; i < len; i++) {
+            var clr = series[i].attr("fill"),
+                j = values[i].order,
+                txt;
+            values[i].others && (labels[j] = otherslabel || "Others");
+            labels[j] = paper.g.labelise(labels[j], values[i], total);
+            chart.labels.push(paper.set());
+            chart.labels[i].push(paper.g[mark](x + 5, h, 5).attr({fill: clr, stroke: "none"}));
+            chart.labels[i].push(txt = paper.text(x + 20, h, labels[j] || values[j]).attr(paper.g.txtattr).attr({fill: opts.legendcolor || "#000", "text-anchor": "start"}));
+            covers[i].label = chart.labels[i];
+            h += txt.getBBox().height * 1.2;
+        }
+        var bb = chart.labels.getBBox(),
+            tr = {
+                east: [0, -bb.height / 2],
+                west: [-bb.width - 2 * r - 20, -bb.height / 2],
+                north: [-r - bb.width / 2, -r - bb.height - 10],
+                south: [-r - bb.width / 2, r + 10]
+            }[dir];
+        chart.labels.translate.apply(chart.labels, tr);
+        chart.push(chart.labels);
+    };
+    if (opts.legend) {
+        legend(opts.legend, opts.legendothers, opts.legendmark, opts.legendpos);
+    }
+    chart.push(series, covers);
+    chart.series = series;
+    chart.covers = covers;
+    
+    var w = paper.width,
+        h = paper.height,
+        bb = chart.getBBox(),
+        tr = [(w - bb.width)/2 - bb.x, (h - bb.height)/2 - bb.y];
+    cx += tr[0];
+    cy += tr[1];
+    chart.translate.apply(chart, tr);
+    return chart;
+};
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/i18n/i18n.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/i18n/i18n.js
new file mode 100644
index 0000000..de0fc51
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/i18n/i18n.js
@@ -0,0 +1,93 @@
+(function() {
+	/**
+	 * provides text formatting and i18n key storage features<br>
+	 * implements most of the Sun Java MessageFormat functionality.
+	 * @see <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/text/MessageFormat.html" target="sun">Sun's Documentation</a>
+	 */
+
+	var keys = {};
+
+	var format = function(message, args) {
+		var substitute = function() {
+			var format = arguments[1].split(',');
+			var substr = escape(args[format.shift()]);
+			if(format.length === 0) {
+				return substr; // simple substitution eg {0}
+			}
+			switch(format.shift()) {
+				case "number" : return (new Number(substr)).toLocaleString();
+				case "date" : return (new Date(+substr)).toLocaleDateString(); // date and time require milliseconds since epoch
+				case "time" : return (new Date(+substr)).toLocaleTimeString(); //  eg i18n.text("Key", +(new Date())); for current time
+			}
+			var styles = format.join("").split("|").map(function(style) {
+				return style.match(/(-?[\.\d]+)(#|<)([^{}]*)/);
+			});
+			var match = styles[0][3];
+			for(var i=0; i<styles.length; i++) {
+				if((styles[i][2] === "#" && (+styles[i][1]) === (+substr)) ||
+						(styles[i][2] === "<" && ((+styles[i][1]) < (+substr)))) {
+					match = styles[i][3];
+				}
+			}
+			return match;
+		};
+
+		return message && message.replace(/'(')|'([^']+)'|([^{']+)|([^']+)/g, function(x, sq, qs, ss, sub) {
+			do {} while(sub && (sub !== (sub = (sub.replace(/\{([^{}]+)\}/, substitute)))));
+			return sq || qs || ss || unescape(sub);
+		});
+	};
+
+	this.i18n = {
+
+		setKeys: function(strings) {
+			for(var key in strings) {
+				keys[key] = strings[key];
+			}
+		},
+
+		text: function() {
+			var args = Array.prototype.slice.call(arguments),
+				key = keys[args.shift()];
+			if(args.length === 0) {
+				return key;
+			}
+			return format(key, args);
+		},
+
+		complex: function() {
+			var args = Array.prototype.slice.call(arguments),
+				key = keys[args.shift()],
+				ret = [],
+				replacer = function(x, pt, sub) { ret.push(pt || args[+sub]); return ""; };
+			do {} while(key && key !== (key = key.replace(/([^{]+)|\{(\d+)\}/, replacer )));
+			return ret;
+		}
+
+	};
+
+})();
+
+(function() {
+	var nav = window.navigator;
+	var userLang = ( nav.languages && nav.languages[0] ) || nav.language || nav.userLanguage;
+	var scripts = document.getElementsByTagName('script');
+	var data = scripts[ scripts.length - 1].dataset;
+	if( ! data["langs"] ) {
+		return;
+	}
+	var langs = data["langs"].split(/\s*,\s*/);
+	var script0 = scripts[0];
+	function install( lang ) {
+		var s = document.createElement("script");
+		s.src = data["basedir"] + "/" + lang + '_strings.js';
+		s.async = false;
+		script0.parentNode.appendChild(s);
+		script0 = s;
+	}
+
+	install( langs.shift() ); // always install primary language
+	userLang && langs
+		.filter( function( lang ) { return userLang.indexOf( lang ) === 0; } )
+		.forEach( install );
+}());
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/joey/joey.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/joey/joey.js
new file mode 100644
index 0000000..2c9a0f5
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/joey/joey.js
@@ -0,0 +1,57 @@
+(function() {
+
+	var joey = this.joey = function joey(elementDef, parentNode) {
+		return createNode( elementDef, parentNode, parentNode ? parentNode.ownerDocument : this.document );
+	};
+
+	var shortcuts = joey.shortcuts = {
+		"text" : "textContent",
+		"cls" : "className"
+	};
+
+	var plugins = joey.plugins = [
+		function( obj, context ) {
+			if( typeof obj === 'string' ) {
+				return context.createTextNode( obj );
+			}
+		},
+		function( obj, context ) {
+			if( "tag" in obj ) {
+				var el = context.createElement( obj.tag );
+				for( var attr in obj ) {
+					addAttr( el, attr, obj[ attr ], context );
+				}
+				return el;
+			}
+		}
+	];
+
+	function addAttr( el, attr, value, context ) {
+		attr = shortcuts[attr] || attr;
+		if( attr === 'children' ) {
+			for( var i = 0; i < value.length; i++) {
+				createNode( value[i], el, context );
+			}
+		} else if( attr === 'style' || attr === 'dataset' ) {
+			for( var prop in value ) {
+				el[ attr ][ prop ] = value[ prop ];
+			}
+		} else if( attr.indexOf("on") === 0 ) {
+			el.addEventListener( attr.substr(2), value, false );
+		} else if( value !== undefined ) {
+			el[ attr ] = value;
+		}
+	}
+
+	function createNode( obj, parent, context ) {
+		var el;
+		if( obj != null ) {
+			plugins.some( function( plug ) {
+				return ( el = plug( obj, context ) );
+			});
+			parent && parent.appendChild( el );
+			return el;
+		}
+	}
+
+}());
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/jquery/jquery.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/jquery/jquery.js
new file mode 100644
index 0000000..3450ce4
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/jquery/jquery.js
@@ -0,0 +1,8936 @@
+/*!
+ * jQuery JavaScript Library v1.6.1
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu May 12 15:04:36 2011 -0400
+ */
+(function( window, undefined ) {
+
+// Use the correct document accordingly with window argument (sandbox)
+var document = window.document,
+	navigator = window.navigator,
+	location = window.location;
+var jQuery = (function() {
+
+// Define a local copy of jQuery
+var jQuery = function( selector, context ) {
+		// The jQuery object is actually just the init constructor 'enhanced'
+		return new jQuery.fn.init( selector, context, rootjQuery );
+	},
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$,
+
+	// A central reference to the root jQuery(document)
+	rootjQuery,
+
+	// A simple way to check for HTML strings or ID strings
+	// (both of which we optimize for)
+	quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+
+	// Check if a string has a non-whitespace character in it
+	rnotwhite = /\S/,
+
+	// Used for trimming whitespace
+	trimLeft = /^\s+/,
+	trimRight = /\s+$/,
+
+	// Check for digits
+	rdigit = /\d/,
+
+	// Match a standalone tag
+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+
+	// JSON RegExp
+	rvalidchars = /^[\],:{}\s]*$/,
+	rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+	rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+
+	// Useragent RegExp
+	rwebkit = /(webkit)[ \/]([\w.]+)/,
+	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
+	rmsie = /(msie) ([\w.]+)/,
+	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
+
+	// Keep a UserAgent string for use with jQuery.browser
+	userAgent = navigator.userAgent,
+
+	// For matching the engine and version of the browser
+	browserMatch,
+
+	// The deferred used on DOM ready
+	readyList,
+
+	// The ready event handler
+	DOMContentLoaded,
+
+	// Save a reference to some core methods
+	toString = Object.prototype.toString,
+	hasOwn = Object.prototype.hasOwnProperty,
+	push = Array.prototype.push,
+	slice = Array.prototype.slice,
+	trim = String.prototype.trim,
+	indexOf = Array.prototype.indexOf,
+
+	// [[Class]] -> type pairs
+	class2type = {};
+
+jQuery.fn = jQuery.prototype = {
+	constructor: jQuery,
+	init: function( selector, context, rootjQuery ) {
+		var match, elem, ret, doc;
+
+		// Handle $(""), $(null), or $(undefined)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Handle $(DOMElement)
+		if ( selector.nodeType ) {
+			this.context = this[0] = selector;
+			this.length = 1;
+			return this;
+		}
+
+		// The body element only exists once, optimize finding it
+		if ( selector === "body" && !context && document.body ) {
+			this.context = document;
+			this[0] = document.body;
+			this.selector = selector;
+			this.length = 1;
+			return this;
+		}
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			// Are we dealing with HTML string or an ID?
+			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = quickExpr.exec( selector );
+			}
+
+			// Verify a match, and that no context was specified for #id
+			if ( match && (match[1] || !context) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[1] ) {
+					context = context instanceof jQuery ? context[0] : context;
+					doc = (context ? context.ownerDocument || context : document);
+
+					// If a single string is passed in and it's a single tag
+					// just do a createElement and skip the rest
+					ret = rsingleTag.exec( selector );
+
+					if ( ret ) {
+						if ( jQuery.isPlainObject( context ) ) {
+							selector = [ document.createElement( ret[1] ) ];
+							jQuery.fn.attr.call( selector, context, true );
+
+						} else {
+							selector = [ doc.createElement( ret[1] ) ];
+						}
+
+					} else {
+						ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
+						selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
+					}
+
+					return jQuery.merge( this, selector );
+
+				// HANDLE: $("#id")
+				} else {
+					elem = document.getElementById( match[2] );
+
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE and Opera return items
+						// by name instead of ID
+						if ( elem.id !== match[2] ) {
+							return rootjQuery.find( selector );
+						}
+
+						// Otherwise, we inject the element directly into the jQuery object
+						this.length = 1;
+						this[0] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return (context || rootjQuery).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return rootjQuery.ready( selector );
+		}
+
+		if (selector.selector !== undefined) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	},
+
+	// Start with an empty selector
+	selector: "",
+
+	// The current version of jQuery being used
+	jquery: "1.6.1",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	// The number of elements contained in the matched element set
+	size: function() {
+		return this.length;
+	},
+
+	toArray: function() {
+		return slice.call( this, 0 );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num == null ?
+
+			// Return a 'clean' array
+			this.toArray() :
+
+			// Return just the object
+			( num < 0 ? this[ this.length + num ] : this[ num ] );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems, name, selector ) {
+		// Build a new jQuery matched element set
+		var ret = this.constructor();
+
+		if ( jQuery.isArray( elems ) ) {
+			push.apply( ret, elems );
+
+		} else {
+			jQuery.merge( ret, elems );
+		}
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+
+		ret.context = this.context;
+
+		if ( name === "find" ) {
+			ret.selector = this.selector + (this.selector ? " " : "") + selector;
+		} else if ( name ) {
+			ret.selector = this.selector + "." + name + "(" + selector + ")";
+		}
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	// (You can seed the arguments with an array of args, but this is
+	// only used internally.)
+	each: function( callback, args ) {
+		return jQuery.each( this, callback, args );
+	},
+
+	ready: function( fn ) {
+		// Attach the listeners
+		jQuery.bindReady();
+
+		// Add the callback
+		readyList.done( fn );
+
+		return this;
+	},
+
+	eq: function( i ) {
+		return i === -1 ?
+			this.slice( i ) :
+			this.slice( i, +i + 1 );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ),
+			"slice", slice.call(arguments).join(",") );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map(this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		}));
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor(null);
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: [].sort,
+	splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[0] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+		target = arguments[1] || {};
+		// skip the boolean and the target
+		i = 2;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+		target = {};
+	}
+
+	// extend jQuery itself if only one argument is passed
+	if ( length === i ) {
+		target = this;
+		--i;
+	}
+
+	for ( ; i < length; i++ ) {
+		// Only deal with non-null/undefined values
+		if ( (options = arguments[ i ]) != null ) {
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray(src) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject(src) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend({
+	noConflict: function( deep ) {
+		if ( window.$ === jQuery ) {
+			window.$ = _$;
+		}
+
+		if ( deep && window.jQuery === jQuery ) {
+			window.jQuery = _jQuery;
+		}
+
+		return jQuery;
+	},
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Hold (or release) the ready event
+	holdReady: function( hold ) {
+		if ( hold ) {
+			jQuery.readyWait++;
+		} else {
+			jQuery.ready( true );
+		}
+	},
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+		// Either a released hold or an DOMready/load event and not yet ready
+		if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
+			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+			if ( !document.body ) {
+				return setTimeout( jQuery.ready, 1 );
+			}
+
+			// Remember that the DOM is ready
+			jQuery.isReady = true;
+
+			// If a normal DOM Ready event fired, decrement, and wait if need be
+			if ( wait !== true && --jQuery.readyWait > 0 ) {
+				return;
+			}
+
+			// If there are functions bound, to execute
+			readyList.resolveWith( document, [ jQuery ] );
+
+			// Trigger any bound ready events
+			if ( jQuery.fn.trigger ) {
+				jQuery( document ).trigger( "ready" ).unbind( "ready" );
+			}
+		}
+	},
+
+	bindReady: function() {
+		if ( readyList ) {
+			return;
+		}
+
+		readyList = jQuery._Deferred();
+
+		// Catch cases where $(document).ready() is called after the
+		// browser event has already occurred.
+		if ( document.readyState === "complete" ) {
+			// Handle it asynchronously to allow scripts the opportunity to delay ready
+			return setTimeout( jQuery.ready, 1 );
+		}
+
+		// Mozilla, Opera and webkit nightlies currently support this event
+		if ( document.addEventListener ) {
+			// Use the handy event callback
+			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+
+			// A fallback to window.onload, that will always work
+			window.addEventListener( "load", jQuery.ready, false );
+
+		// If IE event model is used
+		} else if ( document.attachEvent ) {
+			// ensure firing before onload,
+			// maybe late but safe also for iframes
+			document.attachEvent( "onreadystatechange", DOMContentLoaded );
+
+			// A fallback to window.onload, that will always work
+			window.attachEvent( "onload", jQuery.ready );
+
+			// If IE and not a frame
+			// continually check to see if the document is ready
+			var toplevel = false;
+
+			try {
+				toplevel = window.frameElement == null;
+			} catch(e) {}
+
+			if ( document.documentElement.doScroll && toplevel ) {
+				doScrollCheck();
+			}
+		}
+	},
+
+	// See test/unit/core.js for details concerning isFunction.
+	// Since version 1.3, DOM methods and functions like alert
+	// aren't supported. They return false on IE (#2968).
+	isFunction: function( obj ) {
+		return jQuery.type(obj) === "function";
+	},
+
+	isArray: Array.isArray || function( obj ) {
+		return jQuery.type(obj) === "array";
+	},
+
+	// A crude way of determining if an object is a window
+	isWindow: function( obj ) {
+		return obj && typeof obj === "object" && "setInterval" in obj;
+	},
+
+	isNaN: function( obj ) {
+		return obj == null || !rdigit.test( obj ) || isNaN( obj );
+	},
+
+	type: function( obj ) {
+		return obj == null ?
+			String( obj ) :
+			class2type[ toString.call(obj) ] || "object";
+	},
+
+	isPlainObject: function( obj ) {
+		// Must be an Object.
+		// Because of IE, we also have to check the presence of the constructor property.
+		// Make sure that DOM nodes and window objects don't pass through, as well
+		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+			return false;
+		}
+
+		// Not own constructor property must be Object
+		if ( obj.constructor &&
+			!hasOwn.call(obj, "constructor") &&
+			!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+			return false;
+		}
+
+		// Own properties are enumerated firstly, so to speed up,
+		// if last one is own, then all properties are own.
+
+		var key;
+		for ( key in obj ) {}
+
+		return key === undefined || hasOwn.call( obj, key );
+	},
+
+	isEmptyObject: function( obj ) {
+		for ( var name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	error: function( msg ) {
+		throw msg;
+	},
+
+	parseJSON: function( data ) {
+		if ( typeof data !== "string" || !data ) {
+			return null;
+		}
+
+		// Make sure leading/trailing whitespace is removed (IE can't handle it)
+		data = jQuery.trim( data );
+
+		// Attempt to parse using the native JSON parser first
+		if ( window.JSON && window.JSON.parse ) {
+			return window.JSON.parse( data );
+		}
+
+		// Make sure the incoming data is actual JSON
+		// Logic borrowed from http://json.org/json2.js
+		if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+			.replace( rvalidtokens, "]" )
+			.replace( rvalidbraces, "")) ) {
+
+			return (new Function( "return " + data ))();
+
+		}
+		jQuery.error( "Invalid JSON: " + data );
+	},
+
+	// Cross-browser xml parsing
+	// (xml & tmp used internally)
+	parseXML: function( data , xml , tmp ) {
+
+		if ( window.DOMParser ) { // Standard
+			tmp = new DOMParser();
+			xml = tmp.parseFromString( data , "text/xml" );
+		} else { // IE
+			xml = new ActiveXObject( "Microsoft.XMLDOM" );
+			xml.async = "false";
+			xml.loadXML( data );
+		}
+
+		tmp = xml.documentElement;
+
+		if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
+			jQuery.error( "Invalid XML: " + data );
+		}
+
+		return xml;
+	},
+
+	noop: function() {},
+
+	// Evaluates a script in a global context
+	// Workarounds based on findings by Jim Driscoll
+	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+	globalEval: function( data ) {
+		if ( data && rnotwhite.test( data ) ) {
+			// We use execScript on Internet Explorer
+			// We use an anonymous function so that context is window
+			// rather than jQuery in Firefox
+			( window.execScript || function( data ) {
+				window[ "eval" ].call( window, data );
+			} )( data );
+		}
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+	},
+
+	// args is for internal usage only
+	each: function( object, callback, args ) {
+		var name, i = 0,
+			length = object.length,
+			isObj = length === undefined || jQuery.isFunction( object );
+
+		if ( args ) {
+			if ( isObj ) {
+				for ( name in object ) {
+					if ( callback.apply( object[ name ], args ) === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( ; i < length; ) {
+					if ( callback.apply( object[ i++ ], args ) === false ) {
+						break;
+					}
+				}
+			}
+
+		// A special, fast, case for the most common use of each
+		} else {
+			if ( isObj ) {
+				for ( name in object ) {
+					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( ; i < length; ) {
+					if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
+						break;
+					}
+				}
+			}
+		}
+
+		return object;
+	},
+
+	// Use native String.trim function wherever possible
+	trim: trim ?
+		function( text ) {
+			return text == null ?
+				"" :
+				trim.call( text );
+		} :
+
+		// Otherwise use our own trimming functionality
+		function( text ) {
+			return text == null ?
+				"" :
+				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
+		},
+
+	// results is for internal usage only
+	makeArray: function( array, results ) {
+		var ret = results || [];
+
+		if ( array != null ) {
+			// The window, strings (and functions) also have 'length'
+			// The extra typeof function check is to prevent crashes
+			// in Safari 2 (See: #3039)
+			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+			var type = jQuery.type( array );
+
+			if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
+				push.call( ret, array );
+			} else {
+				jQuery.merge( ret, array );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, array ) {
+
+		if ( indexOf ) {
+			return indexOf.call( array, elem );
+		}
+
+		for ( var i = 0, length = array.length; i < length; i++ ) {
+			if ( array[ i ] === elem ) {
+				return i;
+			}
+		}
+
+		return -1;
+	},
+
+	merge: function( first, second ) {
+		var i = first.length,
+			j = 0;
+
+		if ( typeof second.length === "number" ) {
+			for ( var l = second.length; j < l; j++ ) {
+				first[ i++ ] = second[ j ];
+			}
+
+		} else {
+			while ( second[j] !== undefined ) {
+				first[ i++ ] = second[ j++ ];
+			}
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, inv ) {
+		var ret = [], retVal;
+		inv = !!inv;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( var i = 0, length = elems.length; i < length; i++ ) {
+			retVal = !!callback( elems[ i ], i );
+			if ( inv !== retVal ) {
+				ret.push( elems[ i ] );
+			}
+		}
+
+		return ret;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var value, key, ret = [],
+			i = 0,
+			length = elems.length,
+			// jquery objects are treated as arrays
+			isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
+
+		// Go through the array, translating each of the items to their
+		if ( isArray ) {
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( key in elems ) {
+				value = callback( elems[ key ], key, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return ret.concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		if ( typeof context === "string" ) {
+			var tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		var args = slice.call( arguments, 2 ),
+			proxy = function() {
+				return fn.apply( context, args.concat( slice.call( arguments ) ) );
+			};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	// Mutifunctional method to get and set values to a collection
+	// The value/s can be optionally by executed if its a function
+	access: function( elems, key, value, exec, fn, pass ) {
+		var length = elems.length;
+
+		// Setting many attributes
+		if ( typeof key === "object" ) {
+			for ( var k in key ) {
+				jQuery.access( elems, k, key[k], exec, fn, value );
+			}
+			return elems;
+		}
+
+		// Setting one attribute
+		if ( value !== undefined ) {
+			// Optionally, function values get executed if exec is true
+			exec = !pass && exec && jQuery.isFunction(value);
+
+			for ( var i = 0; i < length; i++ ) {
+				fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+			}
+
+			return elems;
+		}
+
+		// Getting an attribute
+		return length ? fn( elems[0], key ) : undefined;
+	},
+
+	now: function() {
+		return (new Date()).getTime();
+	},
+
+	// Use of jQuery.browser is frowned upon.
+	// More details: http://docs.jquery.com/Utilities/jQuery.browser
+	uaMatch: function( ua ) {
+		ua = ua.toLowerCase();
+
+		var match = rwebkit.exec( ua ) ||
+			ropera.exec( ua ) ||
+			rmsie.exec( ua ) ||
+			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
+			[];
+
+		return { browser: match[1] || "", version: match[2] || "0" };
+	},
+
+	sub: function() {
+		function jQuerySub( selector, context ) {
+			return new jQuerySub.fn.init( selector, context );
+		}
+		jQuery.extend( true, jQuerySub, this );
+		jQuerySub.superclass = this;
+		jQuerySub.fn = jQuerySub.prototype = this();
+		jQuerySub.fn.constructor = jQuerySub;
+		jQuerySub.sub = this.sub;
+		jQuerySub.fn.init = function init( selector, context ) {
+			if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+				context = jQuerySub( context );
+			}
+
+			return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+		};
+		jQuerySub.fn.init.prototype = jQuerySub.fn;
+		var rootjQuerySub = jQuerySub(document);
+		return jQuerySub;
+	},
+
+	browser: {}
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+browserMatch = jQuery.uaMatch( userAgent );
+if ( browserMatch.browser ) {
+	jQuery.browser[ browserMatch.browser ] = true;
+	jQuery.browser.version = browserMatch.version;
+}
+
+// Deprecated, use jQuery.browser.webkit instead
+if ( jQuery.browser.webkit ) {
+	jQuery.browser.safari = true;
+}
+
+// IE doesn't match non-breaking spaces with \s
+if ( rnotwhite.test( "\xA0" ) ) {
+	trimLeft = /^[\s\xA0]+/;
+	trimRight = /[\s\xA0]+$/;
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+
+// Cleanup functions for the document ready method
+if ( document.addEventListener ) {
+	DOMContentLoaded = function() {
+		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+		jQuery.ready();
+	};
+
+} else if ( document.attachEvent ) {
+	DOMContentLoaded = function() {
+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+		if ( document.readyState === "complete" ) {
+			document.detachEvent( "onreadystatechange", DOMContentLoaded );
+			jQuery.ready();
+		}
+	};
+}
+
+// The DOM ready check for Internet Explorer
+function doScrollCheck() {
+	if ( jQuery.isReady ) {
+		return;
+	}
+
+	try {
+		// If IE is used, use the trick by Diego Perini
+		// http://javascript.nwbox.com/IEContentLoaded/
+		document.documentElement.doScroll("left");
+	} catch(e) {
+		setTimeout( doScrollCheck, 1 );
+		return;
+	}
+
+	// and execute any waiting functions
+	jQuery.ready();
+}
+
+// Expose jQuery to the global object
+return jQuery;
+
+})();
+
+
+var // Promise methods
+	promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ),
+	// Static reference to slice
+	sliceDeferred = [].slice;
+
+jQuery.extend({
+	// Create a simple deferred (one callbacks list)
+	_Deferred: function() {
+		var // callbacks list
+			callbacks = [],
+			// stored [ context , args ]
+			fired,
+			// to avoid firing when already doing so
+			firing,
+			// flag to know if the deferred has been cancelled
+			cancelled,
+			// the deferred itself
+			deferred  = {
+
+				// done( f1, f2, ...)
+				done: function() {
+					if ( !cancelled ) {
+						var args = arguments,
+							i,
+							length,
+							elem,
+							type,
+							_fired;
+						if ( fired ) {
+							_fired = fired;
+							fired = 0;
+						}
+						for ( i = 0, length = args.length; i < length; i++ ) {
+							elem = args[ i ];
+							type = jQuery.type( elem );
+							if ( type === "array" ) {
+								deferred.done.apply( deferred, elem );
+							} else if ( type === "function" ) {
+								callbacks.push( elem );
+							}
+						}
+						if ( _fired ) {
+							deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
+						}
+					}
+					return this;
+				},
+
+				// resolve with given context and args
+				resolveWith: function( context, args ) {
+					if ( !cancelled && !fired && !firing ) {
+						// make sure args are available (#8421)
+						args = args || [];
+						firing = 1;
+						try {
+							while( callbacks[ 0 ] ) {
+								callbacks.shift().apply( context, args );
+							}
+						}
+						finally {
+							fired = [ context, args ];
+							firing = 0;
+						}
+					}
+					return this;
+				},
+
+				// resolve with this as context and given arguments
+				resolve: function() {
+					deferred.resolveWith( this, arguments );
+					return this;
+				},
+
+				// Has this deferred been resolved?
+				isResolved: function() {
+					return !!( firing || fired );
+				},
+
+				// Cancel
+				cancel: function() {
+					cancelled = 1;
+					callbacks = [];
+					return this;
+				}
+			};
+
+		return deferred;
+	},
+
+	// Full fledged deferred (two callbacks list)
+	Deferred: function( func ) {
+		var deferred = jQuery._Deferred(),
+			failDeferred = jQuery._Deferred(),
+			promise;
+		// Add errorDeferred methods, then and promise
+		jQuery.extend( deferred, {
+			then: function( doneCallbacks, failCallbacks ) {
+				deferred.done( doneCallbacks ).fail( failCallbacks );
+				return this;
+			},
+			always: function() {
+				return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments );
+			},
+			fail: failDeferred.done,
+			rejectWith: failDeferred.resolveWith,
+			reject: failDeferred.resolve,
+			isRejected: failDeferred.isResolved,
+			pipe: function( fnDone, fnFail ) {
+				return jQuery.Deferred(function( newDefer ) {
+					jQuery.each( {
+						done: [ fnDone, "resolve" ],
+						fail: [ fnFail, "reject" ]
+					}, function( handler, data ) {
+						var fn = data[ 0 ],
+							action = data[ 1 ],
+							returned;
+						if ( jQuery.isFunction( fn ) ) {
+							deferred[ handler ](function() {
+								returned = fn.apply( this, arguments );
+								if ( returned && jQuery.isFunction( returned.promise ) ) {
+									returned.promise().then( newDefer.resolve, newDefer.reject );
+								} else {
+									newDefer[ action ]( returned );
+								}
+							});
+						} else {
+							deferred[ handler ]( newDefer[ action ] );
+						}
+					});
+				}).promise();
+			},
+			// Get a promise for this deferred
+			// If obj is provided, the promise aspect is added to the object
+			promise: function( obj ) {
+				if ( obj == null ) {
+					if ( promise ) {
+						return promise;
+					}
+					promise = obj = {};
+				}
+				var i = promiseMethods.length;
+				while( i-- ) {
+					obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
+				}
+				return obj;
+			}
+		});
+		// Make sure only one callback list will be used
+		deferred.done( failDeferred.cancel ).fail( deferred.cancel );
+		// Unexpose cancel
+		delete deferred.cancel;
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( firstParam ) {
+		var args = arguments,
+			i = 0,
+			length = args.length,
+			count = length,
+			deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
+				firstParam :
+				jQuery.Deferred();
+		function resolveFunc( i ) {
+			return function( value ) {
+				args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+				if ( !( --count ) ) {
+					// Strange bug in FF4:
+					// Values changed onto the arguments object sometimes end up as undefined values
+					// outside the $.when method. Cloning the object into a fresh array solves the issue
+					deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) );
+				}
+			};
+		}
+		if ( length > 1 ) {
+			for( ; i < length; i++ ) {
+				if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) {
+					args[ i ].promise().then( resolveFunc(i), deferred.reject );
+				} else {
+					--count;
+				}
+			}
+			if ( !count ) {
+				deferred.resolveWith( deferred, args );
+			}
+		} else if ( deferred !== firstParam ) {
+			deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
+		}
+		return deferred.promise();
+	}
+});
+
+
+
+jQuery.support = (function() {
+
+	var div = document.createElement( "div" ),
+		documentElement = document.documentElement,
+		all,
+		a,
+		select,
+		opt,
+		input,
+		marginDiv,
+		support,
+		fragment,
+		body,
+		bodyStyle,
+		tds,
+		events,
+		eventName,
+		i,
+		isSupported;
+
+	// Preliminary tests
+	div.setAttribute("className", "t");
+	div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+
+	all = div.getElementsByTagName( "*" );
+	a = div.getElementsByTagName( "a" )[ 0 ];
+
+	// Can't get basic test support
+	if ( !all || !all.length || !a ) {
+		return {};
+	}
+
+	// First batch of supports tests
+	select = document.createElement( "select" );
+	opt = select.appendChild( document.createElement("option") );
+	input = div.getElementsByTagName( "input" )[ 0 ];
+
+	support = {
+		// IE strips leading whitespace when .innerHTML is used
+		leadingWhitespace: ( div.firstChild.nodeType === 3 ),
+
+		// Make sure that tbody elements aren't automatically inserted
+		// IE will insert them into empty tables
+		tbody: !div.getElementsByTagName( "tbody" ).length,
+
+		// Make sure that link elements get serialized correctly by innerHTML
+		// This requires a wrapper element in IE
+		htmlSerialize: !!div.getElementsByTagName( "link" ).length,
+
+		// Get the style information from getAttribute
+		// (IE uses .cssText instead)
+		style: /top/.test( a.getAttribute("style") ),
+
+		// Make sure that URLs aren't manipulated
+		// (IE normalizes it by default)
+		hrefNormalized: ( a.getAttribute( "href" ) === "/a" ),
+
+		// Make sure that element opacity exists
+		// (IE uses filter instead)
+		// Use a regex to work around a WebKit issue. See #5145
+		opacity: /^0.55$/.test( a.style.opacity ),
+
+		// Verify style float existence
+		// (IE uses styleFloat instead of cssFloat)
+		cssFloat: !!a.style.cssFloat,
+
+		// Make sure that if no value is specified for a checkbox
+		// that it defaults to "on".
+		// (WebKit defaults to "" instead)
+		checkOn: ( input.value === "on" ),
+
+		// Make sure that a selected-by-default option has a working selected property.
+		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+		optSelected: opt.selected,
+
+		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+		getSetAttribute: div.className !== "t",
+
+		// Will be defined later
+		submitBubbles: true,
+		changeBubbles: true,
+		focusinBubbles: false,
+		deleteExpando: true,
+		noCloneEvent: true,
+		inlineBlockNeedsLayout: false,
+		shrinkWrapBlocks: false,
+		reliableMarginRight: true
+	};
+
+	// Make sure checked status is properly cloned
+	input.checked = true;
+	support.noCloneChecked = input.cloneNode( true ).checked;
+
+	// Make sure that the options inside disabled selects aren't marked as disabled
+	// (WebKit marks them as disabled)
+	select.disabled = true;
+	support.optDisabled = !opt.disabled;
+
+	// Test to see if it's possible to delete an expando from an element
+	// Fails in Internet Explorer
+	try {
+		delete div.test;
+	} catch( e ) {
+		support.deleteExpando = false;
+	}
+
+	if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+		div.attachEvent( "onclick", function click() {
+			// Cloning a node shouldn't copy over any
+			// bound event handlers (IE does this)
+			support.noCloneEvent = false;
+			div.detachEvent( "onclick", click );
+		});
+		div.cloneNode( true ).fireEvent( "onclick" );
+	}
+
+	// Check if a radio maintains it's value
+	// after being appended to the DOM
+	input = document.createElement("input");
+	input.value = "t";
+	input.setAttribute("type", "radio");
+	support.radioValue = input.value === "t";
+
+	input.setAttribute("checked", "checked");
+	div.appendChild( input );
+	fragment = document.createDocumentFragment();
+	fragment.appendChild( div.firstChild );
+
+	// WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	div.innerHTML = "";
+
+	// Figure out if the W3C box model works as expected
+	div.style.width = div.style.paddingLeft = "1px";
+
+	// We use our own, invisible, body
+	body = document.createElement( "body" );
+	bodyStyle = {
+		visibility: "hidden",
+		width: 0,
+		height: 0,
+		border: 0,
+		margin: 0,
+		// Set background to avoid IE crashes when removing (#9028)
+		background: "none"
+	};
+	for ( i in bodyStyle ) {
+		body.style[ i ] = bodyStyle[ i ];
+	}
+	body.appendChild( div );
+	documentElement.insertBefore( body, documentElement.firstChild );
+
+	// Check if a disconnected checkbox will retain its checked
+	// value of true after appended to the DOM (IE6/7)
+	support.appendChecked = input.checked;
+
+	support.boxModel = div.offsetWidth === 2;
+
+	if ( "zoom" in div.style ) {
+		// Check if natively block-level elements act like inline-block
+		// elements when setting their display to 'inline' and giving
+		// them layout
+		// (IE < 8 does this)
+		div.style.display = "inline";
+		div.style.zoom = 1;
+		support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
+
+		// Check if elements with layout shrink-wrap their children
+		// (IE 6 does this)
+		div.style.display = "";
+		div.innerHTML = "<div style='width:4px;'></div>";
+		support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
+	}
+
+	div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
+	tds = div.getElementsByTagName( "td" );
+
+	// Check if table cells still have offsetWidth/Height when they are set
+	// to display:none and there are still other visible table cells in a
+	// table row; if so, offsetWidth/Height are not reliable for use when
+	// determining if an element has been hidden directly using
+	// display:none (it is still safe to use offsets if a parent element is
+	// hidden; don safety goggles and see bug #4512 for more information).
+	// (only IE 8 fails this test)
+	isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+	tds[ 0 ].style.display = "";
+	tds[ 1 ].style.display = "none";
+
+	// Check if empty table cells still have offsetWidth/Height
+	// (IE < 8 fail this test)
+	support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+	div.innerHTML = "";
+
+	// Check if div with explicit width and no margin-right incorrectly
+	// gets computed margin-right based on width of container. For more
+	// info see bug #3333
+	// Fails in WebKit before Feb 2011 nightlies
+	// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+	if ( document.defaultView && document.defaultView.getComputedStyle ) {
+		marginDiv = document.createElement( "div" );
+		marginDiv.style.width = "0";
+		marginDiv.style.marginRight = "0";
+		div.appendChild( marginDiv );
+		support.reliableMarginRight =
+			( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
+	}
+
+	// Remove the body element we added
+	body.innerHTML = "";
+	documentElement.removeChild( body );
+
+	// Technique from Juriy Zaytsev
+	// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
+	// We only care about the case where non-standard event systems
+	// are used, namely in IE. Short-circuiting here helps us to
+	// avoid an eval call (in setAttribute) which can cause CSP
+	// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+	if ( div.attachEvent ) {
+		for( i in {
+			submit: 1,
+			change: 1,
+			focusin: 1
+		} ) {
+			eventName = "on" + i;
+			isSupported = ( eventName in div );
+			if ( !isSupported ) {
+				div.setAttribute( eventName, "return;" );
+				isSupported = ( typeof div[ eventName ] === "function" );
+			}
+			support[ i + "Bubbles" ] = isSupported;
+		}
+	}
+
+	return support;
+})();
+
+// Keep track of boxModel
+jQuery.boxModel = jQuery.support.boxModel;
+
+
+
+
+var rbrace = /^(?:\{.*\}|\[.*\])$/,
+	rmultiDash = /([a-z])([A-Z])/g;
+
+jQuery.extend({
+	cache: {},
+
+	// Please use with caution
+	uuid: 0,
+
+	// Unique for each copy of jQuery on the page
+	// Non-digits removed to match rinlinejQuery
+	expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+
+	// The following elements throw uncatchable exceptions if you
+	// attempt to add expando properties to them.
+	noData: {
+		"embed": true,
+		// Ban all objects except for Flash (which handle expandos)
+		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+		"applet": true
+	},
+
+	hasData: function( elem ) {
+		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+
+		return !!elem && !isEmptyDataObject( elem );
+	},
+
+	data: function( elem, name, data, pvt /* Internal Use Only */ ) {
+		if ( !jQuery.acceptData( elem ) ) {
+			return;
+		}
+
+		var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,
+
+			// We have to handle DOM nodes and JS objects differently because IE6-7
+			// can't GC object references properly across the DOM-JS boundary
+			isNode = elem.nodeType,
+
+			// Only DOM nodes need the global jQuery cache; JS object data is
+			// attached directly to the object so GC can occur automatically
+			cache = isNode ? jQuery.cache : elem,
+
+			// Only defining an ID for JS objects if its cache already exists allows
+			// the code to shortcut on the same path as a DOM node with no cache
+			id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;
+
+		// Avoid doing any more work than we need to when trying to get data on an
+		// object that has no data at all
+		if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) {
+			return;
+		}
+
+		if ( !id ) {
+			// Only DOM nodes need a new unique ID for each element since their data
+			// ends up in the global cache
+			if ( isNode ) {
+				elem[ jQuery.expando ] = id = ++jQuery.uuid;
+			} else {
+				id = jQuery.expando;
+			}
+		}
+
+		if ( !cache[ id ] ) {
+			cache[ id ] = {};
+
+			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
+			// metadata on plain JS objects when the object is serialized using
+			// JSON.stringify
+			if ( !isNode ) {
+				cache[ id ].toJSON = jQuery.noop;
+			}
+		}
+
+		// An object can be passed to jQuery.data instead of a key/value pair; this gets
+		// shallow copied over onto the existing cache
+		if ( typeof name === "object" || typeof name === "function" ) {
+			if ( pvt ) {
+				cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
+			} else {
+				cache[ id ] = jQuery.extend(cache[ id ], name);
+			}
+		}
+
+		thisCache = cache[ id ];
+
+		// Internal jQuery data is stored in a separate object inside the object's data
+		// cache in order to avoid key collisions between internal data and user-defined
+		// data
+		if ( pvt ) {
+			if ( !thisCache[ internalKey ] ) {
+				thisCache[ internalKey ] = {};
+			}
+
+			thisCache = thisCache[ internalKey ];
+		}
+
+		if ( data !== undefined ) {
+			thisCache[ jQuery.camelCase( name ) ] = data;
+		}
+
+		// TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
+		// not attempt to inspect the internal events object using jQuery.data, as this
+		// internal data object is undocumented and subject to change.
+		if ( name === "events" && !thisCache[name] ) {
+			return thisCache[ internalKey ] && thisCache[ internalKey ].events;
+		}
+
+		return getByName ? thisCache[ jQuery.camelCase( name ) ] : thisCache;
+	},
+
+	removeData: function( elem, name, pvt /* Internal Use Only */ ) {
+		if ( !jQuery.acceptData( elem ) ) {
+			return;
+		}
+
+		var internalKey = jQuery.expando, isNode = elem.nodeType,
+
+			// See jQuery.data for more information
+			cache = isNode ? jQuery.cache : elem,
+
+			// See jQuery.data for more information
+			id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+		// If there is already no cache entry for this object, there is no
+		// purpose in continuing
+		if ( !cache[ id ] ) {
+			return;
+		}
+
+		if ( name ) {
+			var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
+
+			if ( thisCache ) {
+				delete thisCache[ name ];
+
+				// If there is no data left in the cache, we want to continue
+				// and let the cache object itself get destroyed
+				if ( !isEmptyDataObject(thisCache) ) {
+					return;
+				}
+			}
+		}
+
+		// See jQuery.data for more information
+		if ( pvt ) {
+			delete cache[ id ][ internalKey ];
+
+			// Don't destroy the parent cache unless the internal data object
+			// had been the only thing left in it
+			if ( !isEmptyDataObject(cache[ id ]) ) {
+				return;
+			}
+		}
+
+		var internalCache = cache[ id ][ internalKey ];
+
+		// Browsers that fail expando deletion also refuse to delete expandos on
+		// the window, but it will allow it on all other JS objects; other browsers
+		// don't care
+		if ( jQuery.support.deleteExpando || cache != window ) {
+			delete cache[ id ];
+		} else {
+			cache[ id ] = null;
+		}
+
+		// We destroyed the entire user cache at once because it's faster than
+		// iterating through each key, but we need to continue to persist internal
+		// data if it existed
+		if ( internalCache ) {
+			cache[ id ] = {};
+			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
+			// metadata on plain JS objects when the object is serialized using
+			// JSON.stringify
+			if ( !isNode ) {
+				cache[ id ].toJSON = jQuery.noop;
+			}
+
+			cache[ id ][ internalKey ] = internalCache;
+
+		// Otherwise, we need to eliminate the expando on the node to avoid
+		// false lookups in the cache for entries that no longer exist
+		} else if ( isNode ) {
+			// IE does not allow us to delete expando properties from nodes,
+			// nor does it have a removeAttribute function on Document nodes;
+			// we must handle all of these cases
+			if ( jQuery.support.deleteExpando ) {
+				delete elem[ jQuery.expando ];
+			} else if ( elem.removeAttribute ) {
+				elem.removeAttribute( jQuery.expando );
+			} else {
+				elem[ jQuery.expando ] = null;
+			}
+		}
+	},
+
+	// For internal use only.
+	_data: function( elem, name, data ) {
+		return jQuery.data( elem, name, data, true );
+	},
+
+	// A method for determining if a DOM node can handle the data expando
+	acceptData: function( elem ) {
+		if ( elem.nodeName ) {
+			var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+			if ( match ) {
+				return !(match === true || elem.getAttribute("classid") !== match);
+			}
+		}
+
+		return true;
+	}
+});
+
+jQuery.fn.extend({
+	data: function( key, value ) {
+		var data = null;
+
+		if ( typeof key === "undefined" ) {
+			if ( this.length ) {
+				data = jQuery.data( this[0] );
+
+				if ( this[0].nodeType === 1 ) {
+			    var attr = this[0].attributes, name;
+					for ( var i = 0, l = attr.length; i < l; i++ ) {
+						name = attr[i].name;
+
+						if ( name.indexOf( "data-" ) === 0 ) {
+							name = jQuery.camelCase( name.substring(5) );
+
+							dataAttr( this[0], name, data[ name ] );
+						}
+					}
+				}
+			}
+
+			return data;
+
+		} else if ( typeof key === "object" ) {
+			return this.each(function() {
+				jQuery.data( this, key );
+			});
+		}
+
+		var parts = key.split(".");
+		parts[1] = parts[1] ? "." + parts[1] : "";
+
+		if ( value === undefined ) {
+			data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+
+			// Try to fetch any internally stored data first
+			if ( data === undefined && this.length ) {
+				data = jQuery.data( this[0], key );
+				data = dataAttr( this[0], key, data );
+			}
+
+			return data === undefined && parts[1] ?
+				this.data( parts[0] ) :
+				data;
+
+		} else {
+			return this.each(function() {
+				var $this = jQuery( this ),
+					args = [ parts[0], value ];
+
+				$this.triggerHandler( "setData" + parts[1] + "!", args );
+				jQuery.data( this, key, value );
+				$this.triggerHandler( "changeData" + parts[1] + "!", args );
+			});
+		}
+	},
+
+	removeData: function( key ) {
+		return this.each(function() {
+			jQuery.removeData( this, key );
+		});
+	}
+});
+
+function dataAttr( elem, key, data ) {
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+		var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase();
+
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = data === "true" ? true :
+				data === "false" ? false :
+				data === "null" ? null :
+				!jQuery.isNaN( data ) ? parseFloat( data ) :
+					rbrace.test( data ) ? jQuery.parseJSON( data ) :
+					data;
+			} catch( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			jQuery.data( elem, key, data );
+
+		} else {
+			data = undefined;
+		}
+	}
+
+	return data;
+}
+
+// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON
+// property to be considered empty objects; this property always exists in
+// order to make sure JSON.stringify does not expose internal metadata
+function isEmptyDataObject( obj ) {
+	for ( var name in obj ) {
+		if ( name !== "toJSON" ) {
+			return false;
+		}
+	}
+
+	return true;
+}
+
+
+
+
+function handleQueueMarkDefer( elem, type, src ) {
+	var deferDataKey = type + "defer",
+		queueDataKey = type + "queue",
+		markDataKey = type + "mark",
+		defer = jQuery.data( elem, deferDataKey, undefined, true );
+	if ( defer &&
+		( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&
+		( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {
+		// Give room for hard-coded callbacks to fire first
+		// and eventually mark/queue something else on the element
+		setTimeout( function() {
+			if ( !jQuery.data( elem, queueDataKey, undefined, true ) &&
+				!jQuery.data( elem, markDataKey, undefined, true ) ) {
+				jQuery.removeData( elem, deferDataKey, true );
+				defer.resolve();
+			}
+		}, 0 );
+	}
+}
+
+jQuery.extend({
+
+	_mark: function( elem, type ) {
+		if ( elem ) {
+			type = (type || "fx") + "mark";
+			jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
+		}
+	},
+
+	_unmark: function( force, elem, type ) {
+		if ( force !== true ) {
+			type = elem;
+			elem = force;
+			force = false;
+		}
+		if ( elem ) {
+			type = type || "fx";
+			var key = type + "mark",
+				count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
+			if ( count ) {
+				jQuery.data( elem, key, count, true );
+			} else {
+				jQuery.removeData( elem, key, true );
+				handleQueueMarkDefer( elem, type, "mark" );
+			}
+		}
+	},
+
+	queue: function( elem, type, data ) {
+		if ( elem ) {
+			type = (type || "fx") + "queue";
+			var q = jQuery.data( elem, type, undefined, true );
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !q || jQuery.isArray(data) ) {
+					q = jQuery.data( elem, type, jQuery.makeArray(data), true );
+				} else {
+					q.push( data );
+				}
+			}
+			return q || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			fn = queue.shift(),
+			defer;
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+		}
+
+		if ( fn ) {
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift("inprogress");
+			}
+
+			fn.call(elem, function() {
+				jQuery.dequeue(elem, type);
+			});
+		}
+
+		if ( !queue.length ) {
+			jQuery.removeData( elem, type + "queue", true );
+			handleQueueMarkDefer( elem, type, "queue" );
+		}
+	}
+});
+
+jQuery.fn.extend({
+	queue: function( type, data ) {
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+		}
+
+		if ( data === undefined ) {
+			return jQuery.queue( this[0], type );
+		}
+		return this.each(function() {
+			var queue = jQuery.queue( this, type, data );
+
+			if ( type === "fx" && queue[0] !== "inprogress" ) {
+				jQuery.dequeue( this, type );
+			}
+		});
+	},
+	dequeue: function( type ) {
+		return this.each(function() {
+			jQuery.dequeue( this, type );
+		});
+	},
+	// Based off of the plugin by Clint Helfers, with permission.
+	// http://blindsignals.com/index.php/2009/07/jquery-delay/
+	delay: function( time, type ) {
+		time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
+		type = type || "fx";
+
+		return this.queue( type, function() {
+			var elem = this;
+			setTimeout(function() {
+				jQuery.dequeue( elem, type );
+			}, time );
+		});
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, object ) {
+		if ( typeof type !== "string" ) {
+			object = type;
+			type = undefined;
+		}
+		type = type || "fx";
+		var defer = jQuery.Deferred(),
+			elements = this,
+			i = elements.length,
+			count = 1,
+			deferDataKey = type + "defer",
+			queueDataKey = type + "queue",
+			markDataKey = type + "mark",
+			tmp;
+		function resolve() {
+			if ( !( --count ) ) {
+				defer.resolveWith( elements, [ elements ] );
+			}
+		}
+		while( i-- ) {
+			if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
+					( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
+						jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
+					jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
+				count++;
+				tmp.done( resolve );
+			}
+		}
+		resolve();
+		return defer.promise();
+	}
+});
+
+
+
+
+var rclass = /[\n\t\r]/g,
+	rspace = /\s+/,
+	rreturn = /\r/g,
+	rtype = /^(?:button|input)$/i,
+	rfocusable = /^(?:button|input|object|select|textarea)$/i,
+	rclickable = /^a(?:rea)?$/i,
+	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+	rinvalidChar = /\:/,
+	formHook, boolHook;
+
+jQuery.fn.extend({
+	attr: function( name, value ) {
+		return jQuery.access( this, name, value, true, jQuery.attr );
+	},
+
+	removeAttr: function( name ) {
+		return this.each(function() {
+			jQuery.removeAttr( this, name );
+		});
+	},
+	
+	prop: function( name, value ) {
+		return jQuery.access( this, name, value, true, jQuery.prop );
+	},
+	
+	removeProp: function( name ) {
+		name = jQuery.propFix[ name ] || name;
+		return this.each(function() {
+			// try/catch handles cases where IE balks (such as removing a property on window)
+			try {
+				this[ name ] = undefined;
+				delete this[ name ];
+			} catch( e ) {}
+		});
+	},
+
+	addClass: function( value ) {
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				self.addClass( value.call(this, i, self.attr("class") || "") );
+			});
+		}
+
+		if ( value && typeof value === "string" ) {
+			var classNames = (value || "").split( rspace );
+
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				var elem = this[i];
+
+				if ( elem.nodeType === 1 ) {
+					if ( !elem.className ) {
+						elem.className = value;
+
+					} else {
+						var className = " " + elem.className + " ",
+							setClass = elem.className;
+
+						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
+							if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
+								setClass += " " + classNames[c];
+							}
+						}
+						elem.className = jQuery.trim( setClass );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		if ( jQuery.isFunction(value) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				self.removeClass( value.call(this, i, self.attr("class")) );
+			});
+		}
+
+		if ( (value && typeof value === "string") || value === undefined ) {
+			var classNames = (value || "").split( rspace );
+
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				var elem = this[i];
+
+				if ( elem.nodeType === 1 && elem.className ) {
+					if ( value ) {
+						var className = (" " + elem.className + " ").replace(rclass, " ");
+						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
+							className = className.replace(" " + classNames[c] + " ", " ");
+						}
+						elem.className = jQuery.trim( className );
+
+					} else {
+						elem.className = "";
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value,
+			isBool = typeof stateVal === "boolean";
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
+			});
+		}
+
+		return this.each(function() {
+			if ( type === "string" ) {
+				// toggle individual class names
+				var className,
+					i = 0,
+					self = jQuery( this ),
+					state = stateVal,
+					classNames = value.split( rspace );
+
+				while ( (className = classNames[ i++ ]) ) {
+					// check each className given, space seperated list
+					state = isBool ? state : !self.hasClass( className );
+					self[ state ? "addClass" : "removeClass" ]( className );
+				}
+
+			} else if ( type === "undefined" || type === "boolean" ) {
+				if ( this.className ) {
+					// store className if set
+					jQuery._data( this, "__className__", this.className );
+				}
+
+				// toggle whole className
+				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+			}
+		});
+	},
+
+	hasClass: function( selector ) {
+		var className = " " + selector + " ";
+		for ( var i = 0, l = this.length; i < l; i++ ) {
+			if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+				return true;
+			}
+		}
+
+		return false;
+	},
+
+	val: function( value ) {
+		var hooks, ret,
+			elem = this[0];
+		
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
+
+				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+					return ret;
+				}
+
+				return (elem.value || "").replace(rreturn, "");
+			}
+
+			return undefined;
+		}
+
+		var isFunction = jQuery.isFunction( value );
+
+		return this.each(function( i ) {
+			var self = jQuery(this), val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, self.val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+			} else if ( typeof val === "number" ) {
+				val += "";
+			} else if ( jQuery.isArray( val ) ) {
+				val = jQuery.map(val, function ( value ) {
+					return value == null ? "" : value + "";
+				});
+			}
+
+			hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	valHooks: {
+		option: {
+			get: function( elem ) {
+				// attributes.value is undefined in Blackberry 4.7 but
+				// uses .value. See #6932
+				var val = elem.attributes.value;
+				return !val || val.specified ? elem.value : elem.text;
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value,
+					index = elem.selectedIndex,
+					values = [],
+					options = elem.options,
+					one = elem.type === "select-one";
+
+				// Nothing was selected
+				if ( index < 0 ) {
+					return null;
+				}
+
+				// Loop through all the selected options
+				for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
+					var option = options[ i ];
+
+					// Don't return options that are disabled or in a disabled optgroup
+					if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
+							(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
+				if ( one && !values.length && options.length ) {
+					return jQuery( options[ index ] ).val();
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var values = jQuery.makeArray( value );
+
+				jQuery(elem).find("option").each(function() {
+					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+				});
+
+				if ( !values.length ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	},
+
+	attrFn: {
+		val: true,
+		css: true,
+		html: true,
+		text: true,
+		data: true,
+		width: true,
+		height: true,
+		offset: true
+	},
+	
+	attrFix: {
+		// Always normalize to ensure hook usage
+		tabindex: "tabIndex"
+	},
+	
+	attr: function( elem, name, value, pass ) {
+		var nType = elem.nodeType;
+		
+		// don't get/set attributes on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return undefined;
+		}
+
+		if ( pass && name in jQuery.attrFn ) {
+			return jQuery( elem )[ name ]( value );
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( !("getAttribute" in elem) ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		var ret, hooks,
+			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		// Normalize the name if needed
+		name = notxml && jQuery.attrFix[ name ] || name;
+
+		hooks = jQuery.attrHooks[ name ];
+
+		if ( !hooks ) {
+			// Use boolHook for boolean attributes
+			if ( rboolean.test( name ) &&
+				(typeof value === "boolean" || value === undefined || value.toLowerCase() === name.toLowerCase()) ) {
+
+				hooks = boolHook;
+
+			// Use formHook for forms and if the name contains certain characters
+			} else if ( formHook && (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) {
+				hooks = formHook;
+			}
+		}
+
+		if ( value !== undefined ) {
+
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+				return undefined;
+
+			} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				elem.setAttribute( name, "" + value );
+				return value;
+			}
+
+		} else if ( hooks && "get" in hooks && notxml ) {
+			return hooks.get( elem, name );
+
+		} else {
+
+			ret = elem.getAttribute( name );
+
+			// Non-existent attributes return null, we normalize to undefined
+			return ret === null ?
+				undefined :
+				ret;
+		}
+	},
+
+	removeAttr: function( elem, name ) {
+		var propName;
+		if ( elem.nodeType === 1 ) {
+			name = jQuery.attrFix[ name ] || name;
+		
+			if ( jQuery.support.getSetAttribute ) {
+				// Use removeAttribute in browsers that support it
+				elem.removeAttribute( name );
+			} else {
+				jQuery.attr( elem, name, "" );
+				elem.removeAttributeNode( elem.getAttributeNode( name ) );
+			}
+
+			// Set corresponding property to false for boolean attributes
+			if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) {
+				elem[ propName ] = false;
+			}
+		}
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				// We can't allow the type property to be changed (since it causes problems in IE)
+				if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+					jQuery.error( "type property can't be changed" );
+				} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+					// Setting the type on a radio button after the value resets the value in IE6-9
+					// Reset value to it's default in case type is set after value
+					// This is for element creation
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		},
+		tabIndex: {
+			get: function( elem ) {
+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				var attributeNode = elem.getAttributeNode("tabIndex");
+
+				return attributeNode && attributeNode.specified ?
+					parseInt( attributeNode.value, 10 ) :
+					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+						0 :
+						undefined;
+			}
+		}
+	},
+
+	propFix: {
+		tabindex: "tabIndex",
+		readonly: "readOnly",
+		"for": "htmlFor",
+		"class": "className",
+		maxlength: "maxLength",
+		cellspacing: "cellSpacing",
+		cellpadding: "cellPadding",
+		rowspan: "rowSpan",
+		colspan: "colSpan",
+		usemap: "useMap",
+		frameborder: "frameBorder",
+		contenteditable: "contentEditable"
+	},
+	
+	prop: function( elem, name, value ) {
+		var nType = elem.nodeType;
+
+		// don't get/set properties on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return undefined;
+		}
+
+		var ret, hooks,
+			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		// Try to normalize/fix the name
+		name = notxml && jQuery.propFix[ name ] || name;
+		
+		hooks = jQuery.propHooks[ name ];
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				return (elem[ name ] = value);
+			}
+
+		} else {
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				return elem[ name ];
+			}
+		}
+	},
+	
+	propHooks: {}
+});
+
+// Hook for boolean attributes
+boolHook = {
+	get: function( elem, name ) {
+		// Align boolean attributes with corresponding properties
+		return elem[ jQuery.propFix[ name ] || name ] ?
+			name.toLowerCase() :
+			undefined;
+	},
+	set: function( elem, value, name ) {
+		var propName;
+		if ( value === false ) {
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else {
+			// value is true since we know at this point it's type boolean and not false
+			// Set boolean attributes to the same name and set the DOM property
+			propName = jQuery.propFix[ name ] || name;
+			if ( propName in elem ) {
+				// Only set the IDL specifically if it already exists on the element
+				elem[ propName ] = value;
+			}
+
+			elem.setAttribute( name, name.toLowerCase() );
+		}
+		return name;
+	}
+};
+
+// Use the value property for back compat
+// Use the formHook for button elements in IE6/7 (#1954)
+jQuery.attrHooks.value = {
+	get: function( elem, name ) {
+		if ( formHook && jQuery.nodeName( elem, "button" ) ) {
+			return formHook.get( elem, name );
+		}
+		return elem.value;
+	},
+	set: function( elem, value, name ) {
+		if ( formHook && jQuery.nodeName( elem, "button" ) ) {
+			return formHook.set( elem, value, name );
+		}
+		// Does not return so that setAttribute is also used
+		elem.value = value;
+	}
+};
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !jQuery.support.getSetAttribute ) {
+
+	// propFix is more comprehensive and contains all fixes
+	jQuery.attrFix = jQuery.propFix;
+	
+	// Use this for any attribute on a form in IE6/7
+	formHook = jQuery.attrHooks.name = jQuery.valHooks.button = {
+		get: function( elem, name ) {
+			var ret;
+			ret = elem.getAttributeNode( name );
+			// Return undefined if nodeValue is empty string
+			return ret && ret.nodeValue !== "" ?
+				ret.nodeValue :
+				undefined;
+		},
+		set: function( elem, value, name ) {
+			// Check form objects in IE (multiple bugs related)
+			// Only use nodeValue if the attribute node exists on the form
+			var ret = elem.getAttributeNode( name );
+			if ( ret ) {
+				ret.nodeValue = value;
+				return value;
+			}
+		}
+	};
+
+	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
+	// This is for removals
+	jQuery.each([ "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			set: function( elem, value ) {
+				if ( value === "" ) {
+					elem.setAttribute( name, "auto" );
+					return value;
+				}
+			}
+		});
+	});
+}
+
+
+// Some attributes require a special call on IE
+if ( !jQuery.support.hrefNormalized ) {
+	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			get: function( elem ) {
+				var ret = elem.getAttribute( name, 2 );
+				return ret === null ? undefined : ret;
+			}
+		});
+	});
+}
+
+if ( !jQuery.support.style ) {
+	jQuery.attrHooks.style = {
+		get: function( elem ) {
+			// Return undefined in the case of empty string
+			// Normalize to lowercase since IE uppercases css property names
+			return elem.style.cssText.toLowerCase() || undefined;
+		},
+		set: function( elem, value ) {
+			return (elem.style.cssText = "" + value);
+		}
+	};
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+		get: function( elem ) {
+			var parent = elem.parentNode;
+
+			if ( parent ) {
+				parent.selectedIndex;
+
+				// Make sure that it also works with optgroups, see #5701
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+		}
+	});
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+	jQuery.each([ "radio", "checkbox" ], function() {
+		jQuery.valHooks[ this ] = {
+			get: function( elem ) {
+				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+				return elem.getAttribute("value") === null ? "on" : elem.value;
+			}
+		};
+	});
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+		set: function( elem, value ) {
+			if ( jQuery.isArray( value ) ) {
+				return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);
+			}
+		}
+	});
+});
+
+
+
+
+var hasOwn = Object.prototype.hasOwnProperty,
+	rnamespaces = /\.(.*)$/,
+	rformElems = /^(?:textarea|input|select)$/i,
+	rperiod = /\./g,
+	rspaces = / /g,
+	rescape = /[^\w\s.|`]/g,
+	fcleanup = function( nm ) {
+		return nm.replace(rescape, "\\$&");
+	};
+
+/*
+ * A number of helper functions used for managing events.
+ * Many of the ideas behind this code originated from
+ * Dean Edwards' addEvent library.
+ */
+jQuery.event = {
+
+	// Bind an event to an element
+	// Original by Dean Edwards
+	add: function( elem, types, handler, data ) {
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		if ( handler === false ) {
+			handler = returnFalse;
+		} else if ( !handler ) {
+			// Fixes bug #7229. Fix recommended by jdalton
+			return;
+		}
+
+		var handleObjIn, handleObj;
+
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+		}
+
+		// Make sure that the function being executed has a unique ID
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure
+		var elemData = jQuery._data( elem );
+
+		// If no elemData is found then we must be trying to bind to one of the
+		// banned noData elements
+		if ( !elemData ) {
+			return;
+		}
+
+		var events = elemData.events,
+			eventHandle = elemData.handle;
+
+		if ( !events ) {
+			elemData.events = events = {};
+		}
+
+		if ( !eventHandle ) {
+			elemData.handle = eventHandle = function( e ) {
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+					jQuery.event.handle.apply( eventHandle.elem, arguments ) :
+					undefined;
+			};
+		}
+
+		// Add elem as a property of the handle function
+		// This is to prevent a memory leak with non-native events in IE.
+		eventHandle.elem = elem;
+
+		// Handle multiple events separated by a space
+		// jQuery(...).bind("mouseover mouseout", fn);
+		types = types.split(" ");
+
+		var type, i = 0, namespaces;
+
+		while ( (type = types[ i++ ]) ) {
+			handleObj = handleObjIn ?
+				jQuery.extend({}, handleObjIn) :
+				{ handler: handler, data: data };
+
+			// Namespaced event handlers
+			if ( type.indexOf(".") > -1 ) {
+				namespaces = type.split(".");
+				type = namespaces.shift();
+				handleObj.namespace = namespaces.slice(0).sort().join(".");
+
+			} else {
+				namespaces = [];
+				handleObj.namespace = "";
+			}
+
+			handleObj.type = type;
+			if ( !handleObj.guid ) {
+				handleObj.guid = handler.guid;
+			}
+
+			// Get the current list of functions bound to this event
+			var handlers = events[ type ],
+				special = jQuery.event.special[ type ] || {};
+
+			// Init the event handler queue
+			if ( !handlers ) {
+				handlers = events[ type ] = [];
+
+				// Check for a special event handler
+				// Only use addEventListener/attachEvent if the special
+				// events handler returns false
+				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+					// Bind the global event handler to the element
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle, false );
+
+					} else if ( elem.attachEvent ) {
+						elem.attachEvent( "on" + type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add the function to the element's handler list
+			handlers.push( handleObj );
+
+			// Keep track of which events have been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+		// Nullify elem to prevent memory leaks in IE
+		elem = null;
+	},
+
+	global: {},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, pos ) {
+		// don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		if ( handler === false ) {
+			handler = returnFalse;
+		}
+
+		var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
+			elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
+			events = elemData && elemData.events;
+
+		if ( !elemData || !events ) {
+			return;
+		}
+
+		// types is actually an event object here
+		if ( types && types.type ) {
+			handler = types.handler;
+			types = types.type;
+		}
+
+		// Unbind all events for the element
+		if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
+			types = types || "";
+
+			for ( type in events ) {
+				jQuery.event.remove( elem, type + types );
+			}
+
+			return;
+		}
+
+		// Handle multiple events separated by a space
+		// jQuery(...).unbind("mouseover mouseout", fn);
+		types = types.split(" ");
+
+		while ( (type = types[ i++ ]) ) {
+			origType = type;
+			handleObj = null;
+			all = type.indexOf(".") < 0;
+			namespaces = [];
+
+			if ( !all ) {
+				// Namespaced event handlers
+				namespaces = type.split(".");
+				type = namespaces.shift();
+
+				namespace = new RegExp("(^|\\.)" +
+					jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
+			}
+
+			eventType = events[ type ];
+
+			if ( !eventType ) {
+				continue;
+			}
+
+			if ( !handler ) {
+				for ( j = 0; j < eventType.length; j++ ) {
+					handleObj = eventType[ j ];
+
+					if ( all || namespace.test( handleObj.namespace ) ) {
+						jQuery.event.remove( elem, origType, handleObj.handler, j );
+						eventType.splice( j--, 1 );
+					}
+				}
+
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+
+			for ( j = pos || 0; j < eventType.length; j++ ) {
+				handleObj = eventType[ j ];
+
+				if ( handler.guid === handleObj.guid ) {
+					// remove the given handler for the given type
+					if ( all || namespace.test( handleObj.namespace ) ) {
+						if ( pos == null ) {
+							eventType.splice( j--, 1 );
+						}
+
+						if ( special.remove ) {
+							special.remove.call( elem, handleObj );
+						}
+					}
+
+					if ( pos != null ) {
+						break;
+					}
+				}
+			}
+
+			// remove generic event handler if no more handlers exist
+			if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
+				if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				ret = null;
+				delete events[ type ];
+			}
+		}
+
+		// Remove the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			var handle = elemData.handle;
+			if ( handle ) {
+				handle.elem = null;
+			}
+
+			delete elemData.events;
+			delete elemData.handle;
+
+			if ( jQuery.isEmptyObject( elemData ) ) {
+				jQuery.removeData( elem, undefined, true );
+			}
+		}
+	},
+	
+	// Events that are safe to short-circuit if no handlers are attached.
+	// Native DOM events should not be added, they may have inline handlers.
+	customEvent: {
+		"getData": true,
+		"setData": true,
+		"changeData": true
+	},
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+		// Event object or event type
+		var type = event.type || event,
+			namespaces = [],
+			exclusive;
+
+		if ( type.indexOf("!") >= 0 ) {
+			// Exclusive events trigger only for the exact event (no namespaces)
+			type = type.slice(0, -1);
+			exclusive = true;
+		}
+
+		if ( type.indexOf(".") >= 0 ) {
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split(".");
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+
+		if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+			// No jQuery handlers for this event type, and it can't have inline handlers
+			return;
+		}
+
+		// Caller can pass in an Event, Object, or just an event type string
+		event = typeof event === "object" ?
+			// jQuery.Event object
+			event[ jQuery.expando ] ? event :
+			// Object literal
+			new jQuery.Event( type, event ) :
+			// Just the event type (string)
+			new jQuery.Event( type );
+
+		event.type = type;
+		event.exclusive = exclusive;
+		event.namespace = namespaces.join(".");
+		event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)");
+		
+		// triggerHandler() and global events don't bubble or run the default action
+		if ( onlyHandlers || !elem ) {
+			event.preventDefault();
+			event.stopPropagation();
+		}
+
+		// Handle a global trigger
+		if ( !elem ) {
+			// TODO: Stop taunting the data cache; remove global events and always attach to document
+			jQuery.each( jQuery.cache, function() {
+				// internalKey variable is just used to make it easier to find
+				// and potentially change this stuff later; currently it just
+				// points to jQuery.expando
+				var internalKey = jQuery.expando,
+					internalCache = this[ internalKey ];
+				if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
+					jQuery.event.trigger( event, data, internalCache.handle.elem );
+				}
+			});
+			return;
+		}
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		event.target = elem;
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data ? jQuery.makeArray( data ) : [];
+		data.unshift( event );
+
+		var cur = elem,
+			// IE doesn't like method names with a colon (#3533, #8272)
+			ontype = type.indexOf(":") < 0 ? "on" + type : "";
+
+		// Fire event on the current element, then bubble up the DOM tree
+		do {
+			var handle = jQuery._data( cur, "handle" );
+
+			event.currentTarget = cur;
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Trigger an inline bound script
+			if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) {
+				event.result = false;
+				event.preventDefault();
+			}
+
+			// Bubble up to document, then to window
+			cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window;
+		} while ( cur && !event.isPropagationStopped() );
+
+		// If nobody prevented the default action, do it now
+		if ( !event.isDefaultPrevented() ) {
+			var old,
+				special = jQuery.event.special[ type ] || {};
+
+			if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) &&
+				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name name as the event.
+				// Can't use an .isFunction)() check here because IE6/7 fails that test.
+				// IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch.
+				try {
+					if ( ontype && elem[ type ] ) {
+						// Don't re-trigger an onFOO event when we call its FOO() method
+						old = elem[ ontype ];
+
+						if ( old ) {
+							elem[ ontype ] = null;
+						}
+
+						jQuery.event.triggered = type;
+						elem[ type ]();
+					}
+				} catch ( ieError ) {}
+
+				if ( old ) {
+					elem[ ontype ] = old;
+				}
+
+				jQuery.event.triggered = undefined;
+			}
+		}
+		
+		return event.result;
+	},
+
+	handle: function( event ) {
+		event = jQuery.event.fix( event || window.event );
+		// Snapshot the handlers list since a called handler may add/remove events.
+		var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0),
+			run_all = !event.exclusive && !event.namespace,
+			args = Array.prototype.slice.call( arguments, 0 );
+
+		// Use the fix-ed Event rather than the (read-only) native event
+		args[0] = event;
+		event.currentTarget = this;
+
+		for ( var j = 0, l = handlers.length; j < l; j++ ) {
+			var handleObj = handlers[ j ];
+
+			// Triggered event must 1) be non-exclusive and have no namespace, or
+			// 2) have namespace(s) a subset or equal to those in the bound event.
+			if ( run_all || event.namespace_re.test( handleObj.namespace ) ) {
+				// Pass in a reference to the handler function itself
+				// So that we can later remove it
+				event.handler = handleObj.handler;
+				event.data = handleObj.data;
+				event.handleObj = handleObj;
+
+				var ret = handleObj.handler.apply( this, args );
+
+				if ( ret !== undefined ) {
+					event.result = ret;
+					if ( ret === false ) {
+						event.preventDefault();
+						event.stopPropagation();
+					}
+				}
+
+				if ( event.isImmediatePropagationStopped() ) {
+					break;
+				}
+			}
+		}
+		return event.result;
+	},
+
+	props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+
+	fix: function( event ) {
+		if ( event[ jQuery.expando ] ) {
+			return event;
+		}
+
+		// store a copy of the original event object
+		// and "clone" to set read-only properties
+		var originalEvent = event;
+		event = jQuery.Event( originalEvent );
+
+		for ( var i = this.props.length, prop; i; ) {
+			prop = this.props[ --i ];
+			event[ prop ] = originalEvent[ prop ];
+		}
+
+		// Fix target property, if necessary
+		if ( !event.target ) {
+			// Fixes #1925 where srcElement might not be defined either
+			event.target = event.srcElement || document;
+		}
+
+		// check if target is a textnode (safari)
+		if ( event.target.nodeType === 3 ) {
+			event.target = event.target.parentNode;
+		}
+
+		// Add relatedTarget, if necessary
+		if ( !event.relatedTarget && event.fromElement ) {
+			event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
+		}
+
+		// Calculate pageX/Y if missing and clientX/Y available
+		if ( event.pageX == null && event.clientX != null ) {
+			var eventDocument = event.target.ownerDocument || document,
+				doc = eventDocument.documentElement,
+				body = eventDocument.body;
+
+			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
+			event.pageY = event.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);
+		}
+
+		// Add which for key events
+		if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
+			event.which = event.charCode != null ? event.charCode : event.keyCode;
+		}
+
+		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
+		if ( !event.metaKey && event.ctrlKey ) {
+			event.metaKey = event.ctrlKey;
+		}
+
+		// Add which for click: 1 === left; 2 === middle; 3 === right
+		// Note: button is not normalized, so don't use it
+		if ( !event.which && event.button !== undefined ) {
+			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
+		}
+
+		return event;
+	},
+
+	// Deprecated, use jQuery.guid instead
+	guid: 1E8,
+
+	// Deprecated, use jQuery.proxy instead
+	proxy: jQuery.proxy,
+
+	special: {
+		ready: {
+			// Make sure the ready event is setup
+			setup: jQuery.bindReady,
+			teardown: jQuery.noop
+		},
+
+		live: {
+			add: function( handleObj ) {
+				jQuery.event.add( this,
+					liveConvert( handleObj.origType, handleObj.selector ),
+					jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
+			},
+
+			remove: function( handleObj ) {
+				jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
+			}
+		},
+
+		beforeunload: {
+			setup: function( data, namespaces, eventHandle ) {
+				// We only want to do this special case on windows
+				if ( jQuery.isWindow( this ) ) {
+					this.onbeforeunload = eventHandle;
+				}
+			},
+
+			teardown: function( namespaces, eventHandle ) {
+				if ( this.onbeforeunload === eventHandle ) {
+					this.onbeforeunload = null;
+				}
+			}
+		}
+	}
+};
+
+jQuery.removeEvent = document.removeEventListener ?
+	function( elem, type, handle ) {
+		if ( elem.removeEventListener ) {
+			elem.removeEventListener( type, handle, false );
+		}
+	} :
+	function( elem, type, handle ) {
+		if ( elem.detachEvent ) {
+			elem.detachEvent( "on" + type, handle );
+		}
+	};
+
+jQuery.Event = function( src, props ) {
+	// Allow instantiation without the 'new' keyword
+	if ( !this.preventDefault ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
+			src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// timeStamp is buggy for some events on Firefox(#3843)
+	// So we won't rely on the native value
+	this.timeStamp = jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+function returnFalse() {
+	return false;
+}
+function returnTrue() {
+	return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	preventDefault: function() {
+		this.isDefaultPrevented = returnTrue;
+
+		var e = this.originalEvent;
+		if ( !e ) {
+			return;
+		}
+
+		// if preventDefault exists run it on the original event
+		if ( e.preventDefault ) {
+			e.preventDefault();
+
+		// otherwise set the returnValue property of the original event to false (IE)
+		} else {
+			e.returnValue = false;
+		}
+	},
+	stopPropagation: function() {
+		this.isPropagationStopped = returnTrue;
+
+		var e = this.originalEvent;
+		if ( !e ) {
+			return;
+		}
+		// if stopPropagation exists run it on the original event
+		if ( e.stopPropagation ) {
+			e.stopPropagation();
+		}
+		// otherwise set the cancelBubble property of the original event to true (IE)
+		e.cancelBubble = true;
+	},
+	stopImmediatePropagation: function() {
+		this.isImmediatePropagationStopped = returnTrue;
+		this.stopPropagation();
+	},
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse
+};
+
+// Checks if an event happened on an element within another element
+// Used in jQuery.event.special.mouseenter and mouseleave handlers
+var withinElement = function( event ) {
+	// Check if mouse(over|out) are still within the same parent element
+	var parent = event.relatedTarget;
+
+	// set the correct event type
+	event.type = event.data;
+
+	// Firefox sometimes assigns relatedTarget a XUL element
+	// which we cannot access the parentNode property of
+	try {
+
+		// Chrome does something similar, the parentNode property
+		// can be accessed but is null.
+		if ( parent && parent !== document && !parent.parentNode ) {
+			return;
+		}
+
+		// Traverse up the tree
+		while ( parent && parent !== this ) {
+			parent = parent.parentNode;
+		}
+
+		if ( parent !== this ) {
+			// handle event if we actually just moused on to a non sub-element
+			jQuery.event.handle.apply( this, arguments );
+		}
+
+	// assuming we've left the element since we most likely mousedover a xul element
+	} catch(e) { }
+},
+
+// In case of event delegation, we only need to rename the event.type,
+// liveHandler will take care of the rest.
+delegate = function( event ) {
+	event.type = event.data;
+	jQuery.event.handle.apply( this, arguments );
+};
+
+// Create mouseenter and mouseleave events
+jQuery.each({
+	mouseenter: "mouseover",
+	mouseleave: "mouseout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		setup: function( data ) {
+			jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
+		},
+		teardown: function( data ) {
+			jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
+		}
+	};
+});
+
+// submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+	jQuery.event.special.submit = {
+		setup: function( data, namespaces ) {
+			if ( !jQuery.nodeName( this, "form" ) ) {
+				jQuery.event.add(this, "click.specialSubmit", function( e ) {
+					var elem = e.target,
+						type = elem.type;
+
+					if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
+						trigger( "submit", this, arguments );
+					}
+				});
+
+				jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
+					var elem = e.target,
+						type = elem.type;
+
+					if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
+						trigger( "submit", this, arguments );
+					}
+				});
+
+			} else {
+				return false;
+			}
+		},
+
+		teardown: function( namespaces ) {
+			jQuery.event.remove( this, ".specialSubmit" );
+		}
+	};
+
+}
+
+// change delegation, happens here so we have bind.
+if ( !jQuery.support.changeBubbles ) {
+
+	var changeFilters,
+
+	getVal = function( elem ) {
+		var type = elem.type, val = elem.value;
+
+		if ( type === "radio" || type === "checkbox" ) {
+			val = elem.checked;
+
+		} else if ( type === "select-multiple" ) {
+			val = elem.selectedIndex > -1 ?
+				jQuery.map( elem.options, function( elem ) {
+					return elem.selected;
+				}).join("-") :
+				"";
+
+		} else if ( jQuery.nodeName( elem, "select" ) ) {
+			val = elem.selectedIndex;
+		}
+
+		return val;
+	},
+
+	testChange = function testChange( e ) {
+		var elem = e.target, data, val;
+
+		if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {
+			return;
+		}
+
+		data = jQuery._data( elem, "_change_data" );
+		val = getVal(elem);
+
+		// the current data will be also retrieved by beforeactivate
+		if ( e.type !== "focusout" || elem.type !== "radio" ) {
+			jQuery._data( elem, "_change_data", val );
+		}
+
+		if ( data === undefined || val === data ) {
+			return;
+		}
+
+		if ( data != null || val ) {
+			e.type = "change";
+			e.liveFired = undefined;
+			jQuery.event.trigger( e, arguments[1], elem );
+		}
+	};
+
+	jQuery.event.special.change = {
+		filters: {
+			focusout: testChange,
+
+			beforedeactivate: testChange,
+
+			click: function( e ) {
+				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
+
+				if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) {
+					testChange.call( this, e );
+				}
+			},
+
+			// Change has to be called before submit
+			// Keydown will be called before keypress, which is used in submit-event delegation
+			keydown: function( e ) {
+				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
+
+				if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) ||
+					(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
+					type === "select-multiple" ) {
+					testChange.call( this, e );
+				}
+			},
+
+			// Beforeactivate happens also before the previous element is blurred
+			// with this event you can't trigger a change event, but you can store
+			// information
+			beforeactivate: function( e ) {
+				var elem = e.target;
+				jQuery._data( elem, "_change_data", getVal(elem) );
+			}
+		},
+
+		setup: function( data, namespaces ) {
+			if ( this.type === "file" ) {
+				return false;
+			}
+
+			for ( var type in changeFilters ) {
+				jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
+			}
+
+			return rformElems.test( this.nodeName );
+		},
+
+		teardown: function( namespaces ) {
+			jQuery.event.remove( this, ".specialChange" );
+
+			return rformElems.test( this.nodeName );
+		}
+	};
+
+	changeFilters = jQuery.event.special.change.filters;
+
+	// Handle when the input is .focus()'d
+	changeFilters.focus = changeFilters.beforeactivate;
+}
+
+function trigger( type, elem, args ) {
+	// Piggyback on a donor event to simulate a different one.
+	// Fake originalEvent to avoid donor's stopPropagation, but if the
+	// simulated event prevents default then we do the same on the donor.
+	// Don't pass args or remember liveFired; they apply to the donor event.
+	var event = jQuery.extend( {}, args[ 0 ] );
+	event.type = type;
+	event.originalEvent = {};
+	event.liveFired = undefined;
+	jQuery.event.handle.call( elem, event );
+	if ( event.isDefaultPrevented() ) {
+		args[ 0 ].preventDefault();
+	}
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler while someone wants focusin/focusout
+		var attaches = 0;
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				if ( attaches++ === 0 ) {
+					document.addEventListener( orig, handler, true );
+				}
+			},
+			teardown: function() {
+				if ( --attaches === 0 ) {
+					document.removeEventListener( orig, handler, true );
+				}
+			}
+		};
+
+		function handler( donor ) {
+			// Donor event is always a native one; fix it and switch its type.
+			// Let focusin/out handler cancel the donor focus/blur event.
+			var e = jQuery.event.fix( donor );
+			e.type = fix;
+			e.originalEvent = {};
+			jQuery.event.trigger( e, null, e.target );
+			if ( e.isDefaultPrevented() ) {
+				donor.preventDefault();
+			}
+		}
+	});
+}
+
+jQuery.each(["bind", "one"], function( i, name ) {
+	jQuery.fn[ name ] = function( type, data, fn ) {
+		var handler;
+
+		// Handle object literals
+		if ( typeof type === "object" ) {
+			for ( var key in type ) {
+				this[ name ](key, data, type[key], fn);
+			}
+			return this;
+		}
+
+		if ( arguments.length === 2 || data === false ) {
+			fn = data;
+			data = undefined;
+		}
+
+		if ( name === "one" ) {
+			handler = function( event ) {
+				jQuery( this ).unbind( event, handler );
+				return fn.apply( this, arguments );
+			};
+			handler.guid = fn.guid || jQuery.guid++;
+		} else {
+			handler = fn;
+		}
+
+		if ( type === "unload" && name !== "one" ) {
+			this.one( type, data, fn );
+
+		} else {
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				jQuery.event.add( this[i], type, handler, data );
+			}
+		}
+
+		return this;
+	};
+});
+
+jQuery.fn.extend({
+	unbind: function( type, fn ) {
+		// Handle object literals
+		if ( typeof type === "object" && !type.preventDefault ) {
+			for ( var key in type ) {
+				this.unbind(key, type[key]);
+			}
+
+		} else {
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				jQuery.event.remove( this[i], type, fn );
+			}
+		}
+
+		return this;
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.live( types, data, fn, selector );
+	},
+
+	undelegate: function( selector, types, fn ) {
+		if ( arguments.length === 0 ) {
+			return this.unbind( "live" );
+
+		} else {
+			return this.die( types, null, fn, selector );
+		}
+	},
+
+	trigger: function( type, data ) {
+		return this.each(function() {
+			jQuery.event.trigger( type, data, this );
+		});
+	},
+
+	triggerHandler: function( type, data ) {
+		if ( this[0] ) {
+			return jQuery.event.trigger( type, data, this[0], true );
+		}
+	},
+
+	toggle: function( fn ) {
+		// Save reference to arguments for access in closure
+		var args = arguments,
+			guid = fn.guid || jQuery.guid++,
+			i = 0,
+			toggler = function( event ) {
+				// Figure out which function to execute
+				var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+				jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+				// Make sure that clicks stop
+				event.preventDefault();
+
+				// and execute the function
+				return args[ lastToggle ].apply( this, arguments ) || false;
+			};
+
+		// link all the functions, so any of them can unbind this click handler
+		toggler.guid = guid;
+		while ( i < args.length ) {
+			args[ i++ ].guid = guid;
+		}
+
+		return this.click( toggler );
+	},
+
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+});
+
+var liveMap = {
+	focus: "focusin",
+	blur: "focusout",
+	mouseenter: "mouseover",
+	mouseleave: "mouseout"
+};
+
+jQuery.each(["live", "die"], function( i, name ) {
+	jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
+		var type, i = 0, match, namespaces, preType,
+			selector = origSelector || this.selector,
+			context = origSelector ? this : jQuery( this.context );
+
+		if ( typeof types === "object" && !types.preventDefault ) {
+			for ( var key in types ) {
+				context[ name ]( key, data, types[key], selector );
+			}
+
+			return this;
+		}
+
+		if ( name === "die" && !types &&
+					origSelector && origSelector.charAt(0) === "." ) {
+
+			context.unbind( origSelector );
+
+			return this;
+		}
+
+		if ( data === false || jQuery.isFunction( data ) ) {
+			fn = data || returnFalse;
+			data = undefined;
+		}
+
+		types = (types || "").split(" ");
+
+		while ( (type = types[ i++ ]) != null ) {
+			match = rnamespaces.exec( type );
+			namespaces = "";
+
+			if ( match )  {
+				namespaces = match[0];
+				type = type.replace( rnamespaces, "" );
+			}
+
+			if ( type === "hover" ) {
+				types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
+				continue;
+			}
+
+			preType = type;
+
+			if ( liveMap[ type ] ) {
+				types.push( liveMap[ type ] + namespaces );
+				type = type + namespaces;
+
+			} else {
+				type = (liveMap[ type ] || type) + namespaces;
+			}
+
+			if ( name === "live" ) {
+				// bind live handler
+				for ( var j = 0, l = context.length; j < l; j++ ) {
+					jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
+						{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
+				}
+
+			} else {
+				// unbind live handler
+				context.unbind( "live." + liveConvert( type, selector ), fn );
+			}
+		}
+
+		return this;
+	};
+});
+
+function liveHandler( event ) {
+	var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
+		elems = [],
+		selectors = [],
+		events = jQuery._data( this, "events" );
+
+	// Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)
+	if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) {
+		return;
+	}
+
+	if ( event.namespace ) {
+		namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
+	}
+
+	event.liveFired = this;
+
+	var live = events.live.slice(0);
+
+	for ( j = 0; j < live.length; j++ ) {
+		handleObj = live[j];
+
+		if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
+			selectors.push( handleObj.selector );
+
+		} else {
+			live.splice( j--, 1 );
+		}
+	}
+
+	match = jQuery( event.target ).closest( selectors, event.currentTarget );
+
+	for ( i = 0, l = match.length; i < l; i++ ) {
+		close = match[i];
+
+		for ( j = 0; j < live.length; j++ ) {
+			handleObj = live[j];
+
+			if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {
+				elem = close.elem;
+				related = null;
+
+				// Those two events require additional checking
+				if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
+					event.type = handleObj.preType;
+					related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
+
+					// Make sure not to accidentally match a child element with the same selector
+					if ( related && jQuery.contains( elem, related ) ) {
+						related = elem;
+					}
+				}
+
+				if ( !related || related !== elem ) {
+					elems.push({ elem: elem, handleObj: handleObj, level: close.level });
+				}
+			}
+		}
+	}
+
+	for ( i = 0, l = elems.length; i < l; i++ ) {
+		match = elems[i];
+
+		if ( maxLevel && match.level > maxLevel ) {
+			break;
+		}
+
+		event.currentTarget = match.elem;
+		event.data = match.handleObj.data;
+		event.handleObj = match.handleObj;
+
+		ret = match.handleObj.origHandler.apply( match.elem, arguments );
+
+		if ( ret === false || event.isPropagationStopped() ) {
+			maxLevel = match.level;
+
+			if ( ret === false ) {
+				stop = false;
+			}
+			if ( event.isImmediatePropagationStopped() ) {
+				break;
+			}
+		}
+	}
+
+	return stop;
+}
+
+function liveConvert( type, selector ) {
+	return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&");
+}
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup error").split(" "), function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		if ( fn == null ) {
+			fn = data;
+			data = null;
+		}
+
+		return arguments.length > 0 ?
+			this.bind( name, data, fn ) :
+			this.trigger( name );
+	};
+
+	if ( jQuery.attrFn ) {
+		jQuery.attrFn[ name ] = true;
+	}
+});
+
+
+
+/*!
+ * Sizzle CSS Selector Engine
+ *  Copyright 2011, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+	done = 0,
+	toString = Object.prototype.toString,
+	hasDuplicate = false,
+	baseHasDuplicate = true,
+	rBackslash = /\\/g,
+	rNonWord = /\W/;
+
+// Here we check if the JavaScript engine is using some sort of
+// optimization where it does not always call our comparision
+// function. If that is the case, discard the hasDuplicate value.
+//   Thus far that includes Google Chrome.
+[0, 0].sort(function() {
+	baseHasDuplicate = false;
+	return 0;
+});
+
+var Sizzle = function( selector, context, results, seed ) {
+	results = results || [];
+	context = context || document;
+
+	var origContext = context;
+
+	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+		return [];
+	}
+	
+	if ( !selector || typeof selector !== "string" ) {
+		return results;
+	}
+
+	var m, set, checkSet, extra, ret, cur, pop, i,
+		prune = true,
+		contextXML = Sizzle.isXML( context ),
+		parts = [],
+		soFar = selector;
+	
+	// Reset the position of the chunker regexp (start from head)
+	do {
+		chunker.exec( "" );
+		m = chunker.exec( soFar );
+
+		if ( m ) {
+			soFar = m[3];
+		
+			parts.push( m[1] );
+		
+			if ( m[2] ) {
+				extra = m[3];
+				break;
+			}
+		}
+	} while ( m );
+
+	if ( parts.length > 1 && origPOS.exec( selector ) ) {
+
+		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+			set = posProcess( parts[0] + parts[1], context );
+
+		} else {
+			set = Expr.relative[ parts[0] ] ?
+				[ context ] :
+				Sizzle( parts.shift(), context );
+
+			while ( parts.length ) {
+				selector = parts.shift();
+
+				if ( Expr.relative[ selector ] ) {
+					selector += parts.shift();
+				}
+				
+				set = posProcess( selector, set );
+			}
+		}
+
+	} else {
+		// Take a shortcut and set the context if the root selector is an ID
+		// (but not if it'll be faster if the inner selector is an ID)
+		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+
+			ret = Sizzle.find( parts.shift(), context, contextXML );
+			context = ret.expr ?
+				Sizzle.filter( ret.expr, ret.set )[0] :
+				ret.set[0];
+		}
+
+		if ( context ) {
+			ret = seed ?
+				{ expr: parts.pop(), set: makeArray(seed) } :
+				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+
+			set = ret.expr ?
+				Sizzle.filter( ret.expr, ret.set ) :
+				ret.set;
+
+			if ( parts.length > 0 ) {
+				checkSet = makeArray( set );
+
+			} else {
+				prune = false;
+			}
+
+			while ( parts.length ) {
+				cur = parts.pop();
+				pop = cur;
+
+				if ( !Expr.relative[ cur ] ) {
+					cur = "";
+				} else {
+					pop = parts.pop();
+				}
+
+				if ( pop == null ) {
+					pop = context;
+				}
+
+				Expr.relative[ cur ]( checkSet, pop, contextXML );
+			}
+
+		} else {
+			checkSet = parts = [];
+		}
+	}
+
+	if ( !checkSet ) {
+		checkSet = set;
+	}
+
+	if ( !checkSet ) {
+		Sizzle.error( cur || selector );
+	}
+
+	if ( toString.call(checkSet) === "[object Array]" ) {
+		if ( !prune ) {
+			results.push.apply( results, checkSet );
+
+		} else if ( context && context.nodeType === 1 ) {
+			for ( i = 0; checkSet[i] != null; i++ ) {
+				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
+					results.push( set[i] );
+				}
+			}
+
+		} else {
+			for ( i = 0; checkSet[i] != null; i++ ) {
+				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+					results.push( set[i] );
+				}
+			}
+		}
+
+	} else {
+		makeArray( checkSet, results );
+	}
+
+	if ( extra ) {
+		Sizzle( extra, origContext, results, seed );
+		Sizzle.uniqueSort( results );
+	}
+
+	return results;
+};
+
+Sizzle.uniqueSort = function( results ) {
+	if ( sortOrder ) {
+		hasDuplicate = baseHasDuplicate;
+		results.sort( sortOrder );
+
+		if ( hasDuplicate ) {
+			for ( var i = 1; i < results.length; i++ ) {
+				if ( results[i] === results[ i - 1 ] ) {
+					results.splice( i--, 1 );
+				}
+			}
+		}
+	}
+
+	return results;
+};
+
+Sizzle.matches = function( expr, set ) {
+	return Sizzle( expr, null, null, set );
+};
+
+Sizzle.matchesSelector = function( node, expr ) {
+	return Sizzle( expr, null, null, [node] ).length > 0;
+};
+
+Sizzle.find = function( expr, context, isXML ) {
+	var set;
+
+	if ( !expr ) {
+		return [];
+	}
+
+	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
+		var match,
+			type = Expr.order[i];
+		
+		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+			var left = match[1];
+			match.splice( 1, 1 );
+
+			if ( left.substr( left.length - 1 ) !== "\\" ) {
+				match[1] = (match[1] || "").replace( rBackslash, "" );
+				set = Expr.find[ type ]( match, context, isXML );
+
+				if ( set != null ) {
+					expr = expr.replace( Expr.match[ type ], "" );
+					break;
+				}
+			}
+		}
+	}
+
+	if ( !set ) {
+		set = typeof context.getElementsByTagName !== "undefined" ?
+			context.getElementsByTagName( "*" ) :
+			[];
+	}
+
+	return { set: set, expr: expr };
+};
+
+Sizzle.filter = function( expr, set, inplace, not ) {
+	var match, anyFound,
+		old = expr,
+		result = [],
+		curLoop = set,
+		isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
+
+	while ( expr && set.length ) {
+		for ( var type in Expr.filter ) {
+			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+				var found, item,
+					filter = Expr.filter[ type ],
+					left = match[1];
+
+				anyFound = false;
+
+				match.splice(1,1);
+
+				if ( left.substr( left.length - 1 ) === "\\" ) {
+					continue;
+				}
+
+				if ( curLoop === result ) {
+					result = [];
+				}
+
+				if ( Expr.preFilter[ type ] ) {
+					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+					if ( !match ) {
+						anyFound = found = true;
+
+					} else if ( match === true ) {
+						continue;
+					}
+				}
+
+				if ( match ) {
+					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
+						if ( item ) {
+							found = filter( item, match, i, curLoop );
+							var pass = not ^ !!found;
+
+							if ( inplace && found != null ) {
+								if ( pass ) {
+									anyFound = true;
+
+								} else {
+									curLoop[i] = false;
+								}
+
+							} else if ( pass ) {
+								result.push( item );
+								anyFound = true;
+							}
+						}
+					}
+				}
+
+				if ( found !== undefined ) {
+					if ( !inplace ) {
+						curLoop = result;
+					}
+
+					expr = expr.replace( Expr.match[ type ], "" );
+
+					if ( !anyFound ) {
+						return [];
+					}
+
+					break;
+				}
+			}
+		}
+
+		// Improper expression
+		if ( expr === old ) {
+			if ( anyFound == null ) {
+				Sizzle.error( expr );
+
+			} else {
+				break;
+			}
+		}
+
+		old = expr;
+	}
+
+	return curLoop;
+};
+
+Sizzle.error = function( msg ) {
+	throw "Syntax error, unrecognized expression: " + msg;
+};
+
+var Expr = Sizzle.selectors = {
+	order: [ "ID", "NAME", "TAG" ],
+
+	match: {
+		ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+		CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
+		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
+		TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+		CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
+		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
+		PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+	},
+
+	leftMatch: {},
+
+	attrMap: {
+		"class": "className",
+		"for": "htmlFor"
+	},
+
+	attrHandle: {
+		href: function( elem ) {
+			return elem.getAttribute( "href" );
+		},
+		type: function( elem ) {
+			return elem.getAttribute( "type" );
+		}
+	},
+
+	relative: {
+		"+": function(checkSet, part){
+			var isPartStr = typeof part === "string",
+				isTag = isPartStr && !rNonWord.test( part ),
+				isPartStrNotTag = isPartStr && !isTag;
+
+			if ( isTag ) {
+				part = part.toLowerCase();
+			}
+
+			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+				if ( (elem = checkSet[i]) ) {
+					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+						elem || false :
+						elem === part;
+				}
+			}
+
+			if ( isPartStrNotTag ) {
+				Sizzle.filter( part, checkSet, true );
+			}
+		},
+
+		">": function( checkSet, part ) {
+			var elem,
+				isPartStr = typeof part === "string",
+				i = 0,
+				l = checkSet.length;
+
+			if ( isPartStr && !rNonWord.test( part ) ) {
+				part = part.toLowerCase();
+
+				for ( ; i < l; i++ ) {
+					elem = checkSet[i];
+
+					if ( elem ) {
+						var parent = elem.parentNode;
+						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+					}
+				}
+
+			} else {
+				for ( ; i < l; i++ ) {
+					elem = checkSet[i];
+
+					if ( elem ) {
+						checkSet[i] = isPartStr ?
+							elem.parentNode :
+							elem.parentNode === part;
+					}
+				}
+
+				if ( isPartStr ) {
+					Sizzle.filter( part, checkSet, true );
+				}
+			}
+		},
+
+		"": function(checkSet, part, isXML){
+			var nodeCheck,
+				doneName = done++,
+				checkFn = dirCheck;
+
+			if ( typeof part === "string" && !rNonWord.test( part ) ) {
+				part = part.toLowerCase();
+				nodeCheck = part;
+				checkFn = dirNodeCheck;
+			}
+
+			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
+		},
+
+		"~": function( checkSet, part, isXML ) {
+			var nodeCheck,
+				doneName = done++,
+				checkFn = dirCheck;
+
+			if ( typeof part === "string" && !rNonWord.test( part ) ) {
+				part = part.toLowerCase();
+				nodeCheck = part;
+				checkFn = dirNodeCheck;
+			}
+
+			checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
+		}
+	},
+
+	find: {
+		ID: function( match, context, isXML ) {
+			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+				var m = context.getElementById(match[1]);
+				// Check parentNode to catch when Blackberry 4.6 returns
+				// nodes that are no longer in the document #6963
+				return m && m.parentNode ? [m] : [];
+			}
+		},
+
+		NAME: function( match, context ) {
+			if ( typeof context.getElementsByName !== "undefined" ) {
+				var ret = [],
+					results = context.getElementsByName( match[1] );
+
+				for ( var i = 0, l = results.length; i < l; i++ ) {
+					if ( results[i].getAttribute("name") === match[1] ) {
+						ret.push( results[i] );
+					}
+				}
+
+				return ret.length === 0 ? null : ret;
+			}
+		},
+
+		TAG: function( match, context ) {
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
+				return context.getElementsByTagName( match[1] );
+			}
+		}
+	},
+	preFilter: {
+		CLASS: function( match, curLoop, inplace, result, not, isXML ) {
+			match = " " + match[1].replace( rBackslash, "" ) + " ";
+
+			if ( isXML ) {
+				return match;
+			}
+
+			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+				if ( elem ) {
+					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
+						if ( !inplace ) {
+							result.push( elem );
+						}
+
+					} else if ( inplace ) {
+						curLoop[i] = false;
+					}
+				}
+			}
+
+			return false;
+		},
+
+		ID: function( match ) {
+			return match[1].replace( rBackslash, "" );
+		},
+
+		TAG: function( match, curLoop ) {
+			return match[1].replace( rBackslash, "" ).toLowerCase();
+		},
+
+		CHILD: function( match ) {
+			if ( match[1] === "nth" ) {
+				if ( !match[2] ) {
+					Sizzle.error( match[0] );
+				}
+
+				match[2] = match[2].replace(/^\+|\s*/g, '');
+
+				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+				var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
+					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+				// calculate the numbers (first)n+(last) including if they are negative
+				match[2] = (test[1] + (test[2] || 1)) - 0;
+				match[3] = test[3] - 0;
+			}
+			else if ( match[2] ) {
+				Sizzle.error( match[0] );
+			}
+
+			// TODO: Move to normal caching system
+			match[0] = done++;
+
+			return match;
+		},
+
+		ATTR: function( match, curLoop, inplace, result, not, isXML ) {
+			var name = match[1] = match[1].replace( rBackslash, "" );
+			
+			if ( !isXML && Expr.attrMap[name] ) {
+				match[1] = Expr.attrMap[name];
+			}
+
+			// Handle if an un-quoted value was used
+			match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
+
+			if ( match[2] === "~=" ) {
+				match[4] = " " + match[4] + " ";
+			}
+
+			return match;
+		},
+
+		PSEUDO: function( match, curLoop, inplace, result, not ) {
+			if ( match[1] === "not" ) {
+				// If we're dealing with a complex expression, or a simple one
+				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+					match[3] = Sizzle(match[3], null, null, curLoop);
+
+				} else {
+					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+
+					if ( !inplace ) {
+						result.push.apply( result, ret );
+					}
+
+					return false;
+				}
+
+			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+				return true;
+			}
+			
+			return match;
+		},
+
+		POS: function( match ) {
+			match.unshift( true );
+
+			return match;
+		}
+	},
+	
+	filters: {
+		enabled: function( elem ) {
+			return elem.disabled === false && elem.type !== "hidden";
+		},
+
+		disabled: function( elem ) {
+			return elem.disabled === true;
+		},
+
+		checked: function( elem ) {
+			return elem.checked === true;
+		},
+		
+		selected: function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+			
+			return elem.selected === true;
+		},
+
+		parent: function( elem ) {
+			return !!elem.firstChild;
+		},
+
+		empty: function( elem ) {
+			return !elem.firstChild;
+		},
+
+		has: function( elem, i, match ) {
+			return !!Sizzle( match[3], elem ).length;
+		},
+
+		header: function( elem ) {
+			return (/h\d/i).test( elem.nodeName );
+		},
+
+		text: function( elem ) {
+			var attr = elem.getAttribute( "type" ), type = elem.type;
+			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 
+			// use getAttribute instead to test this case
+			return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
+		},
+
+		radio: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
+		},
+
+		checkbox: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
+		},
+
+		file: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
+		},
+
+		password: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
+		},
+
+		submit: function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return (name === "input" || name === "button") && "submit" === elem.type;
+		},
+
+		image: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
+		},
+
+		reset: function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return (name === "input" || name === "button") && "reset" === elem.type;
+		},
+
+		button: function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && "button" === elem.type || name === "button";
+		},
+
+		input: function( elem ) {
+			return (/input|select|textarea|button/i).test( elem.nodeName );
+		},
+
+		focus: function( elem ) {
+			return elem === elem.ownerDocument.activeElement;
+		}
+	},
+	setFilters: {
+		first: function( elem, i ) {
+			return i === 0;
+		},
+
+		last: function( elem, i, match, array ) {
+			return i === array.length - 1;
+		},
+
+		even: function( elem, i ) {
+			return i % 2 === 0;
+		},
+
+		odd: function( elem, i ) {
+			return i % 2 === 1;
+		},
+
+		lt: function( elem, i, match ) {
+			return i < match[3] - 0;
+		},
+
+		gt: function( elem, i, match ) {
+			return i > match[3] - 0;
+		},
+
+		nth: function( elem, i, match ) {
+			return match[3] - 0 === i;
+		},
+
+		eq: function( elem, i, match ) {
+			return match[3] - 0 === i;
+		}
+	},
+	filter: {
+		PSEUDO: function( elem, match, i, array ) {
+			var name = match[1],
+				filter = Expr.filters[ name ];
+
+			if ( filter ) {
+				return filter( elem, i, match, array );
+
+			} else if ( name === "contains" ) {
+				return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
+
+			} else if ( name === "not" ) {
+				var not = match[3];
+
+				for ( var j = 0, l = not.length; j < l; j++ ) {
+					if ( not[j] === elem ) {
+						return false;
+					}
+				}
+
+				return true;
+
+			} else {
+				Sizzle.error( name );
+			}
+		},
+
+		CHILD: function( elem, match ) {
+			var type = match[1],
+				node = elem;
+
+			switch ( type ) {
+				case "only":
+				case "first":
+					while ( (node = node.previousSibling) )	 {
+						if ( node.nodeType === 1 ) { 
+							return false; 
+						}
+					}
+
+					if ( type === "first" ) { 
+						return true; 
+					}
+
+					node = elem;
+
+				case "last":
+					while ( (node = node.nextSibling) )	 {
+						if ( node.nodeType === 1 ) { 
+							return false; 
+						}
+					}
+
+					return true;
+
+				case "nth":
+					var first = match[2],
+						last = match[3];
+
+					if ( first === 1 && last === 0 ) {
+						return true;
+					}
+					
+					var doneName = match[0],
+						parent = elem.parentNode;
+	
+					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
+						var count = 0;
+						
+						for ( node = parent.firstChild; node; node = node.nextSibling ) {
+							if ( node.nodeType === 1 ) {
+								node.nodeIndex = ++count;
+							}
+						} 
+
+						parent.sizcache = doneName;
+					}
+					
+					var diff = elem.nodeIndex - last;
+
+					if ( first === 0 ) {
+						return diff === 0;
+
+					} else {
+						return ( diff % first === 0 && diff / first >= 0 );
+					}
+			}
+		},
+
+		ID: function( elem, match ) {
+			return elem.nodeType === 1 && elem.getAttribute("id") === match;
+		},
+
+		TAG: function( elem, match ) {
+			return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
+		},
+		
+		CLASS: function( elem, match ) {
+			return (" " + (elem.className || elem.getAttribute("class")) + " ")
+				.indexOf( match ) > -1;
+		},
+
+		ATTR: function( elem, match ) {
+			var name = match[1],
+				result = Expr.attrHandle[ name ] ?
+					Expr.attrHandle[ name ]( elem ) :
+					elem[ name ] != null ?
+						elem[ name ] :
+						elem.getAttribute( name ),
+				value = result + "",
+				type = match[2],
+				check = match[4];
+
+			return result == null ?
+				type === "!=" :
+				type === "=" ?
+				value === check :
+				type === "*=" ?
+				value.indexOf(check) >= 0 :
+				type === "~=" ?
+				(" " + value + " ").indexOf(check) >= 0 :
+				!check ?
+				value && result !== false :
+				type === "!=" ?
+				value !== check :
+				type === "^=" ?
+				value.indexOf(check) === 0 :
+				type === "$=" ?
+				value.substr(value.length - check.length) === check :
+				type === "|=" ?
+				value === check || value.substr(0, check.length + 1) === check + "-" :
+				false;
+		},
+
+		POS: function( elem, match, i, array ) {
+			var name = match[2],
+				filter = Expr.setFilters[ name ];
+
+			if ( filter ) {
+				return filter( elem, i, match, array );
+			}
+		}
+	}
+};
+
+var origPOS = Expr.match.POS,
+	fescape = function(all, num){
+		return "\\" + (num - 0 + 1);
+	};
+
+for ( var type in Expr.match ) {
+	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
+	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
+}
+
+var makeArray = function( array, results ) {
+	array = Array.prototype.slice.call( array, 0 );
+
+	if ( results ) {
+		results.push.apply( results, array );
+		return results;
+	}
+	
+	return array;
+};
+
+// Perform a simple check to determine if the browser is capable of
+// converting a NodeList to an array using builtin methods.
+// Also verifies that the returned array holds DOM nodes
+// (which is not the case in the Blackberry browser)
+try {
+	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+
+// Provide a fallback method if it does not work
+} catch( e ) {
+	makeArray = function( array, results ) {
+		var i = 0,
+			ret = results || [];
+
+		if ( toString.call(array) === "[object Array]" ) {
+			Array.prototype.push.apply( ret, array );
+
+		} else {
+			if ( typeof array.length === "number" ) {
+				for ( var l = array.length; i < l; i++ ) {
+					ret.push( array[i] );
+				}
+
+			} else {
+				for ( ; array[i]; i++ ) {
+					ret.push( array[i] );
+				}
+			}
+		}
+
+		return ret;
+	};
+}
+
+var sortOrder, siblingCheck;
+
+if ( document.documentElement.compareDocumentPosition ) {
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+			return a.compareDocumentPosition ? -1 : 1;
+		}
+
+		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
+	};
+
+} else {
+	sortOrder = function( a, b ) {
+		// The nodes are identical, we can exit early
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+
+		// Fallback to using sourceIndex (in IE) if it's available on both nodes
+		} else if ( a.sourceIndex && b.sourceIndex ) {
+			return a.sourceIndex - b.sourceIndex;
+		}
+
+		var al, bl,
+			ap = [],
+			bp = [],
+			aup = a.parentNode,
+			bup = b.parentNode,
+			cur = aup;
+
+		// If the nodes are siblings (or identical) we can do a quick check
+		if ( aup === bup ) {
+			return siblingCheck( a, b );
+
+		// If no parents were found then the nodes are disconnected
+		} else if ( !aup ) {
+			return -1;
+
+		} else if ( !bup ) {
+			return 1;
+		}
+
+		// Otherwise they're somewhere else in the tree so we need
+		// to build up a full list of the parentNodes for comparison
+		while ( cur ) {
+			ap.unshift( cur );
+			cur = cur.parentNode;
+		}
+
+		cur = bup;
+
+		while ( cur ) {
+			bp.unshift( cur );
+			cur = cur.parentNode;
+		}
+
+		al = ap.length;
+		bl = bp.length;
+
+		// Start walking down the tree looking for a discrepancy
+		for ( var i = 0; i < al && i < bl; i++ ) {
+			if ( ap[i] !== bp[i] ) {
+				return siblingCheck( ap[i], bp[i] );
+			}
+		}
+
+		// We ended someplace up the tree so do a sibling check
+		return i === al ?
+			siblingCheck( a, bp[i], -1 ) :
+			siblingCheck( ap[i], b, 1 );
+	};
+
+	siblingCheck = function( a, b, ret ) {
+		if ( a === b ) {
+			return ret;
+		}
+
+		var cur = a.nextSibling;
+
+		while ( cur ) {
+			if ( cur === b ) {
+				return -1;
+			}
+
+			cur = cur.nextSibling;
+		}
+
+		return 1;
+	};
+}
+
+// Utility function for retreiving the text value of an array of DOM nodes
+Sizzle.getText = function( elems ) {
+	var ret = "", elem;
+
+	for ( var i = 0; elems[i]; i++ ) {
+		elem = elems[i];
+
+		// Get the text from text nodes and CDATA nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
+			ret += elem.nodeValue;
+
+		// Traverse everything else, except comment nodes
+		} else if ( elem.nodeType !== 8 ) {
+			ret += Sizzle.getText( elem.childNodes );
+		}
+	}
+
+	return ret;
+};
+
+// Check to see if the browser returns elements by name when
+// querying by getElementById (and provide a workaround)
+(function(){
+	// We're going to inject a fake input element with a specified name
+	var form = document.createElement("div"),
+		id = "script" + (new Date()).getTime(),
+		root = document.documentElement;
+
+	form.innerHTML = "<a name='" + id + "'/>";
+
+	// Inject it into the root element, check its status, and remove it quickly
+	root.insertBefore( form, root.firstChild );
+
+	// The workaround has to do additional checks after a getElementById
+	// Which slows things down for other browsers (hence the branching)
+	if ( document.getElementById( id ) ) {
+		Expr.find.ID = function( match, context, isXML ) {
+			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+				var m = context.getElementById(match[1]);
+
+				return m ?
+					m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
+						[m] :
+						undefined :
+					[];
+			}
+		};
+
+		Expr.filter.ID = function( elem, match ) {
+			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+
+			return elem.nodeType === 1 && node && node.nodeValue === match;
+		};
+	}
+
+	root.removeChild( form );
+
+	// release memory in IE
+	root = form = null;
+})();
+
+(function(){
+	// Check to see if the browser returns only elements
+	// when doing getElementsByTagName("*")
+
+	// Create a fake element
+	var div = document.createElement("div");
+	div.appendChild( document.createComment("") );
+
+	// Make sure no comments are found
+	if ( div.getElementsByTagName("*").length > 0 ) {
+		Expr.find.TAG = function( match, context ) {
+			var results = context.getElementsByTagName( match[1] );
+
+			// Filter out possible comments
+			if ( match[1] === "*" ) {
+				var tmp = [];
+
+				for ( var i = 0; results[i]; i++ ) {
+					if ( results[i].nodeType === 1 ) {
+						tmp.push( results[i] );
+					}
+				}
+
+				results = tmp;
+			}
+
+			return results;
+		};
+	}
+
+	// Check to see if an attribute returns normalized href attributes
+	div.innerHTML = "<a href='#'></a>";
+
+	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+			div.firstChild.getAttribute("href") !== "#" ) {
+
+		Expr.attrHandle.href = function( elem ) {
+			return elem.getAttribute( "href", 2 );
+		};
+	}
+
+	// release memory in IE
+	div = null;
+})();
+
+if ( document.querySelectorAll ) {
+	(function(){
+		var oldSizzle = Sizzle,
+			div = document.createElement("div"),
+			id = "__sizzle__";
+
+		div.innerHTML = "<p class='TEST'></p>";
+
+		// Safari can't handle uppercase or unicode characters when
+		// in quirks mode.
+		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+			return;
+		}
+	
+		Sizzle = function( query, context, extra, seed ) {
+			context = context || document;
+
+			// Only use querySelectorAll on non-XML documents
+			// (ID selectors don't work in non-HTML documents)
+			if ( !seed && !Sizzle.isXML(context) ) {
+				// See if we find a selector to speed up
+				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
+				
+				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
+					// Speed-up: Sizzle("TAG")
+					if ( match[1] ) {
+						return makeArray( context.getElementsByTagName( query ), extra );
+					
+					// Speed-up: Sizzle(".CLASS")
+					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
+						return makeArray( context.getElementsByClassName( match[2] ), extra );
+					}
+				}
+				
+				if ( context.nodeType === 9 ) {
+					// Speed-up: Sizzle("body")
+					// The body element only exists once, optimize finding it
+					if ( query === "body" && context.body ) {
+						return makeArray( [ context.body ], extra );
+						
+					// Speed-up: Sizzle("#ID")
+					} else if ( match && match[3] ) {
+						var elem = context.getElementById( match[3] );
+
+						// Check parentNode to catch when Blackberry 4.6 returns
+						// nodes that are no longer in the document #6963
+						if ( elem && elem.parentNode ) {
+							// Handle the case where IE and Opera return items
+							// by name instead of ID
+							if ( elem.id === match[3] ) {
+								return makeArray( [ elem ], extra );
+							}
+							
+						} else {
+							return makeArray( [], extra );
+						}
+					}
+					
+					try {
+						return makeArray( context.querySelectorAll(query), extra );
+					} catch(qsaError) {}
+
+				// qSA works strangely on Element-rooted queries
+				// We can work around this by specifying an extra ID on the root
+				// and working up from there (Thanks to Andrew Dupont for the technique)
+				// IE 8 doesn't work on object elements
+				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+					var oldContext = context,
+						old = context.getAttribute( "id" ),
+						nid = old || id,
+						hasParent = context.parentNode,
+						relativeHierarchySelector = /^\s*[+~]/.test( query );
+
+					if ( !old ) {
+						context.setAttribute( "id", nid );
+					} else {
+						nid = nid.replace( /'/g, "\\$&" );
+					}
+					if ( relativeHierarchySelector && hasParent ) {
+						context = context.parentNode;
+					}
+
+					try {
+						if ( !relativeHierarchySelector || hasParent ) {
+							return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
+						}
+
+					} catch(pseudoError) {
+					} finally {
+						if ( !old ) {
+							oldContext.removeAttribute( "id" );
+						}
+					}
+				}
+			}
+		
+			return oldSizzle(query, context, extra, seed);
+		};
+
+		for ( var prop in oldSizzle ) {
+			Sizzle[ prop ] = oldSizzle[ prop ];
+		}
+
+		// release memory in IE
+		div = null;
+	})();
+}
+
+(function(){
+	var html = document.documentElement,
+		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
+
+	if ( matches ) {
+		// Check to see if it's possible to do matchesSelector
+		// on a disconnected node (IE 9 fails this)
+		var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
+			pseudoWorks = false;
+
+		try {
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( document.documentElement, "[test!='']:sizzle" );
+	
+		} catch( pseudoError ) {
+			pseudoWorks = true;
+		}
+
+		Sizzle.matchesSelector = function( node, expr ) {
+			// Make sure that attribute selectors are quoted
+			expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+
+			if ( !Sizzle.isXML( node ) ) {
+				try { 
+					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
+						var ret = matches.call( node, expr );
+
+						// IE 9's matchesSelector returns false on disconnected nodes
+						if ( ret || !disconnectedMatch ||
+								// As well, disconnected nodes are said to be in a document
+								// fragment in IE 9, so check for that
+								node.document && node.document.nodeType !== 11 ) {
+							return ret;
+						}
+					}
+				} catch(e) {}
+			}
+
+			return Sizzle(expr, null, null, [node]).length > 0;
+		};
+	}
+})();
+
+(function(){
+	var div = document.createElement("div");
+
+	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+
+	// Opera can't find a second classname (in 9.6)
+	// Also, make sure that getElementsByClassName actually exists
+	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+		return;
+	}
+
+	// Safari caches class attributes, doesn't catch changes (in 3.2)
+	div.lastChild.className = "e";
+
+	if ( div.getElementsByClassName("e").length === 1 ) {
+		return;
+	}
+	
+	Expr.order.splice(1, 0, "CLASS");
+	Expr.find.CLASS = function( match, context, isXML ) {
+		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+			return context.getElementsByClassName(match[1]);
+		}
+	};
+
+	// release memory in IE
+	div = null;
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+		var elem = checkSet[i];
+
+		if ( elem ) {
+			var match = false;
+
+			elem = elem[dir];
+
+			while ( elem ) {
+				if ( elem.sizcache === doneName ) {
+					match = checkSet[elem.sizset];
+					break;
+				}
+
+				if ( elem.nodeType === 1 && !isXML ){
+					elem.sizcache = doneName;
+					elem.sizset = i;
+				}
+
+				if ( elem.nodeName.toLowerCase() === cur ) {
+					match = elem;
+					break;
+				}
+
+				elem = elem[dir];
+			}
+
+			checkSet[i] = match;
+		}
+	}
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+		var elem = checkSet[i];
+
+		if ( elem ) {
+			var match = false;
+			
+			elem = elem[dir];
+
+			while ( elem ) {
+				if ( elem.sizcache === doneName ) {
+					match = checkSet[elem.sizset];
+					break;
+				}
+
+				if ( elem.nodeType === 1 ) {
+					if ( !isXML ) {
+						elem.sizcache = doneName;
+						elem.sizset = i;
+					}
+
+					if ( typeof cur !== "string" ) {
+						if ( elem === cur ) {
+							match = true;
+							break;
+						}
+
+					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+						match = elem;
+						break;
+					}
+				}
+
+				elem = elem[dir];
+			}
+
+			checkSet[i] = match;
+		}
+	}
+}
+
+if ( document.documentElement.contains ) {
+	Sizzle.contains = function( a, b ) {
+		return a !== b && (a.contains ? a.contains(b) : true);
+	};
+
+} else if ( document.documentElement.compareDocumentPosition ) {
+	Sizzle.contains = function( a, b ) {
+		return !!(a.compareDocumentPosition(b) & 16);
+	};
+
+} else {
+	Sizzle.contains = function() {
+		return false;
+	};
+}
+
+Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833) 
+	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+var posProcess = function( selector, context ) {
+	var match,
+		tmpSet = [],
+		later = "",
+		root = context.nodeType ? [context] : context;
+
+	// Position selectors must be done after the filter
+	// And so must :not(positional) so we move all PSEUDOs to the end
+	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+		later += match[0];
+		selector = selector.replace( Expr.match.PSEUDO, "" );
+	}
+
+	selector = Expr.relative[selector] ? selector + "*" : selector;
+
+	for ( var i = 0, l = root.length; i < l; i++ ) {
+		Sizzle( selector, root[i], tmpSet );
+	}
+
+	return Sizzle.filter( later, tmpSet );
+};
+
+// EXPOSE
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.filters;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})();
+
+
+var runtil = /Until$/,
+	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+	// Note: This RegExp should be improved, or likely pulled from Sizzle
+	rmultiselector = /,/,
+	isSimple = /^.[^:#\[\.,]*$/,
+	slice = Array.prototype.slice,
+	POS = jQuery.expr.match.POS,
+	// methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend({
+	find: function( selector ) {
+		var self = this,
+			i, l;
+
+		if ( typeof selector !== "string" ) {
+			return jQuery( selector ).filter(function() {
+				for ( i = 0, l = self.length; i < l; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			});
+		}
+
+		var ret = this.pushStack( "", "find", selector ),
+			length, n, r;
+
+		for ( i = 0, l = this.length; i < l; i++ ) {
+			length = ret.length;
+			jQuery.find( selector, this[i], ret );
+
+			if ( i > 0 ) {
+				// Make sure that the results are unique
+				for ( n = length; n < ret.length; n++ ) {
+					for ( r = 0; r < length; r++ ) {
+						if ( ret[r] === ret[n] ) {
+							ret.splice(n--, 1);
+							break;
+						}
+					}
+				}
+			}
+		}
+
+		return ret;
+	},
+
+	has: function( target ) {
+		var targets = jQuery( target );
+		return this.filter(function() {
+			for ( var i = 0, l = targets.length; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[i] ) ) {
+					return true;
+				}
+			}
+		});
+	},
+
+	not: function( selector ) {
+		return this.pushStack( winnow(this, selector, false), "not", selector);
+	},
+
+	filter: function( selector ) {
+		return this.pushStack( winnow(this, selector, true), "filter", selector );
+	},
+
+	is: function( selector ) {
+		return !!selector && ( typeof selector === "string" ?
+			jQuery.filter( selector, this ).length > 0 :
+			this.filter( selector ).length > 0 );
+	},
+
+	closest: function( selectors, context ) {
+		var ret = [], i, l, cur = this[0];
+		
+		// Array
+		if ( jQuery.isArray( selectors ) ) {
+			var match, selector,
+				matches = {},
+				level = 1;
+
+			if ( cur && selectors.length ) {
+				for ( i = 0, l = selectors.length; i < l; i++ ) {
+					selector = selectors[i];
+
+					if ( !matches[ selector ] ) {
+						matches[ selector ] = POS.test( selector ) ?
+							jQuery( selector, context || this.context ) :
+							selector;
+					}
+				}
+
+				while ( cur && cur.ownerDocument && cur !== context ) {
+					for ( selector in matches ) {
+						match = matches[ selector ];
+
+						if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) {
+							ret.push({ selector: selector, elem: cur, level: level });
+						}
+					}
+
+					cur = cur.parentNode;
+					level++;
+				}
+			}
+
+			return ret;
+		}
+
+		// String
+		var pos = POS.test( selectors ) || typeof selectors !== "string" ?
+				jQuery( selectors, context || this.context ) :
+				0;
+
+		for ( i = 0, l = this.length; i < l; i++ ) {
+			cur = this[i];
+
+			while ( cur ) {
+				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+					ret.push( cur );
+					break;
+
+				} else {
+					cur = cur.parentNode;
+					if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
+						break;
+					}
+				}
+			}
+		}
+
+		ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
+
+		return this.pushStack( ret, "closest", selectors );
+	},
+
+	// Determine the position of an element within
+	// the matched set of elements
+	index: function( elem ) {
+		if ( !elem || typeof elem === "string" ) {
+			return jQuery.inArray( this[0],
+				// If it receives a string, the selector is used
+				// If it receives nothing, the siblings are used
+				elem ? jQuery( elem ) : this.parent().children() );
+		}
+		// Locate the position of the desired element
+		return jQuery.inArray(
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[0] : elem, this );
+	},
+
+	add: function( selector, context ) {
+		var set = typeof selector === "string" ?
+				jQuery( selector, context ) :
+				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+			all = jQuery.merge( this.get(), set );
+
+		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+			all :
+			jQuery.unique( all ) );
+	},
+
+	andSelf: function() {
+		return this.add( this.prevObject );
+	}
+});
+
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+	return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+jQuery.each({
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return jQuery.dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return jQuery.nth( elem, 2, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return jQuery.nth( elem, 2, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return jQuery.dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return jQuery.dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return jQuery.sibling( elem.parentNode.firstChild, elem );
+	},
+	children: function( elem ) {
+		return jQuery.sibling( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return jQuery.nodeName( elem, "iframe" ) ?
+			elem.contentDocument || elem.contentWindow.document :
+			jQuery.makeArray( elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var ret = jQuery.map( this, fn, until ),
+			// The variable 'args' was introduced in
+			// https://github.com/jquery/jquery/commit/52a0238
+			// to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
+			// http://code.google.com/p/v8/issues/detail?id=1050
+			args = slice.call(arguments);
+
+		if ( !runtil.test( name ) ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			ret = jQuery.filter( selector, ret );
+		}
+
+		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+			ret = ret.reverse();
+		}
+
+		return this.pushStack( ret, name, args.join(",") );
+	};
+});
+
+jQuery.extend({
+	filter: function( expr, elems, not ) {
+		if ( not ) {
+			expr = ":not(" + expr + ")";
+		}
+
+		return elems.length === 1 ?
+			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+			jQuery.find.matches(expr, elems);
+	},
+
+	dir: function( elem, dir, until ) {
+		var matched = [],
+			cur = elem[ dir ];
+
+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+			if ( cur.nodeType === 1 ) {
+				matched.push( cur );
+			}
+			cur = cur[dir];
+		}
+		return matched;
+	},
+
+	nth: function( cur, result, dir, elem ) {
+		result = result || 1;
+		var num = 0;
+
+		for ( ; cur; cur = cur[dir] ) {
+			if ( cur.nodeType === 1 && ++num === result ) {
+				break;
+			}
+		}
+
+		return cur;
+	},
+
+	sibling: function( n, elem ) {
+		var r = [];
+
+		for ( ; n; n = n.nextSibling ) {
+			if ( n.nodeType === 1 && n !== elem ) {
+				r.push( n );
+			}
+		}
+
+		return r;
+	}
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+	// Can't pass null or undefined to indexOf in Firefox 4
+	// Set to 0 to skip string check
+	qualifier = qualifier || 0;
+
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			var retVal = !!qualifier.call( elem, i, elem );
+			return retVal === keep;
+		});
+
+	} else if ( qualifier.nodeType ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			return (elem === qualifier) === keep;
+		});
+
+	} else if ( typeof qualifier === "string" ) {
+		var filtered = jQuery.grep(elements, function( elem ) {
+			return elem.nodeType === 1;
+		});
+
+		if ( isSimple.test( qualifier ) ) {
+			return jQuery.filter(qualifier, filtered, !keep);
+		} else {
+			qualifier = jQuery.filter( qualifier, filtered );
+		}
+	}
+
+	return jQuery.grep(elements, function( elem, i ) {
+		return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
+	});
+}
+
+
+
+
+var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+	rleadingWhitespace = /^\s+/,
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+	rtagName = /<([\w:]+)/,
+	rtbody = /<tbody/i,
+	rhtml = /<|&#?\w+;/,
+	rnocache = /<(?:script|object|embed|option|style)/i,
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptType = /\/(java|ecma)script/i,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
+	wrapMap = {
+		option: [ 1, "<select multiple='multiple'>", "</select>" ],
+		legend: [ 1, "<fieldset>", "</fieldset>" ],
+		thead: [ 1, "<table>", "</table>" ],
+		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+		area: [ 1, "<map>", "</map>" ],
+		_default: [ 0, "", "" ]
+	};
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// IE can't serialize <link> and <script> tags normally
+if ( !jQuery.support.htmlSerialize ) {
+	wrapMap._default = [ 1, "div<div>", "</div>" ];
+}
+
+jQuery.fn.extend({
+	text: function( text ) {
+		if ( jQuery.isFunction(text) ) {
+			return this.each(function(i) {
+				var self = jQuery( this );
+
+				self.text( text.call(this, i, self.text()) );
+			});
+		}
+
+		if ( typeof text !== "object" && text !== undefined ) {
+			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+		}
+
+		return jQuery.text( this );
+	},
+
+	wrapAll: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapAll( html.call(this, i) );
+			});
+		}
+
+		if ( this[0] ) {
+			// The elements to wrap the target around
+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+			if ( this[0].parentNode ) {
+				wrap.insertBefore( this[0] );
+			}
+
+			wrap.map(function() {
+				var elem = this;
+
+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+					elem = elem.firstChild;
+				}
+
+				return elem;
+			}).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapInner( html.call(this, i) );
+			});
+		}
+
+		return this.each(function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		});
+	},
+
+	wrap: function( html ) {
+		return this.each(function() {
+			jQuery( this ).wrapAll( html );
+		});
+	},
+
+	unwrap: function() {
+		return this.parent().each(function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		}).end();
+	},
+
+	append: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 ) {
+				this.appendChild( elem );
+			}
+		});
+	},
+
+	prepend: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 ) {
+				this.insertBefore( elem, this.firstChild );
+			}
+		});
+	},
+
+	before: function() {
+		if ( this[0] && this[0].parentNode ) {
+			return this.domManip(arguments, false, function( elem ) {
+				this.parentNode.insertBefore( elem, this );
+			});
+		} else if ( arguments.length ) {
+			var set = jQuery(arguments[0]);
+			set.push.apply( set, this.toArray() );
+			return this.pushStack( set, "before", arguments );
+		}
+	},
+
+	after: function() {
+		if ( this[0] && this[0].parentNode ) {
+			return this.domManip(arguments, false, function( elem ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			});
+		} else if ( arguments.length ) {
+			var set = this.pushStack( this, "after", arguments );
+			set.push.apply( set, jQuery(arguments[0]).toArray() );
+			return set;
+		}
+	},
+
+	// keepData is for internal use only--do not document
+	remove: function( selector, keepData ) {
+		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+				if ( !keepData && elem.nodeType === 1 ) {
+					jQuery.cleanData( elem.getElementsByTagName("*") );
+					jQuery.cleanData( [ elem ] );
+				}
+
+				if ( elem.parentNode ) {
+					elem.parentNode.removeChild( elem );
+				}
+			}
+		}
+
+		return this;
+	},
+
+	empty: function() {
+		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+			// Remove element nodes and prevent memory leaks
+			if ( elem.nodeType === 1 ) {
+				jQuery.cleanData( elem.getElementsByTagName("*") );
+			}
+
+			// Remove any remaining nodes
+			while ( elem.firstChild ) {
+				elem.removeChild( elem.firstChild );
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function () {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		});
+	},
+
+	html: function( value ) {
+		if ( value === undefined ) {
+			return this[0] && this[0].nodeType === 1 ?
+				this[0].innerHTML.replace(rinlinejQuery, "") :
+				null;
+
+		// See if we can take a shortcut and just use innerHTML
+		} else if ( typeof value === "string" && !rnocache.test( value ) &&
+			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
+			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
+
+			value = value.replace(rxhtmlTag, "<$1></$2>");
+
+			try {
+				for ( var i = 0, l = this.length; i < l; i++ ) {
+					// Remove element nodes and prevent memory leaks
+					if ( this[i].nodeType === 1 ) {
+						jQuery.cleanData( this[i].getElementsByTagName("*") );
+						this[i].innerHTML = value;
+					}
+				}
+
+			// If using innerHTML throws an exception, use the fallback method
+			} catch(e) {
+				this.empty().append( value );
+			}
+
+		} else if ( jQuery.isFunction( value ) ) {
+			this.each(function(i){
+				var self = jQuery( this );
+
+				self.html( value.call(this, i, self.html()) );
+			});
+
+		} else {
+			this.empty().append( value );
+		}
+
+		return this;
+	},
+
+	replaceWith: function( value ) {
+		if ( this[0] && this[0].parentNode ) {
+			// Make sure that the elements are removed from the DOM before they are inserted
+			// this can help fix replacing a parent with child elements
+			if ( jQuery.isFunction( value ) ) {
+				return this.each(function(i) {
+					var self = jQuery(this), old = self.html();
+					self.replaceWith( value.call( this, i, old ) );
+				});
+			}
+
+			if ( typeof value !== "string" ) {
+				value = jQuery( value ).detach();
+			}
+
+			return this.each(function() {
+				var next = this.nextSibling,
+					parent = this.parentNode;
+
+				jQuery( this ).remove();
+
+				if ( next ) {
+					jQuery(next).before( value );
+				} else {
+					jQuery(parent).append( value );
+				}
+			});
+		} else {
+			return this.length ?
+				this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+				this;
+		}
+	},
+
+	detach: function( selector ) {
+		return this.remove( selector, true );
+	},
+
+	domManip: function( args, table, callback ) {
+		var results, first, fragment, parent,
+			value = args[0],
+			scripts = [];
+
+		// We can't cloneNode fragments that contain checked, in WebKit
+		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
+			return this.each(function() {
+				jQuery(this).domManip( args, table, callback, true );
+			});
+		}
+
+		if ( jQuery.isFunction(value) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				args[0] = value.call(this, i, table ? self.html() : undefined);
+				self.domManip( args, table, callback );
+			});
+		}
+
+		if ( this[0] ) {
+			parent = value && value.parentNode;
+
+			// If we're in a fragment, just use that instead of building a new one
+			if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+				results = { fragment: parent };
+
+			} else {
+				results = jQuery.buildFragment( args, this, scripts );
+			}
+
+			fragment = results.fragment;
+
+			if ( fragment.childNodes.length === 1 ) {
+				first = fragment = fragment.firstChild;
+			} else {
+				first = fragment.firstChild;
+			}
+
+			if ( first ) {
+				table = table && jQuery.nodeName( first, "tr" );
+
+				for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
+					callback.call(
+						table ?
+							root(this[i], first) :
+							this[i],
+						// Make sure that we do not leak memory by inadvertently discarding
+						// the original fragment (which might have attached data) instead of
+						// using it; in addition, use the original fragment object for the last
+						// item instead of first because it can end up being emptied incorrectly
+						// in certain situations (Bug #8070).
+						// Fragments from the fragment cache must always be cloned and never used
+						// in place.
+						results.cacheable || (l > 1 && i < lastIndex) ?
+							jQuery.clone( fragment, true, true ) :
+							fragment
+					);
+				}
+			}
+
+			if ( scripts.length ) {
+				jQuery.each( scripts, evalScript );
+			}
+		}
+
+		return this;
+	}
+});
+
+function root( elem, cur ) {
+	return jQuery.nodeName(elem, "table") ?
+		(elem.getElementsByTagName("tbody")[0] ||
+		elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+		elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+
+	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+		return;
+	}
+
+	var internalKey = jQuery.expando,
+		oldData = jQuery.data( src ),
+		curData = jQuery.data( dest, oldData );
+
+	// Switch to use the internal data object, if it exists, for the next
+	// stage of data copying
+	if ( (oldData = oldData[ internalKey ]) ) {
+		var events = oldData.events;
+				curData = curData[ internalKey ] = jQuery.extend({}, oldData);
+
+		if ( events ) {
+			delete curData.handle;
+			curData.events = {};
+
+			for ( var type in events ) {
+				for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
+					jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
+				}
+			}
+		}
+	}
+}
+
+function cloneFixAttributes( src, dest ) {
+	var nodeName;
+
+	// We do not need to do anything for non-Elements
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	// clearAttributes removes the attributes, which we don't want,
+	// but also removes the attachEvent events, which we *do* want
+	if ( dest.clearAttributes ) {
+		dest.clearAttributes();
+	}
+
+	// mergeAttributes, in contrast, only merges back on the
+	// original attributes, not the events
+	if ( dest.mergeAttributes ) {
+		dest.mergeAttributes( src );
+	}
+
+	nodeName = dest.nodeName.toLowerCase();
+
+	// IE6-8 fail to clone children inside object elements that use
+	// the proprietary classid attribute value (rather than the type
+	// attribute) to identify the type of content to display
+	if ( nodeName === "object" ) {
+		dest.outerHTML = src.outerHTML;
+
+	} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
+		// IE6-8 fails to persist the checked state of a cloned checkbox
+		// or radio button. Worse, IE6-7 fail to give the cloned element
+		// a checked appearance if the defaultChecked value isn't also set
+		if ( src.checked ) {
+			dest.defaultChecked = dest.checked = src.checked;
+		}
+
+		// IE6-7 get confused and end up setting the value of a cloned
+		// checkbox/radio button to an empty string instead of "on"
+		if ( dest.value !== src.value ) {
+			dest.value = src.value;
+		}
+
+	// IE6-8 fails to return the selected option to the default selected
+	// state when cloning options
+	} else if ( nodeName === "option" ) {
+		dest.selected = src.defaultSelected;
+
+	// IE6-8 fails to set the defaultValue to the correct value when
+	// cloning other types of input fields
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+
+	// Event data gets referenced instead of copied if the expando
+	// gets copied too
+	dest.removeAttribute( jQuery.expando );
+}
+
+jQuery.buildFragment = function( args, nodes, scripts ) {
+	var fragment, cacheable, cacheresults,
+		doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
+
+	// Only cache "small" (1/2 KB) HTML strings that are associated with the main document
+	// Cloning options loses the selected state, so don't cache them
+	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+	if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
+		args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
+
+		cacheable = true;
+
+		cacheresults = jQuery.fragments[ args[0] ];
+		if ( cacheresults && cacheresults !== 1 ) {
+			fragment = cacheresults;
+		}
+	}
+
+	if ( !fragment ) {
+		fragment = doc.createDocumentFragment();
+		jQuery.clean( args, doc, fragment, scripts );
+	}
+
+	if ( cacheable ) {
+		jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
+	}
+
+	return { fragment: fragment, cacheable: cacheable };
+};
+
+jQuery.fragments = {};
+
+jQuery.each({
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var ret = [],
+			insert = jQuery( selector ),
+			parent = this.length === 1 && this[0].parentNode;
+
+		if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
+			insert[ original ]( this[0] );
+			return this;
+
+		} else {
+			for ( var i = 0, l = insert.length; i < l; i++ ) {
+				var elems = (i > 0 ? this.clone(true) : this).get();
+				jQuery( insert[i] )[ original ]( elems );
+				ret = ret.concat( elems );
+			}
+
+			return this.pushStack( ret, name, insert.selector );
+		}
+	};
+});
+
+function getAll( elem ) {
+	if ( "getElementsByTagName" in elem ) {
+		return elem.getElementsByTagName( "*" );
+
+	} else if ( "querySelectorAll" in elem ) {
+		return elem.querySelectorAll( "*" );
+
+	} else {
+		return [];
+	}
+}
+
+// Used in clean, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+	if ( elem.type === "checkbox" || elem.type === "radio" ) {
+		elem.defaultChecked = elem.checked;
+	}
+}
+// Finds all inputs and passes them to fixDefaultChecked
+function findInputs( elem ) {
+	if ( jQuery.nodeName( elem, "input" ) ) {
+		fixDefaultChecked( elem );
+	} else if ( elem.getElementsByTagName ) {
+		jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+	}
+}
+
+jQuery.extend({
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var clone = elem.cloneNode(true),
+				srcElements,
+				destElements,
+				i;
+
+		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+			// IE copies events bound via attachEvent when using cloneNode.
+			// Calling detachEvent on the clone will also remove the events
+			// from the original. In order to get around this, we use some
+			// proprietary methods to clear the events. Thanks to MooTools
+			// guys for this hotness.
+
+			cloneFixAttributes( elem, clone );
+
+			// Using Sizzle here is crazy slow, so we use getElementsByTagName
+			// instead
+			srcElements = getAll( elem );
+			destElements = getAll( clone );
+
+			// Weird iteration because IE will replace the length property
+			// with an element if you are cloning the body and one of the
+			// elements on the page has a name or id of "length"
+			for ( i = 0; srcElements[i]; ++i ) {
+				cloneFixAttributes( srcElements[i], destElements[i] );
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			cloneCopyEvent( elem, clone );
+
+			if ( deepDataAndEvents ) {
+				srcElements = getAll( elem );
+				destElements = getAll( clone );
+
+				for ( i = 0; srcElements[i]; ++i ) {
+					cloneCopyEvent( srcElements[i], destElements[i] );
+				}
+			}
+		}
+
+		// Return the cloned set
+		return clone;
+	},
+
+	clean: function( elems, context, fragment, scripts ) {
+		var checkScriptType;
+
+		context = context || document;
+
+		// !context.createElement fails in IE with an error but returns typeof 'object'
+		if ( typeof context.createElement === "undefined" ) {
+			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+		}
+
+		var ret = [], j;
+
+		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+			if ( typeof elem === "number" ) {
+				elem += "";
+			}
+
+			if ( !elem ) {
+				continue;
+			}
+
+			// Convert html string into DOM nodes
+			if ( typeof elem === "string" ) {
+				if ( !rhtml.test( elem ) ) {
+					elem = context.createTextNode( elem );
+				} else {
+					// Fix "XHTML"-style tags in all browsers
+					elem = elem.replace(rxhtmlTag, "<$1></$2>");
+
+					// Trim whitespace, otherwise indexOf won't work as expected
+					var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
+						wrap = wrapMap[ tag ] || wrapMap._default,
+						depth = wrap[0],
+						div = context.createElement("div");
+
+					// Go to html and back, then peel off extra wrappers
+					div.innerHTML = wrap[1] + elem + wrap[2];
+
+					// Move to the right depth
+					while ( depth-- ) {
+						div = div.lastChild;
+					}
+
+					// Remove IE's autoinserted <tbody> from table fragments
+					if ( !jQuery.support.tbody ) {
+
+						// String was a <table>, *may* have spurious <tbody>
+						var hasBody = rtbody.test(elem),
+							tbody = tag === "table" && !hasBody ?
+								div.firstChild && div.firstChild.childNodes :
+
+								// String was a bare <thead> or <tfoot>
+								wrap[1] === "<table>" && !hasBody ?
+									div.childNodes :
+									[];
+
+						for ( j = tbody.length - 1; j >= 0 ; --j ) {
+							if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+								tbody[ j ].parentNode.removeChild( tbody[ j ] );
+							}
+						}
+					}
+
+					// IE completely kills leading whitespace when innerHTML is used
+					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+						div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+					}
+
+					elem = div.childNodes;
+				}
+			}
+
+			// Resets defaultChecked for any radios and checkboxes
+			// about to be appended to the DOM in IE 6/7 (#8060)
+			var len;
+			if ( !jQuery.support.appendChecked ) {
+				if ( elem[0] && typeof (len = elem.length) === "number" ) {
+					for ( j = 0; j < len; j++ ) {
+						findInputs( elem[j] );
+					}
+				} else {
+					findInputs( elem );
+				}
+			}
+
+			if ( elem.nodeType ) {
+				ret.push( elem );
+			} else {
+				ret = jQuery.merge( ret, elem );
+			}
+		}
+
+		if ( fragment ) {
+			checkScriptType = function( elem ) {
+				return !elem.type || rscriptType.test( elem.type );
+			};
+			for ( i = 0; ret[i]; i++ ) {
+				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
+					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
+
+				} else {
+					if ( ret[i].nodeType === 1 ) {
+						var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
+
+						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+					}
+					fragment.appendChild( ret[i] );
+				}
+			}
+		}
+
+		return ret;
+	},
+
+	cleanData: function( elems ) {
+		var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,
+			deleteExpando = jQuery.support.deleteExpando;
+
+		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+			if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+				continue;
+			}
+
+			id = elem[ jQuery.expando ];
+
+			if ( id ) {
+				data = cache[ id ] && cache[ id ][ internalKey ];
+
+				if ( data && data.events ) {
+					for ( var type in data.events ) {
+						if ( special[ type ] ) {
+							jQuery.event.remove( elem, type );
+
+						// This is a shortcut to avoid jQuery.event.remove's overhead
+						} else {
+							jQuery.removeEvent( elem, type, data.handle );
+						}
+					}
+
+					// Null the DOM reference to avoid IE6/7/8 leak (#7054)
+					if ( data.handle ) {
+						data.handle.elem = null;
+					}
+				}
+
+				if ( deleteExpando ) {
+					delete elem[ jQuery.expando ];
+
+				} else if ( elem.removeAttribute ) {
+					elem.removeAttribute( jQuery.expando );
+				}
+
+				delete cache[ id ];
+			}
+		}
+	}
+});
+
+function evalScript( i, elem ) {
+	if ( elem.src ) {
+		jQuery.ajax({
+			url: elem.src,
+			async: false,
+			dataType: "script"
+		});
+	} else {
+		jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
+	}
+
+	if ( elem.parentNode ) {
+		elem.parentNode.removeChild( elem );
+	}
+}
+
+
+
+
+var ralpha = /alpha\([^)]*\)/i,
+	ropacity = /opacity=([^)]*)/,
+	rdashAlpha = /-([a-z])/ig,
+	// fixed for IE9, see #8346
+	rupper = /([A-Z]|^ms)/g,
+	rnumpx = /^-?\d+(?:px)?$/i,
+	rnum = /^-?\d/,
+	rrelNum = /^[+\-]=/,
+	rrelNumFilter = /[^+\-\.\de]+/g,
+
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssWidth = [ "Left", "Right" ],
+	cssHeight = [ "Top", "Bottom" ],
+	curCSS,
+
+	getComputedStyle,
+	currentStyle,
+
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	};
+
+jQuery.fn.css = function( name, value ) {
+	// Setting 'undefined' is a no-op
+	if ( arguments.length === 2 && value === undefined ) {
+		return this;
+	}
+
+	return jQuery.access( this, name, value, true, function( elem, name, value ) {
+		return value !== undefined ?
+			jQuery.style( elem, name, value ) :
+			jQuery.css( elem, name );
+	});
+};
+
+jQuery.extend({
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity", "opacity" );
+					return ret === "" ? "1" : ret;
+
+				} else {
+					return elem.style.opacity;
+				}
+			}
+		}
+	},
+
+	// Exclude the following css properties to add px
+	cssNumber: {
+		"zIndex": true,
+		"fontWeight": true,
+		"opacity": true,
+		"zoom": true,
+		"lineHeight": true,
+		"widows": true,
+		"orphans": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		// normalize float css property
+		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, origName = jQuery.camelCase( name ),
+			style = elem.style, hooks = jQuery.cssHooks[ origName ];
+
+		name = jQuery.cssProps[ origName ] || origName;
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// Make sure that NaN and null values aren't set. See: #7116
+			if ( type === "number" && isNaN( value ) || value == null ) {
+				return;
+			}
+
+			// convert relative number strings (+= or -=) to relative numbers. #7345
+			if ( type === "string" && rrelNum.test( value ) ) {
+				value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) );
+			}
+
+			// If a number was passed in, add 'px' to the (except for certain CSS properties)
+			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+				value += "px";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
+				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+				// Fixes bug #5509
+				try {
+					style[ name ] = value;
+				} catch(e) {}
+			}
+
+		} else {
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra ) {
+		var ret, hooks;
+
+		// Make sure that we're working with the right name
+		name = jQuery.camelCase( name );
+		hooks = jQuery.cssHooks[ name ];
+		name = jQuery.cssProps[ name ] || name;
+
+		// cssFloat needs a special treatment
+		if ( name === "cssFloat" ) {
+			name = "float";
+		}
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
+			return ret;
+
+		// Otherwise, if a way to get the computed value exists, use that
+		} else if ( curCSS ) {
+			return curCSS( elem, name );
+		}
+	},
+
+	// A method for quickly swapping in/out CSS properties to get correct calculations
+	swap: function( elem, options, callback ) {
+		var old = {};
+
+		// Remember the old values, and insert the new ones
+		for ( var name in options ) {
+			old[ name ] = elem.style[ name ];
+			elem.style[ name ] = options[ name ];
+		}
+
+		callback.call( elem );
+
+		// Revert the old values
+		for ( name in options ) {
+			elem.style[ name ] = old[ name ];
+		}
+	},
+
+	camelCase: function( string ) {
+		return string.replace( rdashAlpha, fcamelCase );
+	}
+});
+
+// DEPRECATED, Use jQuery.css() instead
+jQuery.curCSS = jQuery.css;
+
+jQuery.each(["height", "width"], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			var val;
+
+			if ( computed ) {
+				if ( elem.offsetWidth !== 0 ) {
+					val = getWH( elem, name, extra );
+
+				} else {
+					jQuery.swap( elem, cssShow, function() {
+						val = getWH( elem, name, extra );
+					});
+				}
+
+				if ( val <= 0 ) {
+					val = curCSS( elem, name, name );
+
+					if ( val === "0px" && currentStyle ) {
+						val = currentStyle( elem, name, name );
+					}
+
+					if ( val != null ) {
+						// Should return "auto" instead of 0, use 0 for
+						// temporary backwards-compat
+						return val === "" || val === "auto" ? "0px" : val;
+					}
+				}
+
+				if ( val < 0 || val == null ) {
+					val = elem.style[ name ];
+
+					// Should return "auto" instead of 0, use 0 for
+					// temporary backwards-compat
+					return val === "" || val === "auto" ? "0px" : val;
+				}
+
+				return typeof val === "string" ? val : val + "px";
+			}
+		},
+
+		set: function( elem, value ) {
+			if ( rnumpx.test( value ) ) {
+				// ignore negative width and height values #1599
+				value = parseFloat(value);
+
+				if ( value >= 0 ) {
+					return value + "px";
+				}
+
+			} else {
+				return value;
+			}
+		}
+	};
+});
+
+if ( !jQuery.support.opacity ) {
+	jQuery.cssHooks.opacity = {
+		get: function( elem, computed ) {
+			// IE uses filters for opacity
+			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+				( parseFloat( RegExp.$1 ) / 100 ) + "" :
+				computed ? "1" : "";
+		},
+
+		set: function( elem, value ) {
+			var style = elem.style,
+				currentStyle = elem.currentStyle;
+
+			// IE has trouble with opacity if it does not have layout
+			// Force it by setting the zoom level
+			style.zoom = 1;
+
+			// Set the alpha filter to set the opacity
+			var opacity = jQuery.isNaN( value ) ?
+				"" :
+				"alpha(opacity=" + value * 100 + ")",
+				filter = currentStyle && currentStyle.filter || style.filter || "";
+
+			style.filter = ralpha.test( filter ) ?
+				filter.replace( ralpha, opacity ) :
+				filter + " " + opacity;
+		}
+	};
+}
+
+jQuery(function() {
+	// This hook cannot be added until DOM ready because the support test
+	// for it is not run until after DOM ready
+	if ( !jQuery.support.reliableMarginRight ) {
+		jQuery.cssHooks.marginRight = {
+			get: function( elem, computed ) {
+				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+				// Work around by temporarily setting element display to inline-block
+				var ret;
+				jQuery.swap( elem, { "display": "inline-block" }, function() {
+					if ( computed ) {
+						ret = curCSS( elem, "margin-right", "marginRight" );
+					} else {
+						ret = elem.style.marginRight;
+					}
+				});
+				return ret;
+			}
+		};
+	}
+});
+
+if ( document.defaultView && document.defaultView.getComputedStyle ) {
+	getComputedStyle = function( elem, name ) {
+		var ret, defaultView, computedStyle;
+
+		name = name.replace( rupper, "-$1" ).toLowerCase();
+
+		if ( !(defaultView = elem.ownerDocument.defaultView) ) {
+			return undefined;
+		}
+
+		if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
+			ret = computedStyle.getPropertyValue( name );
+			if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+				ret = jQuery.style( elem, name );
+			}
+		}
+
+		return ret;
+	};
+}
+
+if ( document.documentElement.currentStyle ) {
+	currentStyle = function( elem, name ) {
+		var left,
+			ret = elem.currentStyle && elem.currentStyle[ name ],
+			rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],
+			style = elem.style;
+
+		// From the awesome hack by Dean Edwards
+		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+		// If we're not dealing with a regular pixel number
+		// but a number that has a weird ending, we need to convert it to pixels
+		if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
+			// Remember the original values
+			left = style.left;
+
+			// Put in the new values to get a computed value out
+			if ( rsLeft ) {
+				elem.runtimeStyle.left = elem.currentStyle.left;
+			}
+			style.left = name === "fontSize" ? "1em" : (ret || 0);
+			ret = style.pixelLeft + "px";
+
+			// Revert the changed values
+			style.left = left;
+			if ( rsLeft ) {
+				elem.runtimeStyle.left = rsLeft;
+			}
+		}
+
+		return ret === "" ? "auto" : ret;
+	};
+}
+
+curCSS = getComputedStyle || currentStyle;
+
+function getWH( elem, name, extra ) {
+	var which = name === "width" ? cssWidth : cssHeight,
+		val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
+
+	if ( extra === "border" ) {
+		return val;
+	}
+
+	jQuery.each( which, function() {
+		if ( !extra ) {
+			val -= parseFloat(jQuery.css( elem, "padding" + this )) || 0;
+		}
+
+		if ( extra === "margin" ) {
+			val += parseFloat(jQuery.css( elem, "margin" + this )) || 0;
+
+		} else {
+			val -= parseFloat(jQuery.css( elem, "border" + this + "Width" )) || 0;
+		}
+	});
+
+	return val;
+}
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.hidden = function( elem ) {
+		var width = elem.offsetWidth,
+			height = elem.offsetHeight;
+
+		return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
+	};
+
+	jQuery.expr.filters.visible = function( elem ) {
+		return !jQuery.expr.filters.hidden( elem );
+	};
+}
+
+
+
+
+var r20 = /%20/g,
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rhash = /#.*$/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+	rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+	rquery = /\?/,
+	rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+	rselectTextarea = /^(?:select|textarea)/i,
+	rspacesAjax = /\s+/,
+	rts = /([?&])_=[^&]*/,
+	rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
+
+	// Keep a copy of the old load method
+	_load = jQuery.fn.load,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Document location
+	ajaxLocation,
+
+	// Document location segments
+	ajaxLocParts;
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+	ajaxLocation = location.href;
+} catch( e ) {
+	// Use the href attribute of an A element
+	// since IE will modify it given document.location
+	ajaxLocation = document.createElement( "a" );
+	ajaxLocation.href = "";
+	ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		if ( jQuery.isFunction( func ) ) {
+			var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
+				i = 0,
+				length = dataTypes.length,
+				dataType,
+				list,
+				placeBefore;
+
+			// For each dataType in the dataTypeExpression
+			for(; i < length; i++ ) {
+				dataType = dataTypes[ i ];
+				// We control if we're asked to add before
+				// any existing element
+				placeBefore = /^\+/.test( dataType );
+				if ( placeBefore ) {
+					dataType = dataType.substr( 1 ) || "*";
+				}
+				list = structure[ dataType ] = structure[ dataType ] || [];
+				// then we add to the structure accordingly
+				list[ placeBefore ? "unshift" : "push" ]( func );
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
+		dataType /* internal */, inspected /* internal */ ) {
+
+	dataType = dataType || options.dataTypes[ 0 ];
+	inspected = inspected || {};
+
+	inspected[ dataType ] = true;
+
+	var list = structure[ dataType ],
+		i = 0,
+		length = list ? list.length : 0,
+		executeOnly = ( structure === prefilters ),
+		selection;
+
+	for(; i < length && ( executeOnly || !selection ); i++ ) {
+		selection = list[ i ]( options, originalOptions, jqXHR );
+		// If we got redirected to another dataType
+		// we try there if executing only and not done already
+		if ( typeof selection === "string" ) {
+			if ( !executeOnly || inspected[ selection ] ) {
+				selection = undefined;
+			} else {
+				options.dataTypes.unshift( selection );
+				selection = inspectPrefiltersOrTransports(
+						structure, options, originalOptions, jqXHR, selection, inspected );
+			}
+		}
+	}
+	// If we're only executing or nothing was selected
+	// we try the catchall dataType if not done already
+	if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
+		selection = inspectPrefiltersOrTransports(
+				structure, options, originalOptions, jqXHR, "*", inspected );
+	}
+	// unnecessary when only executing (prefilters)
+	// but it'll be ignored by the caller in that case
+	return selection;
+}
+
+jQuery.fn.extend({
+	load: function( url, params, callback ) {
+		if ( typeof url !== "string" && _load ) {
+			return _load.apply( this, arguments );
+
+		// Don't do a request if no elements are being requested
+		} else if ( !this.length ) {
+			return this;
+		}
+
+		var off = url.indexOf( " " );
+		if ( off >= 0 ) {
+			var selector = url.slice( off, url.length );
+			url = url.slice( 0, off );
+		}
+
+		// Default to a GET request
+		var type = "GET";
+
+		// If the second parameter was provided
+		if ( params ) {
+			// If it's a function
+			if ( jQuery.isFunction( params ) ) {
+				// We assume that it's the callback
+				callback = params;
+				params = undefined;
+
+			// Otherwise, build a param string
+			} else if ( typeof params === "object" ) {
+				params = jQuery.param( params, jQuery.ajaxSettings.traditional );
+				type = "POST";
+			}
+		}
+
+		var self = this;
+
+		// Request the remote document
+		jQuery.ajax({
+			url: url,
+			type: type,
+			dataType: "html",
+			data: params,
+			// Complete callback (responseText is used internally)
+			complete: function( jqXHR, status, responseText ) {
+				// Store the response as specified by the jqXHR object
+				responseText = jqXHR.responseText;
+				// If successful, inject the HTML into all the matched elements
+				if ( jqXHR.isResolved() ) {
+					// #4825: Get the actual response in case
+					// a dataFilter is present in ajaxSettings
+					jqXHR.done(function( r ) {
+						responseText = r;
+					});
+					// See if a selector was specified
+					self.html( selector ?
+						// Create a dummy div to hold the results
+						jQuery("<div>")
+							// inject the contents of the document in, removing the scripts
+							// to avoid any 'Permission Denied' errors in IE
+							.append(responseText.replace(rscript, ""))
+
+							// Locate the specified elements
+							.find(selector) :
+
+						// If not, just inject the full result
+						responseText );
+				}
+
+				if ( callback ) {
+					self.each( callback, [ responseText, status, jqXHR ] );
+				}
+			}
+		});
+
+		return this;
+	},
+
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+
+	serializeArray: function() {
+		return this.map(function(){
+			return this.elements ? jQuery.makeArray( this.elements ) : this;
+		})
+		.filter(function(){
+			return this.name && !this.disabled &&
+				( this.checked || rselectTextarea.test( this.nodeName ) ||
+					rinput.test( this.type ) );
+		})
+		.map(function( i, elem ){
+			var val = jQuery( this ).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray( val ) ?
+					jQuery.map( val, function( val, i ){
+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+					}) :
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		}).get();
+	}
+});
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
+	jQuery.fn[ o ] = function( f ){
+		return this.bind( o, f );
+	};
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+		// shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		return jQuery.ajax({
+			type: method,
+			url: url,
+			data: data,
+			success: callback,
+			dataType: type
+		});
+	};
+});
+
+jQuery.extend({
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function ( target, settings ) {
+		if ( !settings ) {
+			// Only one parameter, we extend ajaxSettings
+			settings = target;
+			target = jQuery.extend( true, jQuery.ajaxSettings, settings );
+		} else {
+			// target was provided, we extend into it
+			jQuery.extend( true, target, jQuery.ajaxSettings, settings );
+		}
+		// Flatten fields we don't want deep extended
+		for( var field in { context: 1, url: 1 } ) {
+			if ( field in settings ) {
+				target[ field ] = settings[ field ];
+			} else if( field in jQuery.ajaxSettings ) {
+				target[ field ] = jQuery.ajaxSettings[ field ];
+			}
+		}
+		return target;
+	},
+
+	ajaxSettings: {
+		url: ajaxLocation,
+		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+		global: true,
+		type: "GET",
+		contentType: "application/x-www-form-urlencoded",
+		processData: true,
+		async: true,
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			xml: "application/xml, text/xml",
+			html: "text/html",
+			text: "text/plain",
+			json: "application/json, text/javascript",
+			"*": "*/*"
+		},
+
+		contents: {
+			xml: /xml/,
+			html: /html/,
+			json: /json/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText"
+		},
+
+		// List of data converters
+		// 1) key format is "source_type destination_type" (a single space in-between)
+		// 2) the catchall symbol "*" can be used for source_type
+		converters: {
+
+			// Convert anything to text
+			"* text": window.String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": jQuery.parseJSON,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		}
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var // Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+			// Callbacks context
+			callbackContext = s.context || s,
+			// Context for global events
+			// It's the callbackContext if one was provided in the options
+			// and if it's a DOM node or a jQuery collection
+			globalEventContext = callbackContext !== s &&
+				( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
+						jQuery( callbackContext ) : jQuery.event,
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery._Deferred(),
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+			// ifModified key
+			ifModifiedKey,
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+			// transport
+			transport,
+			// timeout handle
+			timeoutTimer,
+			// Cross-domain detection vars
+			parts,
+			// The jqXHR state
+			state = 0,
+			// To know if global events are to be dispatched
+			fireGlobals,
+			// Loop variable
+			i,
+			// Fake xhr
+			jqXHR = {
+
+				readyState: 0,
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					if ( !state ) {
+						var lname = name.toLowerCase();
+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return state === 2 ? responseHeadersString : null;
+				},
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( state === 2 ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while( ( match = rheaders.exec( responseHeadersString ) ) ) {
+								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match === undefined ? null : match;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( !state ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					statusText = statusText || "abort";
+					if ( transport ) {
+						transport.abort( statusText );
+					}
+					done( 0, statusText );
+					return this;
+				}
+			};
+
+		// Callback for when everything is done
+		// It is defined here because jslint complains if it is declared
+		// at the end of the function (which would be more logical and readable)
+		function done( status, statusText, responses, headers ) {
+
+			// Called once
+			if ( state === 2 ) {
+				return;
+			}
+
+			// State is "done" now
+			state = 2;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status ? 4 : 0;
+
+			var isSuccess,
+				success,
+				error,
+				response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
+				lastModified,
+				etag;
+
+			// If successful, handle type chaining
+			if ( status >= 200 && status < 300 || status === 304 ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+
+					if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
+						jQuery.lastModified[ ifModifiedKey ] = lastModified;
+					}
+					if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
+						jQuery.etag[ ifModifiedKey ] = etag;
+					}
+				}
+
+				// If not modified
+				if ( status === 304 ) {
+
+					statusText = "notmodified";
+					isSuccess = true;
+
+				// If we have data
+				} else {
+
+					try {
+						success = ajaxConvert( s, response );
+						statusText = "success";
+						isSuccess = true;
+					} catch(e) {
+						// We have a parsererror
+						statusText = "parsererror";
+						error = e;
+					}
+				}
+			} else {
+				// We extract error from statusText
+				// then normalize statusText and status for non-aborts
+				error = statusText;
+				if( !statusText || status ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = statusText;
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
+						[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger( "ajaxStop" );
+				}
+			}
+		}
+
+		// Attach deferreds
+		deferred.promise( jqXHR );
+		jqXHR.success = jqXHR.done;
+		jqXHR.error = jqXHR.fail;
+		jqXHR.complete = completeDeferred.done;
+
+		// Status-dependent callbacks
+		jqXHR.statusCode = function( map ) {
+			if ( map ) {
+				var tmp;
+				if ( state < 2 ) {
+					for( tmp in map ) {
+						statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
+					}
+				} else {
+					tmp = map[ jqXHR.status ];
+					jqXHR.then( tmp, tmp );
+				}
+			}
+			return this;
+		};
+
+		// Remove hash character (#7531: and string promotion)
+		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+		// Extract dataTypes list
+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
+
+		// Determine if a cross-domain request is in order
+		if ( s.crossDomain == null ) {
+			parts = rurl.exec( s.url.toLowerCase() );
+			s.crossDomain = !!( parts &&
+				( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
+					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+			);
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefiler, stop there
+		if ( state === 2 ) {
+			return false;
+		}
+
+		// We can fire global events as of now if asked to
+		fireGlobals = s.global;
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
+			}
+
+			// Get ifModifiedKey before adding the anti-cache parameter
+			ifModifiedKey = s.url;
+
+			// Add anti-cache in url if needed
+			if ( s.cache === false ) {
+
+				var ts = jQuery.now(),
+					// try replacing _= if it is there
+					ret = s.url.replace( rts, "$1_=" + ts );
+
+				// if nothing was replaced, add timestamp to the end
+				s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			ifModifiedKey = ifModifiedKey || s.url;
+			if ( jQuery.lastModified[ ifModifiedKey ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
+			}
+			if ( jQuery.etag[ ifModifiedKey ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
+			}
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+				// Abort if not done already
+				jqXHR.abort();
+				return false;
+
+		}
+
+		// Install callbacks on deferreds
+		for ( i in { success: 1, error: 1, complete: 1 } ) {
+			jqXHR[ i ]( s[ i ] );
+		}
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = setTimeout( function(){
+					jqXHR.abort( "timeout" );
+				}, s.timeout );
+			}
+
+			try {
+				state = 1;
+				transport.send( requestHeaders, done );
+			} catch (e) {
+				// Propagate exception as error if not done
+				if ( status < 2 ) {
+					done( -1, e );
+				// Simply rethrow otherwise
+				} else {
+					jQuery.error( e );
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	// Serialize an array of form elements or a set of
+	// key/values into a query string
+	param: function( a, traditional ) {
+		var s = [],
+			add = function( key, value ) {
+				// If value is a function, invoke it and return its value
+				value = jQuery.isFunction( value ) ? value() : value;
+				s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+			};
+
+		// Set traditional to true for jQuery <= 1.3.2 behavior.
+		if ( traditional === undefined ) {
+			traditional = jQuery.ajaxSettings.traditional;
+		}
+
+		// If an array was passed in, assume that it is an array of form elements.
+		if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+			// Serialize the form elements
+			jQuery.each( a, function() {
+				add( this.name, this.value );
+			});
+
+		} else {
+			// If traditional, encode the "old" way (the way 1.3.2 or older
+			// did it), otherwise encode params recursively.
+			for ( var prefix in a ) {
+				buildParams( prefix, a[ prefix ], traditional, add );
+			}
+		}
+
+		// Return the resulting serialization
+		return s.join( "&" ).replace( r20, "+" );
+	}
+});
+
+function buildParams( prefix, obj, traditional, add ) {
+	if ( jQuery.isArray( obj ) ) {
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+				// If array item is non-scalar (array or object), encode its
+				// numeric index to resolve deserialization ambiguity issues.
+				// Note that rack (as of 1.0.0) can't currently deserialize
+				// nested arrays properly, and attempting to do so may cause
+				// a server error. Possible fixes are to modify rack's
+				// deserialization algorithm or to provide an option or flag
+				// to force array serialization to be shallow.
+				buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
+			}
+		});
+
+	} else if ( !traditional && obj != null && typeof obj === "object" ) {
+		// Serialize object item.
+		for ( var name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// This is still on the jQuery object... for now
+// Want to move this to jQuery.ajax some day
+jQuery.extend({
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {}
+
+});
+
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var contents = s.contents,
+		dataTypes = s.dataTypes,
+		responseFields = s.responseFields,
+		ct,
+		type,
+		finalDataType,
+		firstDataType;
+
+	// Fill responseXXX fields
+	for( type in responseFields ) {
+		if ( type in responses ) {
+			jqXHR[ responseFields[type] ] = responses[ type ];
+		}
+	}
+
+	// Remove auto dataType and get content-type in the process
+	while( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+
+	// Apply the dataFilter if provided
+	if ( s.dataFilter ) {
+		response = s.dataFilter( response, s.dataType );
+	}
+
+	var dataTypes = s.dataTypes,
+		converters = {},
+		i,
+		key,
+		length = dataTypes.length,
+		tmp,
+		// Current and previous dataTypes
+		current = dataTypes[ 0 ],
+		prev,
+		// Conversion expression
+		conversion,
+		// Conversion function
+		conv,
+		// Conversion functions (transitive conversion)
+		conv1,
+		conv2;
+
+	// For each dataType in the chain
+	for( i = 1; i < length; i++ ) {
+
+		// Create converters map
+		// with lowercased keys
+		if ( i === 1 ) {
+			for( key in s.converters ) {
+				if( typeof key === "string" ) {
+					converters[ key.toLowerCase() ] = s.converters[ key ];
+				}
+			}
+		}
+
+		// Get the dataTypes
+		prev = current;
+		current = dataTypes[ i ];
+
+		// If current is auto dataType, update it to prev
+		if( current === "*" ) {
+			current = prev;
+		// If no auto and dataTypes are actually different
+		} else if ( prev !== "*" && prev !== current ) {
+
+			// Get the converter
+			conversion = prev + " " + current;
+			conv = converters[ conversion ] || converters[ "* " + current ];
+
+			// If there is no direct converter, search transitively
+			if ( !conv ) {
+				conv2 = undefined;
+				for( conv1 in converters ) {
+					tmp = conv1.split( " " );
+					if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
+						conv2 = converters[ tmp[1] + " " + current ];
+						if ( conv2 ) {
+							conv1 = converters[ conv1 ];
+							if ( conv1 === true ) {
+								conv = conv2;
+							} else if ( conv2 === true ) {
+								conv = conv1;
+							}
+							break;
+						}
+					}
+				}
+			}
+			// If we found no converter, dispatch an error
+			if ( !( conv || conv2 ) ) {
+				jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
+			}
+			// If found converter is not an equivalence
+			if ( conv !== true ) {
+				// Convert with 1 or 2 converters accordingly
+				response = conv ? conv( response ) : conv2( conv1(response) );
+			}
+		}
+	}
+	return response;
+}
+
+
+
+
+var jsc = jQuery.now(),
+	jsre = /(\=)\?(&|$)|\?\?/i;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+	jsonp: "callback",
+	jsonpCallback: function() {
+		return jQuery.expando + "_" + ( jsc++ );
+	}
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
+		( typeof s.data === "string" );
+
+	if ( s.dataTypes[ 0 ] === "jsonp" ||
+		s.jsonp !== false && ( jsre.test( s.url ) ||
+				inspectData && jsre.test( s.data ) ) ) {
+
+		var responseContainer,
+			jsonpCallback = s.jsonpCallback =
+				jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
+			previous = window[ jsonpCallback ],
+			url = s.url,
+			data = s.data,
+			replace = "$1" + jsonpCallback + "$2";
+
+		if ( s.jsonp !== false ) {
+			url = url.replace( jsre, replace );
+			if ( s.url === url ) {
+				if ( inspectData ) {
+					data = data.replace( jsre, replace );
+				}
+				if ( s.data === data ) {
+					// Add callback manually
+					url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
+				}
+			}
+		}
+
+		s.url = url;
+		s.data = data;
+
+		// Install callback
+		window[ jsonpCallback ] = function( response ) {
+			responseContainer = [ response ];
+		};
+
+		// Clean-up function
+		jqXHR.always(function() {
+			// Set callback back to previous value
+			window[ jsonpCallback ] = previous;
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( previous ) ) {
+				window[ jsonpCallback ]( responseContainer[ 0 ] );
+			}
+		});
+
+		// Use data converter to retrieve json after script execution
+		s.converters["script json"] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( jsonpCallback + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Delegate to script
+		return "script";
+	}
+});
+
+
+
+
+// Install script dataType
+jQuery.ajaxSetup({
+	accepts: {
+		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /javascript|ecmascript/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+		s.global = false;
+	}
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+
+		var script,
+			head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
+
+		return {
+
+			send: function( _, callback ) {
+
+				script = document.createElement( "script" );
+
+				script.async = "async";
+
+				if ( s.scriptCharset ) {
+					script.charset = s.scriptCharset;
+				}
+
+				script.src = s.url;
+
+				// Attach handlers for all browsers
+				script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+						// Handle memory leak in IE
+						script.onload = script.onreadystatechange = null;
+
+						// Remove the script
+						if ( head && script.parentNode ) {
+							head.removeChild( script );
+						}
+
+						// Dereference the script
+						script = undefined;
+
+						// Callback if not abort
+						if ( !isAbort ) {
+							callback( 200, "success" );
+						}
+					}
+				};
+				// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
+				// This arises when a base node is used (#2709 and #4378).
+				head.insertBefore( script, head.firstChild );
+			},
+
+			abort: function() {
+				if ( script ) {
+					script.onload( 0, 1 );
+				}
+			}
+		};
+	}
+});
+
+
+
+
+var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+	xhrOnUnloadAbort = window.ActiveXObject ? function() {
+		// Abort all pending requests
+		for ( var key in xhrCallbacks ) {
+			xhrCallbacks[ key ]( 0, 1 );
+		}
+	} : false,
+	xhrId = 0,
+	xhrCallbacks;
+
+// Functions to create xhrs
+function createStandardXHR() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch( e ) {}
+}
+
+function createActiveXHR() {
+	try {
+		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+	} catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+	/* Microsoft failed to properly
+	 * implement the XMLHttpRequest in IE7 (can't request local files),
+	 * so we use the ActiveXObject when it is available
+	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+	 * we need a fallback.
+	 */
+	function() {
+		return !this.isLocal && createStandardXHR() || createActiveXHR();
+	} :
+	// For all other browsers, use the standard XMLHttpRequest object
+	createStandardXHR;
+
+// Determine support properties
+(function( xhr ) {
+	jQuery.extend( jQuery.support, {
+		ajax: !!xhr,
+		cors: !!xhr && ( "withCredentials" in xhr )
+	});
+})( jQuery.ajaxSettings.xhr() );
+
+// Create transport if the browser can provide an xhr
+if ( jQuery.support.ajax ) {
+
+	jQuery.ajaxTransport(function( s ) {
+		// Cross domain only allowed if supported through XMLHttpRequest
+		if ( !s.crossDomain || jQuery.support.cors ) {
+
+			var callback;
+
+			return {
+				send: function( headers, complete ) {
+
+					// Get a new xhr
+					var xhr = s.xhr(),
+						handle,
+						i;
+
+					// Open the socket
+					// Passing null username, generates a login popup on Opera (#2865)
+					if ( s.username ) {
+						xhr.open( s.type, s.url, s.async, s.username, s.password );
+					} else {
+						xhr.open( s.type, s.url, s.async );
+					}
+
+					// Apply custom fields if provided
+					if ( s.xhrFields ) {
+						for ( i in s.xhrFields ) {
+							xhr[ i ] = s.xhrFields[ i ];
+						}
+					}
+
+					// Override mime type if needed
+					if ( s.mimeType && xhr.overrideMimeType ) {
+						xhr.overrideMimeType( s.mimeType );
+					}
+
+					// X-Requested-With header
+					// For cross-domain requests, seeing as conditions for a preflight are
+					// akin to a jigsaw puzzle, we simply never set it to be sure.
+					// (it can always be set on a per-request basis or even using ajaxSetup)
+					// For same-domain requests, won't change header if already provided.
+					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+						headers[ "X-Requested-With" ] = "XMLHttpRequest";
+					}
+
+					// Need an extra try/catch for cross domain requests in Firefox 3
+					try {
+						for ( i in headers ) {
+							xhr.setRequestHeader( i, headers[ i ] );
+						}
+					} catch( _ ) {}
+
+					// Do send the request
+					// This may raise an exception which is actually
+					// handled in jQuery.ajax (so no try/catch here)
+					xhr.send( ( s.hasContent && s.data ) || null );
+
+					// Listener
+					callback = function( _, isAbort ) {
+
+						var status,
+							statusText,
+							responseHeaders,
+							responses,
+							xml;
+
+						// Firefox throws exceptions when accessing properties
+						// of an xhr when a network error occured
+						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+						try {
+
+							// Was never called and is aborted or complete
+							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+								// Only called once
+								callback = undefined;
+
+								// Do not keep as active anymore
+								if ( handle ) {
+									xhr.onreadystatechange = jQuery.noop;
+									if ( xhrOnUnloadAbort ) {
+										delete xhrCallbacks[ handle ];
+									}
+								}
+
+								// If it's an abort
+								if ( isAbort ) {
+									// Abort it manually if needed
+									if ( xhr.readyState !== 4 ) {
+										xhr.abort();
+									}
+								} else {
+									status = xhr.status;
+									responseHeaders = xhr.getAllResponseHeaders();
+									responses = {};
+									xml = xhr.responseXML;
+
+									// Construct response list
+									if ( xml && xml.documentElement /* #4958 */ ) {
+										responses.xml = xml;
+									}
+									responses.text = xhr.responseText;
+
+									// Firefox throws an exception when accessing
+									// statusText for faulty cross-domain requests
+									try {
+										statusText = xhr.statusText;
+									} catch( e ) {
+										// We normalize with Webkit giving an empty statusText
+										statusText = "";
+									}
+
+									// Filter status for non standard behaviors
+
+									// If the request is local and we have data: assume a success
+									// (success with no data won't get notified, that's the best we
+									// can do given current implementations)
+									if ( !status && s.isLocal && !s.crossDomain ) {
+										status = responses.text ? 200 : 404;
+									// IE - #1450: sometimes returns 1223 when it should be 204
+									} else if ( status === 1223 ) {
+										status = 204;
+									}
+								}
+							}
+						} catch( firefoxAccessException ) {
+							if ( !isAbort ) {
+								complete( -1, firefoxAccessException );
+							}
+						}
+
+						// Call complete if needed
+						if ( responses ) {
+							complete( status, statusText, responses, responseHeaders );
+						}
+					};
+
+					// if we're in sync mode or it's in cache
+					// and has been retrieved directly (IE6 & IE7)
+					// we need to manually fire the callback
+					if ( !s.async || xhr.readyState === 4 ) {
+						callback();
+					} else {
+						handle = ++xhrId;
+						if ( xhrOnUnloadAbort ) {
+							// Create the active xhrs callbacks list if needed
+							// and attach the unload handler
+							if ( !xhrCallbacks ) {
+								xhrCallbacks = {};
+								jQuery( window ).unload( xhrOnUnloadAbort );
+							}
+							// Add to list of active xhrs callbacks
+							xhrCallbacks[ handle ] = callback;
+						}
+						xhr.onreadystatechange = callback;
+					}
+				},
+
+				abort: function() {
+					if ( callback ) {
+						callback(0,1);
+					}
+				}
+			};
+		}
+	});
+}
+
+
+
+
+var elemdisplay = {},
+	iframe, iframeDoc,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
+	timerId,
+	fxAttrs = [
+		// height animations
+		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
+		// width animations
+		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
+		// opacity animations
+		[ "opacity" ]
+	],
+	fxNow,
+	requestAnimationFrame = window.webkitRequestAnimationFrame ||
+	    window.mozRequestAnimationFrame ||
+	    window.oRequestAnimationFrame;
+
+jQuery.fn.extend({
+	show: function( speed, easing, callback ) {
+		var elem, display;
+
+		if ( speed || speed === 0 ) {
+			return this.animate( genFx("show", 3), speed, easing, callback);
+
+		} else {
+			for ( var i = 0, j = this.length; i < j; i++ ) {
+				elem = this[i];
+
+				if ( elem.style ) {
+					display = elem.style.display;
+
+					// Reset the inline display of this element to learn if it is
+					// being hidden by cascaded rules or not
+					if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
+						display = elem.style.display = "";
+					}
+
+					// Set elements which have been overridden with display: none
+					// in a stylesheet to whatever the default browser style is
+					// for such an element
+					if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
+						jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
+					}
+				}
+			}
+
+			// Set the display of most of the elements in a second loop
+			// to avoid the constant reflow
+			for ( i = 0; i < j; i++ ) {
+				elem = this[i];
+
+				if ( elem.style ) {
+					display = elem.style.display;
+
+					if ( display === "" || display === "none" ) {
+						elem.style.display = jQuery._data(elem, "olddisplay") || "";
+					}
+				}
+			}
+
+			return this;
+		}
+	},
+
+	hide: function( speed, easing, callback ) {
+		if ( speed || speed === 0 ) {
+			return this.animate( genFx("hide", 3), speed, easing, callback);
+
+		} else {
+			for ( var i = 0, j = this.length; i < j; i++ ) {
+				if ( this[i].style ) {
+					var display = jQuery.css( this[i], "display" );
+
+					if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) {
+						jQuery._data( this[i], "olddisplay", display );
+					}
+				}
+			}
+
+			// Set the display of the elements in a second loop
+			// to avoid the constant reflow
+			for ( i = 0; i < j; i++ ) {
+				if ( this[i].style ) {
+					this[i].style.display = "none";
+				}
+			}
+
+			return this;
+		}
+	},
+
+	// Save the old toggle function
+	_toggle: jQuery.fn.toggle,
+
+	toggle: function( fn, fn2, callback ) {
+		var bool = typeof fn === "boolean";
+
+		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
+			this._toggle.apply( this, arguments );
+
+		} else if ( fn == null || bool ) {
+			this.each(function() {
+				var state = bool ? fn : jQuery(this).is(":hidden");
+				jQuery(this)[ state ? "show" : "hide" ]();
+			});
+
+		} else {
+			this.animate(genFx("toggle", 3), fn, fn2, callback);
+		}
+
+		return this;
+	},
+
+	fadeTo: function( speed, to, easing, callback ) {
+		return this.filter(":hidden").css("opacity", 0).show().end()
+					.animate({opacity: to}, speed, easing, callback);
+	},
+
+	animate: function( prop, speed, easing, callback ) {
+		var optall = jQuery.speed(speed, easing, callback);
+
+		if ( jQuery.isEmptyObject( prop ) ) {
+			return this.each( optall.complete, [ false ] );
+		}
+
+		// Do not change referenced properties as per-property easing will be lost
+		prop = jQuery.extend( {}, prop );
+
+		return this[ optall.queue === false ? "each" : "queue" ](function() {
+			// XXX 'this' does not always have a nodeName when running the
+			// test suite
+
+			if ( optall.queue === false ) {
+				jQuery._mark( this );
+			}
+
+			var opt = jQuery.extend( {}, optall ),
+				isElement = this.nodeType === 1,
+				hidden = isElement && jQuery(this).is(":hidden"),
+				name, val, p,
+				display, e,
+				parts, start, end, unit;
+
+			// will store per property easing and be used to determine when an animation is complete
+			opt.animatedProperties = {};
+
+			for ( p in prop ) {
+
+				// property name normalization
+				name = jQuery.camelCase( p );
+				if ( p !== name ) {
+					prop[ name ] = prop[ p ];
+					delete prop[ p ];
+				}
+
+				val = prop[ name ];
+
+				// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
+				if ( jQuery.isArray( val ) ) {
+					opt.animatedProperties[ name ] = val[ 1 ];
+					val = prop[ name ] = val[ 0 ];
+				} else {
+					opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
+				}
+
+				if ( val === "hide" && hidden || val === "show" && !hidden ) {
+					return opt.complete.call( this );
+				}
+
+				if ( isElement && ( name === "height" || name === "width" ) ) {
+					// Make sure that nothing sneaks out
+					// Record all 3 overflow attributes because IE does not
+					// change the overflow attribute when overflowX and
+					// overflowY are set to the same value
+					opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
+
+					// Set display property to inline-block for height/width
+					// animations on inline elements that are having width/height
+					// animated
+					if ( jQuery.css( this, "display" ) === "inline" &&
+							jQuery.css( this, "float" ) === "none" ) {
+						if ( !jQuery.support.inlineBlockNeedsLayout ) {
+							this.style.display = "inline-block";
+
+						} else {
+							display = defaultDisplay( this.nodeName );
+
+							// inline-level elements accept inline-block;
+							// block-level elements need to be inline with layout
+							if ( display === "inline" ) {
+								this.style.display = "inline-block";
+
+							} else {
+								this.style.display = "inline";
+								this.style.zoom = 1;
+							}
+						}
+					}
+				}
+			}
+
+			if ( opt.overflow != null ) {
+				this.style.overflow = "hidden";
+			}
+
+			for ( p in prop ) {
+				e = new jQuery.fx( this, opt, p );
+				val = prop[ p ];
+
+				if ( rfxtypes.test(val) ) {
+					e[ val === "toggle" ? hidden ? "show" : "hide" : val ]();
+
+				} else {
+					parts = rfxnum.exec( val );
+					start = e.cur();
+
+					if ( parts ) {
+						end = parseFloat( parts[2] );
+						unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
+
+						// We need to compute starting value
+						if ( unit !== "px" ) {
+							jQuery.style( this, p, (end || 1) + unit);
+							start = ((end || 1) / e.cur()) * start;
+							jQuery.style( this, p, start + unit);
+						}
+
+						// If a +=/-= token was provided, we're doing a relative animation
+						if ( parts[1] ) {
+							end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
+						}
+
+						e.custom( start, end, unit );
+
+					} else {
+						e.custom( start, val, "" );
+					}
+				}
+			}
+
+			// For JS strict compliance
+			return true;
+		});
+	},
+
+	stop: function( clearQueue, gotoEnd ) {
+		if ( clearQueue ) {
+			this.queue([]);
+		}
+
+		this.each(function() {
+			var timers = jQuery.timers,
+				i = timers.length;
+			// clear marker counters if we know they won't be
+			if ( !gotoEnd ) {
+				jQuery._unmark( true, this );
+			}
+			while ( i-- ) {
+				if ( timers[i].elem === this ) {
+					if (gotoEnd) {
+						// force the next step to be the last
+						timers[i](true);
+					}
+
+					timers.splice(i, 1);
+				}
+			}
+		});
+
+		// start the next in the queue if the last step wasn't forced
+		if ( !gotoEnd ) {
+			this.dequeue();
+		}
+
+		return this;
+	}
+
+});
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	setTimeout( clearFxNow, 0 );
+	return ( fxNow = jQuery.now() );
+}
+
+function clearFxNow() {
+	fxNow = undefined;
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, num ) {
+	var obj = {};
+
+	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
+		obj[ this ] = type;
+	});
+
+	return obj;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+	slideDown: genFx("show", 1),
+	slideUp: genFx("hide", 1),
+	slideToggle: genFx("toggle", 1),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+});
+
+jQuery.extend({
+	speed: function( speed, easing, fn ) {
+		var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
+			complete: fn || !fn && easing ||
+				jQuery.isFunction( speed ) && speed,
+			duration: speed,
+			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
+		};
+
+		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
+
+		// Queueing
+		opt.old = opt.complete;
+		opt.complete = function( noUnmark ) {
+			if ( opt.queue !== false ) {
+				jQuery.dequeue( this );
+			} else if ( noUnmark !== false ) {
+				jQuery._unmark( this );
+			}
+
+			if ( jQuery.isFunction( opt.old ) ) {
+				opt.old.call( this );
+			}
+		};
+
+		return opt;
+	},
+
+	easing: {
+		linear: function( p, n, firstNum, diff ) {
+			return firstNum + diff * p;
+		},
+		swing: function( p, n, firstNum, diff ) {
+			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
+		}
+	},
+
+	timers: [],
+
+	fx: function( elem, options, prop ) {
+		this.options = options;
+		this.elem = elem;
+		this.prop = prop;
+
+		options.orig = options.orig || {};
+	}
+
+});
+
+jQuery.fx.prototype = {
+	// Simple function for setting a style value
+	update: function() {
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
+	},
+
+	// Get the current size
+	cur: function() {
+		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
+			return this.elem[ this.prop ];
+		}
+
+		var parsed,
+			r = jQuery.css( this.elem, this.prop );
+		// Empty strings, null, undefined and "auto" are converted to 0,
+		// complex values such as "rotate(1rad)" are returned as is,
+		// simple values such as "10px" are parsed to Float.
+		return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
+	},
+
+	// Start an animation from one number to another
+	custom: function( from, to, unit ) {
+		var self = this,
+			fx = jQuery.fx,
+			raf;
+
+		this.startTime = fxNow || createFxNow();
+		this.start = from;
+		this.end = to;
+		this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
+		this.now = this.start;
+		this.pos = this.state = 0;
+
+		function t( gotoEnd ) {
+			return self.step(gotoEnd);
+		}
+
+		t.elem = this.elem;
+
+		if ( t() && jQuery.timers.push(t) && !timerId ) {
+			// Use requestAnimationFrame instead of setInterval if available
+			if ( requestAnimationFrame ) {
+				timerId = 1;
+				raf = function() {
+					// When timerId gets set to null at any point, this stops
+					if ( timerId ) {
+						requestAnimationFrame( raf );
+						fx.tick();
+					}
+				};
+				requestAnimationFrame( raf );
+			} else {
+				timerId = setInterval( fx.tick, fx.interval );
+			}
+		}
+	},
+
+	// Simple 'show' function
+	show: function() {
+		// Remember where we started, so that we can go back to it later
+		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+		this.options.show = true;
+
+		// Begin the animation
+		// Make sure that we start at a small width/height to avoid any
+		// flash of content
+		this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
+
+		// Start by showing the element
+		jQuery( this.elem ).show();
+	},
+
+	// Simple 'hide' function
+	hide: function() {
+		// Remember where we started, so that we can go back to it later
+		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+		this.options.hide = true;
+
+		// Begin the animation
+		this.custom(this.cur(), 0);
+	},
+
+	// Each step of an animation
+	step: function( gotoEnd ) {
+		var t = fxNow || createFxNow(),
+			done = true,
+			elem = this.elem,
+			options = this.options,
+			i, n;
+
+		if ( gotoEnd || t >= options.duration + this.startTime ) {
+			this.now = this.end;
+			this.pos = this.state = 1;
+			this.update();
+
+			options.animatedProperties[ this.prop ] = true;
+
+			for ( i in options.animatedProperties ) {
+				if ( options.animatedProperties[i] !== true ) {
+					done = false;
+				}
+			}
+
+			if ( done ) {
+				// Reset the overflow
+				if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
+
+					jQuery.each( [ "", "X", "Y" ], function (index, value) {
+						elem.style[ "overflow" + value ] = options.overflow[index];
+					});
+				}
+
+				// Hide the element if the "hide" operation was done
+				if ( options.hide ) {
+					jQuery(elem).hide();
+				}
+
+				// Reset the properties, if the item has been hidden or shown
+				if ( options.hide || options.show ) {
+					for ( var p in options.animatedProperties ) {
+						jQuery.style( elem, p, options.orig[p] );
+					}
+				}
+
+				// Execute the complete function
+				options.complete.call( elem );
+			}
+
+			return false;
+
+		} else {
+			// classical easing cannot be used with an Infinity duration
+			if ( options.duration == Infinity ) {
+				this.now = t;
+			} else {
+				n = t - this.startTime;
+				this.state = n / options.duration;
+
+				// Perform the easing function, defaults to swing
+				this.pos = jQuery.easing[ options.animatedProperties[ this.prop ] ]( this.state, n, 0, 1, options.duration );
+				this.now = this.start + ((this.end - this.start) * this.pos);
+			}
+			// Perform the next step of the animation
+			this.update();
+		}
+
+		return true;
+	}
+};
+
+jQuery.extend( jQuery.fx, {
+	tick: function() {
+		for ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) {
+			if ( !timers[i]() ) {
+				timers.splice(i--, 1);
+			}
+		}
+
+		if ( !timers.length ) {
+			jQuery.fx.stop();
+		}
+	},
+
+	interval: 13,
+
+	stop: function() {
+		clearInterval( timerId );
+		timerId = null;
+	},
+
+	speeds: {
+		slow: 600,
+		fast: 200,
+		// Default speed
+		_default: 400
+	},
+
+	step: {
+		opacity: function( fx ) {
+			jQuery.style( fx.elem, "opacity", fx.now );
+		},
+
+		_default: function( fx ) {
+			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
+				fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
+			} else {
+				fx.elem[ fx.prop ] = fx.now;
+			}
+		}
+	}
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.animated = function( elem ) {
+		return jQuery.grep(jQuery.timers, function( fn ) {
+			return elem === fn.elem;
+		}).length;
+	};
+}
+
+// Try to restore the default display value of an element
+function defaultDisplay( nodeName ) {
+
+	if ( !elemdisplay[ nodeName ] ) {
+
+		var elem = jQuery( "<" + nodeName + ">" ).appendTo( "body" ),
+			display = elem.css( "display" );
+
+		elem.remove();
+
+		// If the simple way fails,
+		// get element's real default display by attaching it to a temp iframe
+		if ( display === "none" || display === "" ) {
+			// No iframe to use yet, so create it
+			if ( !iframe ) {
+				iframe = document.createElement( "iframe" );
+				iframe.frameBorder = iframe.width = iframe.height = 0;
+			}
+
+			document.body.appendChild( iframe );
+
+			// Create a cacheable copy of the iframe document on first call.
+			// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake html
+			// document to it, Webkit & Firefox won't allow reusing the iframe document
+			if ( !iframeDoc || !iframe.createElement ) {
+				iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+				iframeDoc.write( "<!doctype><html><body></body></html>" );
+			}
+
+			elem = iframeDoc.createElement( nodeName );
+
+			iframeDoc.body.appendChild( elem );
+
+			display = jQuery.css( elem, "display" );
+
+			document.body.removeChild( iframe );
+		}
+
+		// Store the correct default display
+		elemdisplay[ nodeName ] = display;
+	}
+
+	return elemdisplay[ nodeName ];
+}
+
+
+
+
+var rtable = /^t(?:able|d|h)$/i,
+	rroot = /^(?:body|html)$/i;
+
+if ( "getBoundingClientRect" in document.documentElement ) {
+	jQuery.fn.offset = function( options ) {
+		var elem = this[0], box;
+
+		if ( options ) {
+			return this.each(function( i ) {
+				jQuery.offset.setOffset( this, options, i );
+			});
+		}
+
+		if ( !elem || !elem.ownerDocument ) {
+			return null;
+		}
+
+		if ( elem === elem.ownerDocument.body ) {
+			return jQuery.offset.bodyOffset( elem );
+		}
+
+		try {
+			box = elem.getBoundingClientRect();
+		} catch(e) {}
+
+		var doc = elem.ownerDocument,
+			docElem = doc.documentElement;
+
+		// Make sure we're not dealing with a disconnected DOM node
+		if ( !box || !jQuery.contains( docElem, elem ) ) {
+			return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
+		}
+
+		var body = doc.body,
+			win = getWindow(doc),
+			clientTop  = docElem.clientTop  || body.clientTop  || 0,
+			clientLeft = docElem.clientLeft || body.clientLeft || 0,
+			scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
+			scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
+			top  = box.top  + scrollTop  - clientTop,
+			left = box.left + scrollLeft - clientLeft;
+
+		return { top: top, left: left };
+	};
+
+} else {
+	jQuery.fn.offset = function( options ) {
+		var elem = this[0];
+
+		if ( options ) {
+			return this.each(function( i ) {
+				jQuery.offset.setOffset( this, options, i );
+			});
+		}
+
+		if ( !elem || !elem.ownerDocument ) {
+			return null;
+		}
+
+		if ( elem === elem.ownerDocument.body ) {
+			return jQuery.offset.bodyOffset( elem );
+		}
+
+		jQuery.offset.initialize();
+
+		var computedStyle,
+			offsetParent = elem.offsetParent,
+			prevOffsetParent = elem,
+			doc = elem.ownerDocument,
+			docElem = doc.documentElement,
+			body = doc.body,
+			defaultView = doc.defaultView,
+			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
+			top = elem.offsetTop,
+			left = elem.offsetLeft;
+
+		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
+			if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+				break;
+			}
+
+			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
+			top  -= elem.scrollTop;
+			left -= elem.scrollLeft;
+
+			if ( elem === offsetParent ) {
+				top  += elem.offsetTop;
+				left += elem.offsetLeft;
+
+				if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
+					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+					left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+				}
+
+				prevOffsetParent = offsetParent;
+				offsetParent = elem.offsetParent;
+			}
+
+			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
+				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+				left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+			}
+
+			prevComputedStyle = computedStyle;
+		}
+
+		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
+			top  += body.offsetTop;
+			left += body.offsetLeft;
+		}
+
+		if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+			top  += Math.max( docElem.scrollTop, body.scrollTop );
+			left += Math.max( docElem.scrollLeft, body.scrollLeft );
+		}
+
+		return { top: top, left: left };
+	};
+}
+
+jQuery.offset = {
+	initialize: function() {
+		var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0,
+			html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
+
+		jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
+
+		container.innerHTML = html;
+		body.insertBefore( container, body.firstChild );
+		innerDiv = container.firstChild;
+		checkDiv = innerDiv.firstChild;
+		td = innerDiv.nextSibling.firstChild.firstChild;
+
+		this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
+		this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
+
+		checkDiv.style.position = "fixed";
+		checkDiv.style.top = "20px";
+
+		// safari subtracts parent border width here which is 5px
+		this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
+		checkDiv.style.position = checkDiv.style.top = "";
+
+		innerDiv.style.overflow = "hidden";
+		innerDiv.style.position = "relative";
+
+		this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
+
+		this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
+
+		body.removeChild( container );
+		jQuery.offset.initialize = jQuery.noop;
+	},
+
+	bodyOffset: function( body ) {
+		var top = body.offsetTop,
+			left = body.offsetLeft;
+
+		jQuery.offset.initialize();
+
+		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
+			top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
+			left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
+		}
+
+		return { top: top, left: left };
+	},
+
+	setOffset: function( elem, options, i ) {
+		var position = jQuery.css( elem, "position" );
+
+		// set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		var curElem = jQuery( elem ),
+			curOffset = curElem.offset(),
+			curCSSTop = jQuery.css( elem, "top" ),
+			curCSSLeft = jQuery.css( elem, "left" ),
+			calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+			props = {}, curPosition = {}, curTop, curLeft;
+
+		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+			options = options.call( elem, i, curOffset );
+		}
+
+		if (options.top != null) {
+			props.top = (options.top - curOffset.top) + curTop;
+		}
+		if (options.left != null) {
+			props.left = (options.left - curOffset.left) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+
+jQuery.fn.extend({
+	position: function() {
+		if ( !this[0] ) {
+			return null;
+		}
+
+		var elem = this[0],
+
+		// Get *real* offsetParent
+		offsetParent = this.offsetParent(),
+
+		// Get correct offsets
+		offset       = this.offset(),
+		parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+
+		// Subtract element margins
+		// note: when an element has margin: auto the offsetLeft and marginLeft
+		// are the same in Safari causing offset.left to incorrectly be 0
+		offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
+		offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+
+		// Add offsetParent borders
+		parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
+		parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
+
+		// Subtract the two offsets
+		return {
+			top:  offset.top  - parentOffset.top,
+			left: offset.left - parentOffset.left
+		};
+	},
+
+	offsetParent: function() {
+		return this.map(function() {
+			var offsetParent = this.offsetParent || document.body;
+			while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+			return offsetParent;
+		});
+	}
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( ["Left", "Top"], function( i, name ) {
+	var method = "scroll" + name;
+
+	jQuery.fn[ method ] = function( val ) {
+		var elem, win;
+
+		if ( val === undefined ) {
+			elem = this[ 0 ];
+
+			if ( !elem ) {
+				return null;
+			}
+
+			win = getWindow( elem );
+
+			// Return the scroll offset
+			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
+				jQuery.support.boxModel && win.document.documentElement[ method ] ||
+					win.document.body[ method ] :
+				elem[ method ];
+		}
+
+		// Set the scroll offset
+		return this.each(function() {
+			win = getWindow( this );
+
+			if ( win ) {
+				win.scrollTo(
+					!i ? val : jQuery( win ).scrollLeft(),
+					 i ? val : jQuery( win ).scrollTop()
+				);
+
+			} else {
+				this[ method ] = val;
+			}
+		});
+	};
+});
+
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ?
+		elem :
+		elem.nodeType === 9 ?
+			elem.defaultView || elem.parentWindow :
+			false;
+}
+
+
+
+
+// Create innerHeight, innerWidth, outerHeight and outerWidth methods
+jQuery.each([ "Height", "Width" ], function( i, name ) {
+
+	var type = name.toLowerCase();
+
+	// innerHeight and innerWidth
+	jQuery.fn["inner" + name] = function() {
+		return this[0] ?
+			parseFloat( jQuery.css( this[0], type, "padding" ) ) :
+			null;
+	};
+
+	// outerHeight and outerWidth
+	jQuery.fn["outer" + name] = function( margin ) {
+		return this[0] ?
+			parseFloat( jQuery.css( this[0], type, margin ? "margin" : "border" ) ) :
+			null;
+	};
+
+	jQuery.fn[ type ] = function( size ) {
+		// Get window width or height
+		var elem = this[0];
+		if ( !elem ) {
+			return size == null ? null : this;
+		}
+
+		if ( jQuery.isFunction( size ) ) {
+			return this.each(function( i ) {
+				var self = jQuery( this );
+				self[ type ]( size.call( this, i, self[ type ]() ) );
+			});
+		}
+
+		if ( jQuery.isWindow( elem ) ) {
+			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
+			// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
+			var docElemProp = elem.document.documentElement[ "client" + name ];
+			return elem.document.compatMode === "CSS1Compat" && docElemProp ||
+				elem.document.body[ "client" + name ] || docElemProp;
+
+		// Get document width or height
+		} else if ( elem.nodeType === 9 ) {
+			// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
+			return Math.max(
+				elem.documentElement["client" + name],
+				elem.body["scroll" + name], elem.documentElement["scroll" + name],
+				elem.body["offset" + name], elem.documentElement["offset" + name]
+			);
+
+		// Get or set width or height on the element
+		} else if ( size === undefined ) {
+			var orig = jQuery.css( elem, type ),
+				ret = parseFloat( orig );
+
+			return jQuery.isNaN( ret ) ? orig : ret;
+
+		// Set the width or height on the element (default to pixels if value is unitless)
+		} else {
+			return this.css( type, typeof size === "string" ? size : size + "px" );
+		}
+	};
+
+});
+
+
+window.jQuery = window.$ = jQuery;
+})(window);
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/nohtml/jquery-nohtml.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/nohtml/jquery-nohtml.js
new file mode 100644
index 0000000..1c62168
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/nohtml/jquery-nohtml.js
@@ -0,0 +1,96 @@
+(function($, document) {
+
+	var create = $.create = (function() {
+
+		function addAttrs( el, obj, context ) {
+			for( var attr in obj ){
+				switch( attr ) {
+				case 'tag' :
+					break;
+				case 'html' :
+					el.innerHTML = obj[ attr ];
+					break;
+				case 'css' :
+					for( var style in obj.css ) {
+						$.attr( el.style, style, obj.css[ style ] );
+					}
+					break;
+				case 'text' : case 'child' : case 'children' :
+					createNode( obj[attr], el, context );
+					break;
+				case 'cls' :
+					el.className = obj[attr];
+					break;
+				case 'data' :
+					for( var data in obj.data ) {
+						$.data( el, data, obj.data[data] );
+					}
+					break;
+				default :
+					if( attr.indexOf("on") === 0 && $.isFunction(obj[attr]) ) {
+						$.event.add( el, attr.substr(2).replace(/^[A-Z]/, function(a) { return a.toLowerCase(); }), obj[attr] );
+					} else {
+						$.attr( el, attr, obj[attr] );
+					}
+				}
+			}
+		}
+
+		function createNode(obj, parent, context) {
+			if(obj && ($.isArray(obj) || obj instanceof $)) {
+				for(var ret = [], i = 0; i < obj.length; i++) {
+					var newNode = createNode(obj[i], parent, context);
+					if(newNode) {
+						ret.push(newNode);
+					}
+				}
+				return ret;
+			}
+			var el;
+			if(typeof(obj) === 'string') {
+				el = context.createTextNode( obj );
+			} else if(!obj) {
+				return undefined;
+			} else if(obj.nodeType === 1) {
+				el = obj;
+			} else if( obj instanceof app.ui.AbstractWidget ) {
+				el = obj.el[0];
+			} else {
+				el = context.createElement( obj.tag || 'DIV' );
+				addAttrs(el, obj, context);
+			}
+			if(parent){ parent.appendChild(el); }
+			return el;
+		}
+
+		return function(elementDef, parentNode) {
+			return createNode(elementDef, parentNode, (parentNode && parentNode.ownerDocument) || document);
+		};
+		
+	})();
+	
+
+	// inject create into jquery internals so object definitions are treated as first class constructors (overrides non-public methods)
+	var clean = $.clean,
+		init = $.fn.init;
+
+	$.clean = function( elems, context, fragment, scripts ) {
+		for(var i = 0; i < elems.length; i++) {
+			if( elems[i].tag || elems[i] instanceof app.ui.AbstractWidget ) {
+				elems[i] = create( elems[i], null, context );
+			}
+		}
+		return clean( elems, context, fragment, scripts );
+	};
+
+	$.fn.init = function( selector, context, rootjQuery ) {
+		if ( selector && ( selector.tag || selector instanceof app.ui.AbstractWidget )) {
+			selector = create( selector, null, context );
+		}
+		return init.call( this, selector, context, rootjQuery );
+	};
+
+	$.fn.init.prototype = $.fn;
+
+})(jQuery, window.document);
+
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/demo.html b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/demo.html
new file mode 100644
index 0000000..333a920
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/demo.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+
+<html>
+	<head>
+		<meta charset="UTF-8">
+		<title>Elasticsearch UI Demo</title>
+		<link rel="stylesheet" href="../_site/base/reset.css">
+		<link rel="stylesheet" href="../_site/app.css">
+		<script src="../_site/i18n.js" data-baseDir="../_site/lang" data-langs="en,fr"></script>
+		<script src="../_site/vendor.js"></script>
+		<script src="../_site/app.js"></script>
+		<script>
+			$( function() {
+				var args = location.search.substring(1).split("&").reduce(function(r, p) {
+					r[decodeURIComponent(p.split("=")[0])] = decodeURIComponent(p.split("=")[1]); return r;
+				}, {});
+				var script0 = document.getElementsByTagName('script')[0];
+				var s = document.createElement("script");
+				s.src = '../src/' + args['demo'];
+				s.onload = function() {
+					$("body").append(
+						{ tag: "DIV", children: [
+							window.builder()
+						] }
+					);
+				}
+				script0.parentNode.insertBefore(s, script0);
+				document.title = args['demo'].match(/([^\/]+)(\.js)$/)[1]
+			} );
+		</script>
+		<link rel="icon" href="../_site/app/favicon.png" type="image/png">
+	</head>
+	<body></body>
+</html>
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/generators/conflictingField.sh b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/generators/conflictingField.sh
new file mode 100755
index 0000000..917d896
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/generators/conflictingField.sh
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+curl -XDELETE 'http://localhost:9200/conflicting_field_type'
+echo
+curl -XPUT 'http://localhost:9200/conflicting_field_type'
+echo
+curl -XPUT 'http://localhost:9200/conflicting_field_type/map1/_mapping' -d '{
+  "map1": {
+    "date_formats": ["date_time", "yyyyMMddHHmmss", "yyyyMMddHHmmssSSS"],
+    "_all": {
+      "enabled": true,
+      "store": "yes"
+    },
+    "properties": {
+      "field1": {
+        "type": "date",
+        "store": "yes",
+        "format": "yyyyMMddHHmmssSSS",
+        "include_in_all": false
+      }
+    }
+  }
+}'
+echo
+curl -XPUT 'http://localhost:9200/conflicting_field_type/map2/_mapping' -d '{
+  "map2": {
+    "date_formats": ["date_time", "yyyyMMddHHmmss", "yyyyMMddHHmmssSSS"],
+    "_all": {
+      "enabled": true,
+      "store": "yes"
+    },
+    "properties": {
+      "field1": {
+        "type": "string",
+        "store": "yes",
+        "term_vector": "yes",
+        "include_in_all": false
+      }
+    }
+  }
+}'
+echo
+curl -XPUT 'http://localhost:9200/conflicting_field_type/map1/1' -d '{
+    "field1" : "20110214172449000"
+}'
+echo
+curl -XPUT 'http://localhost:9200/conflicting_field_type/map2/2' -d '{
+    "field1" : "Test map2 with string type field"
+}'
+echo
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/generators/delete_all_indices.sh b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/generators/delete_all_indices.sh
new file mode 100644
index 0000000..878964c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/generators/delete_all_indices.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+curl -XDELETE 'http://localhost:9200/conflicting_field_type'
+echo
+curl -XDELETE 'http://localhost:9200/twitter'
+echo
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/generators/multi_type.sh b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/generators/multi_type.sh
new file mode 100755
index 0000000..5623462
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/generators/multi_type.sh
@@ -0,0 +1,75 @@
+curl -XDELETE 'http://localhost:9200/multi_field_type'
+echo
+curl -XPUT 'http://localhost:9200/multi_field_type'
+echo
+curl -XPUT 'http://localhost:9200/multi_field_type/map1/_mapping' -d '{
+	"map1": {
+		"properties": {
+			"field1": {
+				"type": "string",
+				"store": "yes"
+			},
+			"field2": {
+				"type": "multi_field",
+				"path": "full",
+				"fields": {
+					"field2": { "type": "string" },
+					"alt_name": { "type": "string" },
+					"alt_name2": { "type": "string" }
+				}
+			},
+			"field3": {
+				"type": "multi_field",
+				"path": "just_name",
+				"fields": {
+					"field3": { "type": "string" },
+					"foobar": { "type": "string" }
+				}
+			},
+			"field4": {
+				"type": "multi_field",
+				"path": "just_name",
+				"fields": {
+					"field4": { "type": "string" },
+					"foobar": { "type": "string" }
+				}
+			},
+			"field5": {
+				"type": "string"
+			}
+		}
+	}
+}'
+echo
+curl -XPUT 'http://localhost:9200/multi_field_type/map1/1' -d '{
+	"field1": "Whats the dogs name",
+	"field2": "Max",
+	"field3": "Hey Janelle, whats wrong with Wolfie? I can hear him barking",
+	"field4": "Wolfies fine, honey, Wolfies just fine. Where are you",
+	"field5": "Your foster parents are dead"
+}'
+echo
+curl -XPUT 'http://localhost:9200/multi_field_type/map1/2' -d '{
+	"field1": "Nice night for a walk, eh",
+	"field2": "Nice night for a walk",
+	"field3": "Wash day tomorrow? Nothing clean, right?",
+	"field4": "Nothing clean. Right",
+	"field5": "Hey, I think this guys a couple cans short of a six-pack"
+}'
+echo
+curl -XPUT 'http://localhost:9200/multi_field_type/map1/3' -d '{
+	"field1": "The 600 series had rubber skin. We spotted them easy, but these are new. They look human... sweat, bad breath, everything. Very hard to spot. I had to wait till he moved on you before I could zero him",
+	"field2": "Look... I am not stupid, you know. They cannot make things like that yet.",
+	"field3": "Not yet. Not for about 40 years",
+	"field4": "Are you saying its from the future?",
+	"field5": "One possible future. From your point of view... I dont know tech stuff"
+}'
+echo
+curl -XPUT 'http://localhost:9200/multi_field_type/map1/4' -d '{
+	"field1": "Did you see this war?",
+	"field2": "No. I grew up after. In the ruins... starving... hiding from H-Ks",
+	"field3": "H-Ks?",
+	"field4": "Hunter-Killers. Patrol machines built in automated factories. Most of us were rounded up, put in camps for orderly disposal",
+	"field5": "This is burned in by laser scan. Some of us were kept alive... to work... loading bodies. The disposal units ran night and day. We were that close to going out forever. But there was one man who taught us to fight, to storm the wire of the camps, to smash those metal motherfuckers into junk. He turned it around. He brought us back from the brink. His name is Connor. John Connor. Your son, Sarah, your unborn son"
+}'
+echo
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/generators/twitter_feed.sh b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/generators/twitter_feed.sh
new file mode 100755
index 0000000..165246a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/generators/twitter_feed.sh
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+curl -XDELETE 'http://localhost:9200/twitter'
+echo
+curl -XPUT 'http://localhost:9200/twitter'
+echo
+curl -XPUT 'http://localhost:9200/twitter/_mapping' -d '{
+	"tweet": {
+		"date_formats": ["date_time", "yyyyMMddHHmmss", "yyyyMMddHHmmssSSS"],
+		"properties" : {
+			"user" : { "type" : "string", "index" : "not_analyzed" },
+			"message" : { "type" : "string" },
+			"postDate" : { "type" : "date" },
+			"srcAddr" : { "type" : "ip" },
+			"priority" : { "type" : "integer", null_value: 1 },
+			"rank" : { "type" : "float", null_value: 1.0 },
+			"loc" : { "type": "geo_point" }
+		}
+	}
+}'
+echo
+curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
+	"user" : "mobz",
+	"message" : "developing a tool to search with",
+	"postDate" : "20110220100330",
+	"srcAddr" : "203.19.74.11",
+	"loc" : "-37.86,144.90"
+}'
+echo
+curl -XPUT 'http://localhost:9200/twitter/tweet/2' -d '{
+	"user" : "mobz",
+	"message" : "you know, for elastic search",
+	"postDate" : "20110220095900",
+	"srcAddr" : "203.19.74.11",
+	"loc" : "-37.86,144.90"
+}'
+echo
+curl -XPUT 'http://localhost:9200/twitter/tweet/3' -d '{
+	"user" : "mobz",
+	"message" : "lets take some matilda bay",
+	"postDate" : "20110221171330",
+	"srcAddr" : "203.19.74.11",
+	"loc" : "-37.86,144.90"
+}'
+echo
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/generators/twitter_river.sh b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/generators/twitter_river.sh
new file mode 100755
index 0000000..e55c665
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/generators/twitter_river.sh
@@ -0,0 +1,28 @@
+curl -XDELETE 'http://localhost:9200/twitter_river'
+echo
+curl -XDELETE 'http://localhost:9200/_river/twitter_river'
+echo
+curl -XPUT 'http://localhost:9200/twitter_river'
+echo
+read -p "consumer key: " consumer_key
+read -p "consumer secret: " consumer_secret
+read -p "access token: " access_token
+read -p "access token secret: " access_token_secret
+curl -XPUT 'localhost:9200/_river/twitter_river/_meta' -d '
+{
+	"type" : "twitter",
+	"twitter" : {
+		"oauth": {
+			"consumer_key": "'${consumer_key}'",
+			"consumer_secret": "'${consumer_secret}'",
+			"access_token": "'${access_token}'",
+			"access_token_secret": "'${access_token_secret}'"
+		}
+	},
+	"index": {
+		"index": "twitter_river",
+		"type": "status",
+		"buk_size": 100
+	}
+}'
+echo
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/perf.html b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/perf.html
new file mode 100644
index 0000000..eecfc0a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/perf.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+
+<html>
+	<head>
+		<meta charset="UTF-8">
+		<title>Elasticsearch UI Performance Testing Harness</title>
+		<link rel="stylesheet" href="../_site/base/reset.css">
+		<link rel="stylesheet" href="../_site/app.css">
+		<script src="../_site/i18n.js" data-baseDir="../_site/lang" data-langs="en,fr"></script>
+		<script src="../_site/vendor.js"></script>
+		<script src="../_site/app.js"></script>
+		<script>
+			$( function() {
+				var widget;
+				var container = document.getElementById("demo");
+				function build() {
+					widget = window.builder();
+					widget.attach( demo );
+				}
+				function remove() {
+					widget.remove();
+					widget = null;
+				}
+				var args = location.search.substring(1).split("&").reduce(function(r, p) {
+					r[decodeURIComponent(p.split("=")[0])] = decodeURIComponent(p.split("=")[1]); return r;
+				}, {});
+				var script0 = document.getElementsByTagName('script')[0];
+				var s = document.createElement("script");
+				s.src = '../src/' + args['demo'];
+				script0.parentNode.insertBefore(s, script0);
+				document.title = args['demo'].match(/([^\/]+)(\.js)$/)[1];
+				document.getElementsByName("build")[0].addEventListener("click", build );
+				document.getElementsByName("remove")[0].addEventListener("click", remove );
+				document.getElementsByName("repeat")[0].addEventListener("click", function() {
+					console.time("build x 1000 in");
+					for( var i = 0; i < 1000; i++ ) {
+						build();
+						remove();
+					}
+					console.timeEnd("build x 1000 in");
+				});
+			} );
+		</script>
+		<link rel="icon" href="../_site/app/favicon.png" type="image/png">
+	</head>
+	<body>
+		<div class="header">
+			<button type="button" name="build">Build</button>
+			<button type="button" name="remove">Remove</button>
+			<button type="button" name="repeat">Build and Remove x 1000</button>
+		</div>
+		<div id="demo"></div>
+	</body>
+</html>
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/spec/specHelper.js b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/spec/specHelper.js
new file mode 100644
index 0000000..55ba80d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/spec/specHelper.js
@@ -0,0 +1,81 @@
+// find *Spec.js files in the src directory next to the corresponding source file
+
+var test = window.test = {};
+
+test.cb = (function( jasmine ) {
+	var callbacks = [];
+
+	return {
+		use: function() {
+			callbacks = [];
+		},
+		createSpy: function( name, arg, data, context ) {
+			return jasmine.createSpy( name ).and.callFake( function() {
+				callbacks.push( { cb: arguments[ arg || 0 ], data: data, context: context } );
+			});
+		},
+		execOne: function() {
+			var exec = callbacks.shift();
+			exec.cb.apply( exec.context, exec.data );
+		},
+		execAll: function() {
+			while( callbacks.length ) {
+				this.execOne();
+			}
+		}
+	};
+})( this.jasmine );
+
+
+test.clock = ( function() {
+	var id = 0, timers, saved;
+	var names = [ "setTimeout", "setInterval", "clearTimeout", "clearInterval" ];
+	var byNext = function( a, b ) { return a.next - b.next; };
+	var mocks = {
+		setTimeout: function( fn, t ) {
+			timers.push( { id: id, fn: fn, next: t, t: t, type: "t" } );
+			return id++;
+		},
+		clearTimeout: function( id ) {
+			timers = timers.filter( function( timer ) { return timer.id !== id; } );
+		},
+		setInterval: function( fn, t ) {
+			timers.push( { id: id, fn: fn, next: t, t: t, type: "i" } );
+			return id++;
+		},
+		clearInterval: function( id ) {
+			timers = timers.filter( function( timer ) { return timer.id !== id; } );
+		}
+	};
+
+	return {
+		steal: function() {
+			timers = [];
+			saved = {};
+			names.forEach( function( n ) {
+				saved[n] = window[n];
+				window[n] = mocks[n];
+			});
+		},
+		restore: function() {
+			names.forEach( function( n ) {
+				window[n] = saved[n];
+			});
+			timers = null;
+			saved = null;
+		},
+		tick: function() {
+			if( timers.length ) {
+				timers.sort( byNext );
+				var t0 = timers[0];
+				if( t0.type === "t" ) {
+					timers.shift();
+				} else {
+					t0.next += t0.t;
+				}
+				t0.fn();
+			}
+		}
+	};
+
+})();
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml b/sdnr/wt/devicemanager/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
new file mode 100644
index 0000000..a9a4e18
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============LICENSE_START=======================================================
+ONAP : ccsdk feature sdnr wt devicemanager
+ ================================================================================
+Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
+All rights reserved.
+================================================================================
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+============LICENSE_END=========================================================
+ -->
+
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+  xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0" odl:use-default-for-reference-types="true">
+
+  <reference id="dataBroker" interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"
+    odl:type="default" />
+
+  <reference id="notificationPublishService"
+             interface="org.opendaylight.controller.md.sal.binding.api.NotificationPublishService"
+             odl:type="default" />
+
+  <reference id="mountPointService"
+             interface="org.opendaylight.controller.md.sal.binding.api.MountPointService"
+             odl:type="default" />
+
+  <reference id="rpcProviderRegistry" interface="org.opendaylight.controller.sal.binding.api.RpcProviderRegistry"
+    odl:type="default" />
+
+
+ <bean id="provider" class="org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerImpl" init-method="init" destroy-method="close">
+    <property name="dataBroker" ref="dataBroker"/>
+    <property name="rpcProviderRegistry" ref="rpcProviderRegistry" />
+    <property name="notificationPublishService" ref="notificationPublishService" />
+    <property name="mountPointService" ref="mountPointService" />
+  </bean>
+
+
+</blueprint>
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/bbf-tr-196-2-0-3-full@2018-04-08.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/bbf-tr-196-2-0-3-full@2018-04-08.yang
new file mode 100644
index 0000000..d10c58b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/bbf-tr-196-2-0-3-full@2018-04-08.yang
@@ -0,0 +1,17194 @@
+module bbf-tr-196-2-0-3-full {
+  namespace "urn:onf:otcc:wireless:yang:radio-access";
+  prefix ran;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  organization
+    "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Project";
+  contact
+    "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+     WG List:  <mailto:wireless-transport@login.opennetworking.org>
+     WG Chair: Lyndon Ong         <mailto:lyong@ciena.com>
+     WG Chair: Giorgio Cazzaniga  <mailto:giorgio.cazzaniga@sm-optics.com>
+     Editors:  Ramakrishnan, Shanthakumar (Shanth) <Shanthakumar.Ramakrishnan@commscope.com>                    Martin Skorupski   <mailto:martin.skorupski@highstreet-technologies.com>";
+  description
+    "This module contains a collection of YANG definitions for managing radio access network (RAN) devices.";
+
+  revision 2018-04-08 {
+    description
+      "Initial version, used only for ONAP PoC 2018-06-25";
+    reference
+      "ONF TR ???: A YANG Data Model for Radio Access Networks.
+       BBF TR-196 2.0.3 full";
+  }
+
+  list fap-service {
+    key "alias";
+    uses fap-service-g;
+    container capabilities {
+      uses capabilities-g;
+      description
+        "Container for object class FAPService.{i}.Capabilities.";
+      container capabilities-umts {
+        uses capabilities-umts-g;
+        description
+          "Container for object class FAPService.{i}.Capabilities.UMTS.";
+        container capabilities-umts-self-config {
+          uses capabilities-umts-self-config-g;
+          description
+            "Container for object class FAPService.{i}.Capabilities.UMTS.SelfConfig.";
+        }
+      }
+      container capabilities-lte {
+        uses capabilities-lte-g;
+        description
+          "Container for object class FAPService.{i}.Capabilities.LTE.";
+      }
+      container capabilities-cdma2000 {
+        uses capabilities-cdma2000-g;
+        description
+          "Container for object class FAPService.{i}.Capabilities.CDMA2000.";
+        container capabilities-cdma2000-one-x {
+          uses capabilities-cdma2000-one-x-g;
+          description
+            "Container for object class FAPService.{i}.Capabilities.CDMA2000.OneX.";
+          container capabilities-cdma2000-one-x-self-config {
+            uses capabilities-cdma2000-one-x-self-config-g;
+            description
+              "Container for object class FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.";
+          }
+        }
+        container capabilities-cdma2000-hrpd {
+          uses capabilities-cdma2000-hrpd-g;
+          description
+            "Container for object class FAPService.{i}.Capabilities.CDMA2000.HRPD.";
+          container capabilities-cdma2000-hrpd-self-config {
+            uses capabilities-cdma2000-hrpd-self-config-g;
+            description
+              "Container for object class FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.";
+          }
+        }
+      }
+    }
+    container fap-control {
+      uses fap-control-g;
+      description
+        "Container for object class FAPService.{i}.FAPControl.";
+      container fap-control-umts {
+        uses fap-control-umts-g;
+        description
+          "Container for object class FAPService.{i}.FAPControl.UMTS.";
+        container fap-control-umts-self-config {
+          uses fap-control-umts-self-config-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.UMTS.SelfConfig.";
+        }
+        container fap-control-umts-gateway {
+          uses fap-control-umts-gateway-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.UMTS.Gateway.";
+        }
+      }
+      container fap-control-lte {
+        uses fap-control-lte-g;
+        description
+          "Container for object class FAPService.{i}.FAPControl.LTE.";
+        container fap-control-lte-gateway {
+          uses fap-control-lte-gateway-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.LTE.Gateway.";
+        }
+      }
+      container fap-control-cdma2000 {
+        uses fap-control-cdma2000-g;
+        description
+          "Container for object class FAPService.{i}.FAPControl.CDMA2000.";
+        container fap-control-cdma2000-time {
+          uses fap-control-cdma2000-time-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.CDMA2000.Time.";
+        }
+        container fap-control-cdma2000-one-x {
+          uses fap-control-cdma2000-one-x-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.CDMA2000.OneX.";
+          container fap-control-cdma2000-one-x-active-handin-measurement {
+            uses fap-control-cdma2000-one-x-active-handin-measurement-g;
+            description
+              "Container for object class FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinMeasurement.";
+          }
+          container fap-control-cdma2000-one-x-self-config {
+            uses fap-control-cdma2000-one-x-self-config-g;
+            description
+              "Container for object class FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.";
+          }
+        }
+        container fap-control-cdma2000-gateway {
+          uses fap-control-cdma2000-gateway-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.CDMA2000.Gateway.";
+        }
+        container fap-control-cdma2000-hrpd {
+          uses fap-control-cdma2000-hrpd-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.CDMA2000.HRPD.";
+          container fap-control-cdma2000-hrpd-self-config {
+            uses fap-control-cdma2000-hrpd-self-config-g;
+            description
+              "Container for object class FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.";
+          }
+          container fap-control-cdma2000-hrpd-a13 {
+            uses fap-control-cdma2000-hrpd-a13-g;
+            description
+              "Container for object class FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.";
+            list fap-control-cdma2000-hrpd-a13-color-code-to-uati104 {
+              key "color-code uati104";
+              uses fap-control-cdma2000-hrpd-a13-color-code-to-uati104-g;
+              description
+                "List of object class FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.";
+            }
+            list fap-control-cdma2000-hrpd-a13-hrpd-subnet-to-ip {
+              key "a13-ip-address";
+              uses fap-control-cdma2000-hrpd-a13-hrpd-subnet-to-ip-g;
+              description
+                "List of object class FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.";
+            }
+          }
+        }
+      }
+    }
+    container access-mgmt {
+      uses access-mgmt-g;
+      description
+        "Container for object class FAPService.{i}.AccessMgmt.";
+      container access-mgmt-umts {
+        uses access-mgmt-umts-g;
+        description
+          "Container for object class FAPService.{i}.AccessMgmt.UMTS.";
+        list access-mgmt-umts-member-detail {
+          key "imsi";
+          uses access-mgmt-umts-member-detail-g;
+          description
+            "List of object class FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.";
+        }
+        container access-mgmt-umts-local-ip-access {
+          uses access-mgmt-umts-local-ip-access-g;
+          description
+            "Container for object class FAPService.{i}.AccessMgmt.UMTS.LocalIPAccess.";
+        }
+      }
+      container access-mgmt-lte {
+        uses access-mgmt-lte-g;
+        description
+          "Container for object class FAPService.{i}.AccessMgmt.LTE.";
+        container access-mgmt-lte-local-ip-access {
+          uses access-mgmt-lte-local-ip-access-g;
+          description
+            "Container for object class FAPService.{i}.AccessMgmt.LTE.LocalIPAccess.";
+        }
+      }
+      container access-mgmt-cdma2000 {
+        uses access-mgmt-cdma2000-g;
+        description
+          "Container for object class FAPService.{i}.AccessMgmt.CDMA2000.";
+        list access-mgmt-cdma2000-member-detail {
+          key "imsi";
+          uses access-mgmt-cdma2000-member-detail-g;
+          description
+            "List of object class FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.";
+        }
+        container access-mgmt-cdma2000-local-ip-access {
+          uses access-mgmt-cdma2000-local-ip-access-g;
+          description
+            "Container for object class FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.";
+          container access-mgmt-cdma2000-local-ip-access-hrpd {
+            uses access-mgmt-cdma2000-local-ip-access-hrpd-g;
+            description
+              "Container for object class FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.";
+            list access-mgmt-cdma2000-local-ip-access-hrpd-egress-filter {
+              key "subnet subnet-mask";
+              uses access-mgmt-cdma2000-local-ip-access-hrpd-egress-filter-g;
+              description
+                "List of object class FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.";
+            }
+          }
+        }
+      }
+      container access-mgmt-legacy {
+        uses access-mgmt-legacy-g;
+        description
+          "Container for object class FAPService.{i}.AccessMgmt.Legacy.";
+        container access-mgmt-legacy-local-ip-access {
+          uses access-mgmt-legacy-local-ip-access-g;
+          description
+            "Container for object class FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.";
+          list access-mgmt-legacy-local-ip-access-rule {
+            key "dest-ip-address dest-subnet-mask protocol";
+            uses access-mgmt-legacy-local-ip-access-rule-g;
+            description
+              "List of object class FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.";
+          }
+        }
+      }
+    }
+    container cell-config {
+      uses cell-config-g;
+      description
+        "Container for object class FAPService.{i}.CellConfig.";
+      container umts {
+        uses umts-g;
+        description
+          "Container for object class FAPService.{i}.CellConfig.UMTS.";
+        container umts-cn {
+          uses umts-cn-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.UMTS.CN.";
+          container umts-cn-cs-domain {
+            uses umts-cn-cs-domain-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.CN.CSDomain.";
+          }
+          container umts-cn-ps-domain {
+            uses umts-cn-ps-domain-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.CN.PSDomain.";
+          }
+        }
+        container umts-ran {
+          uses umts-ran-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.";
+          container umts-ran-csg {
+            uses umts-ran-csg-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.CSG.";
+            container umts-ran-csg-csgpsc-split-info {
+              uses umts-ran-csg-csgpsc-split-info-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.";
+            }
+          }
+          container umts-ran-cell-selection {
+            uses umts-ran-cell-selection-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.";
+          }
+          container umts-ran-rrc-timers {
+            uses umts-ran-rrc-timers-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.";
+          }
+          container umts-ran-drx {
+            uses umts-ran-drx-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.DRX.";
+          }
+          container umts-ran-power-control {
+            uses umts-ran-power-control-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.";
+          }
+          container umts-ran-cell-restriction {
+            uses umts-ran-cell-restriction-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.";
+          }
+          container umts-ran-intra-freq-meas {
+            uses umts-ran-intra-freq-meas-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.";
+            list umts-ran-intra-freq-meas-instance {
+              key "intra-frequency-event-identity";
+              uses umts-ran-intra-freq-meas-instance-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.";
+            }
+          }
+          container umts-ran-inter-freq-meas {
+            uses umts-ran-inter-freq-meas-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.";
+            list umts-ran-inter-freq-meas-instance {
+              key "intra-frequency-event-identity";
+              uses umts-ran-inter-freq-meas-instance-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.";
+            }
+          }
+          container umts-ran-inter-rat-meas {
+            uses umts-ran-inter-rat-meas-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.";
+            list umts-ran-inter-rat-meas-instance {
+              key "inter-rat-event-identity";
+              uses umts-ran-inter-rat-meas-instance-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.";
+            }
+          }
+          container umts-ran-ue-internal-meas {
+            uses umts-ran-ue-internal-meas-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.";
+          }
+          container umts-ran-rf {
+            uses umts-ran-rf-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.RF.";
+          }
+          container umts-ran-neighbor-list {
+            uses umts-ran-neighbor-list-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.";
+            list umts-ran-neighbor-list-intra-freq-cell {
+              key "pcpich-scrambling-code";
+              uses umts-ran-neighbor-list-intra-freq-cell-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.";
+            }
+            list umts-ran-neighbor-list-inter-freq-cell {
+              key "pcpich-scrambling-code uarfcndl";
+              uses umts-ran-neighbor-list-inter-freq-cell-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.";
+            }
+            container umts-ran-neighbor-list-inter-rat-cell {
+              uses umts-ran-neighbor-list-inter-rat-cell-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.";
+              list umts-ran-neighbor-list-inter-rat-cell-gsm {
+                key "bccharfcn";
+                uses umts-ran-neighbor-list-inter-rat-cell-gsm-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.";
+              }
+            }
+          }
+          container umts-ran-neighbor-list-in-use {
+            uses umts-ran-neighbor-list-in-use-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.";
+            list umts-ran-neighbor-list-in-use-intra-freq-cell {
+              key "pcpich-scrambling-code";
+              uses umts-ran-neighbor-list-in-use-intra-freq-cell-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.";
+            }
+            list umts-ran-neighbor-list-in-use-inter-freq-cell {
+              key "pcpich-scrambling-code uarfcndl";
+              uses umts-ran-neighbor-list-in-use-inter-freq-cell-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.";
+            }
+            container umts-ran-neighbor-list-in-use-inter-rat-cell {
+              uses umts-ran-neighbor-list-in-use-inter-rat-cell-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.";
+              list umts-ran-neighbor-list-in-use-inter-rat-cell-gsm {
+                key "bccharfcn";
+                uses umts-ran-neighbor-list-in-use-inter-rat-cell-gsm-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.";
+              }
+            }
+          }
+        }
+        container umts-rab {
+          uses umts-rab-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.UMTS.RAB.";
+        }
+      }
+      container lte {
+        uses lte-g;
+        description
+          "Container for object class FAPService.{i}.CellConfig.LTE.";
+        list lte-tunnel {
+          key "tunnel-ref";
+          uses lte-tunnel-g;
+          description
+            "List of object class FAPService.{i}.CellConfig.LTE.Tunnel.{i}.";
+        }
+        container lte-epc {
+          uses lte-epc-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.LTE.EPC.";
+          list lte-epc-plmn-list {
+            key "plmnid";
+            uses lte-epc-plmn-list-g;
+            description
+              "List of object class FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.";
+          }
+          list lte-epc-qo-s {
+            key "qci";
+            uses lte-epc-qo-s-g;
+            description
+              "List of object class FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.";
+          }
+        }
+        container lte-ran {
+          uses lte-ran-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.LTE.RAN.";
+          container lte-ran-common {
+            uses lte-ran-common-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Common.";
+          }
+          container lte-ran-s1-ap {
+            uses lte-ran-s1-ap-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.S1AP.";
+          }
+          container lte-ran-s1-u {
+            uses lte-ran-s1-u-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.S1U.";
+          }
+          container lte-ran-rf {
+            uses lte-ran-rf-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.RF.";
+          }
+          container lte-ran-phy {
+            uses lte-ran-phy-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.";
+            container lte-ran-phy-antenna-info {
+              uses lte-ran-phy-antenna-info-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.AntennaInfo.";
+            }
+            container lte-ran-phy-pdsch {
+              uses lte-ran-phy-pdsch-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.PDSCH.";
+            }
+            container lte-ran-phy-srs {
+              uses lte-ran-phy-srs-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.";
+            }
+            container lte-ran-phy-prach {
+              uses lte-ran-phy-prach-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.";
+            }
+            container lte-ran-phy-pucch {
+              uses lte-ran-phy-pucch-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.";
+            }
+            container lte-ran-phy-pusch {
+              uses lte-ran-phy-pusch-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.";
+              container lte-ran-phy-pusch-ulrs {
+                uses lte-ran-phy-pusch-ulrs-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.";
+              }
+            }
+            container lte-ran-phy-ul-power-control {
+              uses lte-ran-phy-ul-power-control-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.";
+            }
+            container lte-ran-phy-mbsfn {
+              uses lte-ran-phy-mbsfn-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.";
+              list lte-ran-phy-mbsfn-sf-config-list {
+                key "radio-frame-allocation-period radioframe-allocation-offset radio-frame-allocation-size";
+                uses lte-ran-phy-mbsfn-sf-config-list-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.";
+              }
+            }
+            container lte-ran-phy-prs {
+              uses lte-ran-phy-prs-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.PRS.";
+            }
+            container lte-ran-phy-tdd-frame {
+              uses lte-ran-phy-tdd-frame-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.TDDFrame.";
+            }
+          }
+          container lte-ran-mac {
+            uses lte-ran-mac-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.MAC.";
+            container lte-ran-mac-rach {
+              uses lte-ran-mac-rach-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.";
+            }
+            container lte-ran-mac-drx {
+              uses lte-ran-mac-drx-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.";
+            }
+            container lte-ran-mac-ulsch {
+              uses lte-ran-mac-ulsch-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.";
+            }
+          }
+          container lte-ran-rlc {
+            uses lte-ran-rlc-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.RLC.";
+            container lte-ran-rlc-srb1 {
+              uses lte-ran-rlc-srb1-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.";
+            }
+            container lte-ran-rlc-srb2 {
+              uses lte-ran-rlc-srb2-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.";
+            }
+          }
+          container lte-ran-rrc-timers {
+            uses lte-ran-rrc-timers-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.";
+          }
+          container lte-ran-cell-restriction {
+            uses lte-ran-cell-restriction-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.CellRestriction.";
+          }
+          container lte-ran-mobility {
+            uses lte-ran-mobility-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.";
+            container lte-ran-mobility-idle-mode {
+              uses lte-ran-mobility-idle-mode-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.";
+              container lte-ran-mobility-idle-mode-common {
+                uses lte-ran-mobility-idle-mode-common-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.";
+              }
+              container lte-ran-mobility-idle-mode-intra-freq {
+                uses lte-ran-mobility-idle-mode-intra-freq-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.";
+              }
+              container lte-ran-mobility-idle-mode-inter-freq {
+                uses lte-ran-mobility-idle-mode-inter-freq-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.";
+                list lte-ran-mobility-idle-mode-inter-freq-carrier {
+                  key "eutra-carrier-arfcn";
+                  uses lte-ran-mobility-idle-mode-inter-freq-carrier-g;
+                  description
+                    "List of object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.";
+                }
+              }
+              container lte-ran-mobility-idle-mode-irat {
+                uses lte-ran-mobility-idle-mode-irat-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.";
+                container lte-ran-mobility-idle-mode-irat-utra {
+                  uses lte-ran-mobility-idle-mode-irat-utra-g;
+                  description
+                    "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.";
+                  list lte-ran-mobility-idle-mode-irat-utra-utranfdd-freq {
+                    key "utra-carrier-arfcn";
+                    uses lte-ran-mobility-idle-mode-irat-utra-utranfdd-freq-g;
+                    description
+                      "List of object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.";
+                  }
+                }
+                container lte-ran-mobility-idle-mode-irat-geran {
+                  uses lte-ran-mobility-idle-mode-irat-geran-g;
+                  description
+                    "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.";
+                  list lte-ran-mobility-idle-mode-irat-geran-geran-freq-group {
+                    key "bccharfcn";
+                    uses lte-ran-mobility-idle-mode-irat-geran-geran-freq-group-g;
+                    description
+                      "List of object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.";
+                  }
+                }
+                container lte-ran-mobility-idle-mode-irat-cdma2000 {
+                  uses lte-ran-mobility-idle-mode-irat-cdma2000-g;
+                  description
+                    "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.";
+                  list lte-ran-mobility-idle-mode-irat-cdma2000-cdma2000-band {
+                    key "band-class";
+                    uses lte-ran-mobility-idle-mode-irat-cdma2000-cdma2000-band-g;
+                    description
+                      "List of object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.";
+                  }
+                }
+              }
+            }
+            container lte-ran-mobility-conn-mode {
+              uses lte-ran-mobility-conn-mode-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.";
+              container lte-ran-mobility-conn-mode-eutra {
+                uses lte-ran-mobility-conn-mode-eutra-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.";
+              }
+              container lte-ran-mobility-conn-mode-irat {
+                uses lte-ran-mobility-conn-mode-irat-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.";
+              }
+            }
+          }
+          container lte-ran-neighbor-list {
+            uses lte-ran-neighbor-list-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.NeighborList.";
+            list lte-ran-neighbor-list-lte-cell {
+              key "plmnid cid";
+              uses lte-ran-neighbor-list-lte-cell-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.";
+            }
+            container lte-ran-neighbor-list-inter-rat-cell {
+              uses lte-ran-neighbor-list-inter-rat-cell-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.";
+              list lte-ran-neighbor-list-inter-rat-cell-umts {
+                key "plmnid cid";
+                uses lte-ran-neighbor-list-inter-rat-cell-umts-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.";
+              }
+              list lte-ran-neighbor-list-inter-rat-cell-gsm {
+                key "plmnid lac ci";
+                uses lte-ran-neighbor-list-inter-rat-cell-gsm-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.";
+              }
+              list lte-ran-neighbor-list-inter-rat-cell-cdma2000 {
+                key "cid";
+                uses lte-ran-neighbor-list-inter-rat-cell-cdma2000-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.";
+              }
+            }
+          }
+          container lte-ran-neighbor-list-in-use {
+            uses lte-ran-neighbor-list-in-use-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.";
+            list lte-ran-neighbor-list-in-use-lte-cell {
+              key "plmnid cid";
+              uses lte-ran-neighbor-list-in-use-lte-cell-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.";
+            }
+            container lte-ran-neighbor-list-in-use-inter-rat-cell {
+              uses lte-ran-neighbor-list-in-use-inter-rat-cell-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.";
+              list lte-ran-neighbor-list-in-use-inter-rat-cell-umts {
+                key "plmnid cid";
+                uses lte-ran-neighbor-list-in-use-inter-rat-cell-umts-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.";
+              }
+              list lte-ran-neighbor-list-in-use-inter-rat-cell-gsm {
+                key "plmnid lac ci";
+                uses lte-ran-neighbor-list-in-use-inter-rat-cell-gsm-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.";
+              }
+              list lte-ran-neighbor-list-in-use-inter-rat-cell-cdma2000 {
+                key "cid";
+                uses lte-ran-neighbor-list-in-use-inter-rat-cell-cdma2000-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.";
+              }
+            }
+          }
+        }
+      }
+      container cdma2000 {
+        uses cdma2000-g;
+        description
+          "Container for object class FAPService.{i}.CellConfig.CDMA2000.";
+        container cdma2000-one-x {
+          uses cdma2000-one-x-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.";
+          container cdma2000-one-x-ran {
+            uses cdma2000-one-x-ran-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.";
+            container cdma2000-one-x-ran-rf {
+              uses cdma2000-one-x-ran-rf-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.";
+            }
+            container cdma2000-one-x-ran-network-listen-mode-config {
+              uses cdma2000-one-x-ran-network-listen-mode-config-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.";
+            }
+            container cdma2000-one-x-ran-access-parameters {
+              uses cdma2000-one-x-ran-access-parameters-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.";
+            }
+            container cdma2000-one-x-ran-system-parameters {
+              uses cdma2000-one-x-ran-system-parameters-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.";
+            }
+            container cdma2000-one-x-ran-extended-system-parameters {
+              uses cdma2000-one-x-ran-extended-system-parameters-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.";
+            }
+            container cdma2000-one-x-ran-forward-pwr-ctr {
+              uses cdma2000-one-x-ran-forward-pwr-ctr-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.";
+            }
+            container cdma2000-one-x-ran-hard-handoff {
+              uses cdma2000-one-x-ran-hard-handoff-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.";
+              container cdma2000-one-x-ran-hard-handoff-stats {
+                uses cdma2000-one-x-ran-hard-handoff-stats-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.";
+              }
+            }
+            container cdma2000-one-x-ran-power-control {
+              uses cdma2000-one-x-ran-power-control-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.";
+            }
+            list cdma2000-one-x-ran-neighbor-list {
+              key "one-x-neighbor-index neighbor-pn";
+              uses cdma2000-one-x-ran-neighbor-list-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.";
+            }
+            container cdma2000-one-x-ran-apidm {
+              uses cdma2000-one-x-ran-apidm-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.";
+            }
+            container cdma2000-one-x-ran-apidtm {
+              uses cdma2000-one-x-ran-apidtm-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDTM.";
+            }
+            container cdma2000-one-x-ran-appim {
+              uses cdma2000-one-x-ran-appim-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.";
+              list cdma2000-one-x-ran-appim-appirec {
+                key "apsid apnid apband apfreq appnrectype appnreclen appnrec";
+                uses cdma2000-one-x-ran-appim-appirec-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.";
+              }
+            }
+          }
+          container cdma2000-one-x-pcf-config {
+            uses cdma2000-one-x-pcf-config-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.";
+            container cdma2000-one-x-pcf-config-pcf-performance-stats {
+              uses cdma2000-one-x-pcf-config-pcf-performance-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.";
+            }
+          }
+          list cdma2000-one-x-batch-pcfpdsn {
+            key "batch-table-number";
+            uses cdma2000-one-x-batch-pcfpdsn-g;
+            description
+              "List of object class FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.";
+          }
+          list cdma2000-one-x-pcfpdsn {
+            key "pdsn-number security-parameter-index security-key";
+            uses cdma2000-one-x-pcfpdsn-g;
+            container cdma2000-one-x-pcfpdsn-a11-reg-update-stats {
+              uses cdma2000-one-x-pcfpdsn-a11-reg-update-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.";
+            }
+            container cdma2000-one-x-pcfpdsn-pcfpdsn-stats {
+              uses cdma2000-one-x-pcfpdsn-pcfpdsn-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.";
+            }
+            description
+              "List of object class FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.";
+          }
+          container cdma2000-one-x-stats {
+            uses cdma2000-one-x-stats-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.";
+          }
+          container cdma2000-one-x-redirect {
+            uses cdma2000-one-x-redirect-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.Redirect.";
+          }
+        }
+        container cdma2000-hrpd {
+          uses cdma2000-hrpd-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.";
+          container cdma2000-hrpd-ran {
+            uses cdma2000-hrpd-ran-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.";
+            container cdma2000-hrpd-ran-rf {
+              uses cdma2000-hrpd-ran-rf-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.";
+            }
+          }
+          container cdma2000-hrpd-pcf-config {
+            uses cdma2000-hrpd-pcf-config-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.";
+            container cdma2000-hrpd-pcf-config-pcf-performance-stats {
+              uses cdma2000-hrpd-pcf-config-pcf-performance-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.";
+            }
+          }
+          list cdma2000-hrpd-batch-pcfpdsn {
+            key "batch-table-number batch-table-security-parameter-index batch-table-secret-key";
+            uses cdma2000-hrpd-batch-pcfpdsn-g;
+            description
+              "List of object class FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.";
+          }
+          list cdma2000-hrpd-pcfpdsn {
+            key "pdsn-number security-parameter-index security-key";
+            uses cdma2000-hrpd-pcfpdsn-g;
+            container cdma2000-hrpd-pcfpdsn-a11-session-update-stats {
+              uses cdma2000-hrpd-pcfpdsn-a11-session-update-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.";
+            }
+            container cdma2000-hrpd-pcfpdsn-a11-reg-update-stats {
+              uses cdma2000-hrpd-pcfpdsn-a11-reg-update-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.";
+            }
+            container cdma2000-hrpd-pcfpdsn-aux-a10-stats {
+              uses cdma2000-hrpd-pcfpdsn-aux-a10-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.";
+            }
+            container cdma2000-hrpd-pcfpdsn-pcfpdsn-stats {
+              uses cdma2000-hrpd-pcfpdsn-pcfpdsn-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.";
+            }
+            description
+              "List of object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.";
+          }
+          container cdma2000-hrpd-redirect {
+            uses cdma2000-hrpd-redirect-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.Redirect.";
+          }
+          container cdma2000-hrpd-call-control-stats {
+            uses cdma2000-hrpd-call-control-stats-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.";
+          }
+          container cdma2000-hrpd-qo-s-stats {
+            uses cdma2000-hrpd-qo-s-stats-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.";
+          }
+          container cdma2000-hrpd-rnc-sig-apps-stats {
+            uses cdma2000-hrpd-rnc-sig-apps-stats-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.";
+          }
+          container cdma2000-hrpd-access-auth-config {
+            uses cdma2000-hrpd-access-auth-config-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthConfig.";
+          }
+          container cdma2000-hrpd-access-auth-stats {
+            uses cdma2000-hrpd-access-auth-stats-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.";
+          }
+        }
+        container cdma2000-beacon {
+          uses cdma2000-beacon-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.CDMA2000.Beacon.";
+          list cdma2000-beacon-beacon-list {
+            key "beacon-index";
+            uses cdma2000-beacon-beacon-list-g;
+            description
+              "List of object class FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.";
+          }
+          list cdma2000-beacon-hrpd-beacon-list {
+            key "beacon-index";
+            uses cdma2000-beacon-hrpd-beacon-list-g;
+            description
+              "List of object class FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.";
+          }
+        }
+      }
+    }
+    container rem {
+      uses rem-g;
+      description
+        "Container for object class FAPService.{i}.REM.";
+      container rem-umts {
+        uses rem-umts-g;
+        description
+          "Container for object class FAPService.{i}.REM.UMTS.";
+        container rem-umts-wcdma {
+          uses rem-umts-wcdma-g;
+          description
+            "Container for object class FAPService.{i}.REM.UMTS.WCDMA.";
+          list rem-umts-wcdma-cell {
+            key "rem-umts-wcdma-cell-key";
+            uses rem-umts-wcdma-cell-g;
+            container rem-umts-wcdma-cell-rf {
+              uses rem-umts-wcdma-cell-rf-g;
+              description
+                "Container for object class FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.";
+            }
+            container rem-umts-wcdma-cell-bcch {
+              uses rem-umts-wcdma-cell-bcch-g;
+              description
+                "Container for object class FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.";
+              container rem-umts-wcdma-cell-bcch-csgpsc-split-info {
+                uses rem-umts-wcdma-cell-bcch-csgpsc-split-info-g;
+                description
+                  "Container for object class FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.";
+              }
+              container rem-umts-wcdma-cell-bcch-reference-position {
+                uses rem-umts-wcdma-cell-bcch-reference-position-g;
+                description
+                  "Container for object class FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.";
+              }
+            }
+            description
+              "List of object class FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.";
+          }
+        }
+        container rem-umts-gsm {
+          uses rem-umts-gsm-g;
+          description
+            "Container for object class FAPService.{i}.REM.UMTS.GSM.";
+          list rem-umts-gsm-cell {
+            key "arfcn bsic";
+            uses rem-umts-gsm-cell-g;
+            description
+              "List of object class FAPService.{i}.REM.UMTS.GSM.Cell.{i}.";
+          }
+        }
+      }
+      container rem-lte {
+        uses rem-lte-g;
+        description
+          "Container for object class FAPService.{i}.REM.LTE.";
+        list rem-lte-cell {
+          key "rem-lte-cell-key";
+          uses rem-lte-cell-g;
+          container rem-lte-cell-rf {
+            uses rem-lte-cell-rf-g;
+            description
+              "Container for object class FAPService.{i}.REM.LTE.Cell.{i}.RF.";
+          }
+          container rem-lte-cell-bcch {
+            uses rem-lte-cell-bcch-g;
+            description
+              "Container for object class FAPService.{i}.REM.LTE.Cell.{i}.BCCH.";
+            list rem-lte-cell-bcch-plmn-list {
+              key "plmnid";
+              uses rem-lte-cell-bcch-plmn-list-g;
+              description
+                "List of object class FAPService.{i}.REM.LTE.Cell.{i}.BCCH.PLMNList.{i}.";
+            }
+          }
+          description
+            "List of object class FAPService.{i}.REM.LTE.Cell.{i}.";
+        }
+        list rem-lte-carrier-meas {
+          key "carrier-arfcndl carrier-ch-width";
+          uses rem-lte-carrier-meas-g;
+          description
+            "List of object class FAPService.{i}.REM.LTE.CarrierMeas.{i}.";
+        }
+      }
+      container rem-cdma2000 {
+        uses rem-cdma2000-g;
+        description
+          "Container for object class FAPService.{i}.REM.CDMA2000.";
+        container rem-cdma2000-one-x {
+          uses rem-cdma2000-one-x-g;
+          description
+            "Container for object class FAPService.{i}.REM.CDMA2000.OneX.";
+          list rem-cdma2000-one-x-channel {
+            key "sniffing-band-class sniffing-channel-number";
+            uses rem-cdma2000-one-x-channel-g;
+            description
+              "List of object class FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.";
+          }
+          list rem-cdma2000-one-x-cell {
+            key "rem-cdma2000-one-x-cell-key";
+            uses rem-cdma2000-one-x-cell-g;
+            container rem-cdma2000-one-x-cell-rf {
+              uses rem-cdma2000-one-x-cell-rf-g;
+              description
+                "Container for object class FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.";
+            }
+            container rem-cdma2000-one-x-cell-control-channel {
+              uses rem-cdma2000-one-x-cell-control-channel-g;
+              description
+                "Container for object class FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.";
+            }
+            description
+              "List of object class FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.";
+          }
+        }
+        container rem-cdma2000-hrpd {
+          uses rem-cdma2000-hrpd-g;
+          description
+            "Container for object class FAPService.{i}.REM.CDMA2000.HRPD.";
+          list rem-cdma2000-hrpd-channel {
+            key "sniffing-band-class sniffing-channel-number";
+            uses rem-cdma2000-hrpd-channel-g;
+            description
+              "List of object class FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.";
+          }
+          list rem-cdma2000-hrpd-cell {
+            key "rem-cdma2000-hrpd-cell-key";
+            uses rem-cdma2000-hrpd-cell-g;
+            container rem-cdma2000-hrpd-cell-rf {
+              uses rem-cdma2000-hrpd-cell-rf-g;
+              description
+                "Container for object class FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.";
+            }
+            container rem-cdma2000-hrpd-cell-control-channel {
+              uses rem-cdma2000-hrpd-cell-control-channel-g;
+              description
+                "Container for object class FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.";
+            }
+            description
+              "List of object class FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.";
+          }
+        }
+        container rem-cdma2000-macro-timing {
+          uses rem-cdma2000-macro-timing-g;
+          description
+            "Container for object class FAPService.{i}.REM.CDMA2000.MacroTiming.";
+          list rem-cdma2000-macro-timing-channel {
+            key "band-class channel-number";
+            uses rem-cdma2000-macro-timing-channel-g;
+            description
+              "List of object class FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.";
+          }
+        }
+      }
+    }
+    container transport {
+      uses transport-g;
+      description
+        "Container for object class FAPService.{i}.Transport.";
+      container transport-sip {
+        uses transport-sip-g;
+        description
+          "Container for object class FAPService.{i}.Transport.SIP.";
+        container transport-sip-fcs {
+          uses transport-sip-fcs-g;
+          description
+            "Container for object class FAPService.{i}.Transport.SIP.FCS.";
+        }
+      }
+      container transport-sctp {
+        uses transport-sctp-g;
+        description
+          "Container for object class FAPService.{i}.Transport.SCTP.";
+        list transport-sctp-assoc {
+          key "primary-peer-address local-port";
+          uses transport-sctp-assoc-g;
+          description
+            "List of object class FAPService.{i}.Transport.SCTP.Assoc.{i}.";
+        }
+      }
+      container transport-real-time {
+        uses transport-real-time-g;
+        description
+          "Container for object class FAPService.{i}.Transport.RealTime.";
+        container transport-real-time-perf {
+          uses transport-real-time-perf-g;
+          description
+            "Container for object class FAPService.{i}.Transport.RealTime.Perf.";
+        }
+      }
+      container transport-packet {
+        uses transport-packet-g;
+        description
+          "Container for object class FAPService.{i}.Transport.Packet.";
+      }
+      container transport-security {
+        uses transport-security-g;
+        description
+          "Container for object class FAPService.{i}.Transport.Security.";
+        list transport-security-secret {
+          key "uicc-card-id";
+          uses transport-security-secret-g;
+          description
+            "List of object class FAPService.{i}.Transport.Security.Secret.{i}.";
+        }
+      }
+    }
+    description
+      "List of object class FAPService.{i}.";
+  }
+
+  grouping fap-service-g {
+    description
+      "The Femto Access Point (FAP) Service Object.";
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Alias";
+    }
+    leaf device-type {
+      type enumeration {
+        enum "standalone" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.DeviceType - Standalone";
+        }
+        enum "integrated" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.DeviceType - Integrated";
+        }
+      }
+      description
+        "The type of FAP device.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.DeviceType";
+    }
+    leaf dn-prefix {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The Distinguished Name prefix (DNPrefix) is an operator-configurable prefix string that is pre-pended to object distinguished names in the {{bibref|TR-157a5}} alarm object. See {{bibref|3GPP-TS.32.300}} for the formal definition and examples of DNPrefix as applied to 3GPP alarm objects";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.DNPrefix";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.";
+  }
+
+  grouping capabilities-g {
+    description
+      "This object contains parameters relating to the hardware capabilities of the FAP device.";
+    leaf gps-equipped {
+      type boolean;
+      description
+        "Indicates whether the FAP is equipped with a GPS receiver or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.GPSEquipped";
+    }
+    leaf max-tx-power {
+      type uint64;
+      units "dBm";
+      description
+        "Indicates the maximum possible transmit power in {{units}} that the FAP hardware can support.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.MaxTxPower";
+    }
+    leaf-list supported-systems {
+      type enumeration {
+        enum "umts" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.SupportedSystems - UMTS";
+        }
+        enum "lte" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.SupportedSystems - LTE";
+        }
+        enum "cdma1x" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.SupportedSystems - CDMA1x";
+        }
+        enum "cdmahrpd" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.SupportedSystems - CDMAHRPD";
+        }
+      }
+      description
+        "{{list}} Each entry is a type of system that the FAP supports. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.SupportedSystems";
+    }
+    leaf beacon {
+      type boolean;
+      description
+        "Indicates whether FAP can support beacon transmission.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.Beacon";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.";
+  }
+
+  grouping capabilities-umts-g {
+    description
+      "This object contains parameters relating to the system and RF aspect of the FAP device that supports the UMTS system.";
+    leaf duplex-mode {
+      type enumeration {
+        enum "fdd-mode" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.DuplexMode - FDDMode";
+        }
+      }
+      description
+        "Indicates the mode supported by the FAP. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.DuplexMode";
+    }
+    leaf gsm-rx-supported {
+      type boolean;
+      description
+        "Indicates whether the FAP hardware supports the receiving function of GSM or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxSupported";
+    }
+    leaf hsdpa-supported {
+      type boolean;
+      description
+        "Indicates whether the FAP hardware supports the HSDPA capability or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.HSDPASupported";
+    }
+    leaf max-hsdpa-data-rate-supported {
+      type uint64;
+      units "Kbps";
+      description
+        "If the FAP hardware supports HSDPA ({{param|HSDPASupported}} is {{true}}), this parameter indicates the maximum HSDPA data rate in {{units}} that the device supports.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.MaxHSDPADataRateSupported";
+    }
+    leaf hsupa-supported {
+      type boolean;
+      description
+        "Indicates whether the FAP hardware supports the HSUPA capability or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.HSUPASupported";
+    }
+    leaf max-hsupa-data-rate-supported {
+      type uint64;
+      units "Kbps";
+      description
+        "If the FAP hardware supports HSUPA ({{param|HSUPASupported}} is {{true}}), this parameter indicates the maximum HSUPA data rate in {{units}} that the device supports.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.MaxHSUPADataRateSupported";
+    }
+    leaf max-hspdsc-hs-supported {
+      type uint8 {
+        range "0..15";
+      }
+      description
+        "If the FAP hardware supports HSPA family (either {{param|HSDPASupported}} is {{true}} or {{param|HSUPASupported}} is {{true}}), this parameter indicates the available number of codes at the defined spreading factor (SF=16), within the complete code tree. See {{bibref|3GPP-TS.32.642|Section 6.3.9}} for more details.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.MaxHSPDSCHsSupported";
+    }
+    leaf max-hsscc-hs-supported {
+      type uint64;
+      description
+        "If the FAP hardware supports HSPA family (either {{param|HSDPASupported}} is {{true}} or {{param|HSUPASupported}} is {{true}}), this parameter indicates the available number of HS-SCCHs for one cell. See {{bibref|3GPP-TS.32.642|Section 6.3.9}} for more details.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.MaxHSSCCHsSupported";
+    }
+    leaf-list fdd-bands-supported {
+      type string;
+      min-elements 1;
+      max-elements "16";
+      description
+        "{{list}} Indicates the UMTS bands that the FAP supports {{bibref|3GPP-TS.25.104}}, Release 8. At least one band MUST be supported and multiple bands MAY be supported. {{bibref|3GPP-TS.25.104}} Version 8.3.0 defines 14 UMTS bands (I through XIV). Each individual band is identified by its upper case Roman numeral. The order of the band indicators in the string has no significance. In case a new band is defined in the 3GPP standard in a future release of {{bibref|3GPP-TS.25.104}}, the corresponding new upper case Roman numeral will be included in the valid band indicators. The followings are examples of valid values: :\"I\" (specifies only band-I is supported) :\"I,II,V\" (specifies 3 bands are supported) :\"II,VII,I\" (specifies 3 bands are supported)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.FDDBandsSupported";
+    }
+    leaf-list gsm-rx-bands-supported {
+      type enumeration {
+        enum "t-gsm380" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - T-GSM380";
+        }
+        enum "t-gsm410" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - T-GSM410";
+        }
+        enum "gsm450" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - GSM450";
+        }
+        enum "gsm480" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - GSM480";
+        }
+        enum "gsm710" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - GSM710";
+        }
+        enum "gsm750" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - GSM750";
+        }
+        enum "t-gsm810" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - T-GSM810";
+        }
+        enum "gsm850" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - GSM850";
+        }
+        enum "p-gsm900" {
+          value 9;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - P-GSM900";
+        }
+        enum "e-gsm900" {
+          value 10;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - E-GSM900";
+        }
+        enum "r-gsm900" {
+          value 11;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - R-GSM900";
+        }
+        enum "t-gsm900" {
+          value 12;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - T-GSM900";
+        }
+        enum "dcs1800" {
+          value 13;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - DCS1800";
+        }
+        enum "pcs1900" {
+          value 14;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - PCS1900";
+        }
+      }
+      description
+        "{{list}} Indicates the GSM receive bands that the FAP supports {{bibref|3GPP-TS.45.005}}. At least one band MUST be supported and multiple bands MAY be supported. {{bibref|3GPP-TS.45.005}} defines 14 GSM bands. {{enum}} The order of the band indicators in the string has no significance. The following is an example of a valid value. :\"GSM850,PCS1900\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.";
+  }
+
+  grouping capabilities-umts-self-config-g {
+    description
+      "This object contains parameters relating to the self-configuration capabilities of the FAP. Self-configuration is enabled in {{object|.FAPControl.UMTS.SelfConfig.}}";
+    leaf uarfcn-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the UTRA Absolute Radio Frequency Channel Number (UARFCN). If {{true}} multiple values MAY be provided in {{param|.CellConfig.UMTS.RAN.RF.UARFCNDL}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.UMTS.RAN.RF.UARFCNDL}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.UARFCNConfig";
+    }
+    leaf primary-scrambling-code-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Primary Scrambling Code (PSC). If {{true}} multiple values or a range of values MAY be provided in {{param|.CellConfig.UMTS.RAN.RF.PrimaryScramblingCode}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.UMTS.RAN.RF.PrimaryScramblingCode}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.PrimaryScramblingCodeConfig";
+    }
+    leaf maxfap-tx-power-expanded-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Maximum FAP Transmit Power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.UMTS.RAN.RF.MaxFAPTxPowerExpanded}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.UMTS.RAN.RF.MaxFAPTxPowerExpanded}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.MaxFAPTxPowerExpandedConfig";
+    }
+    leaf pcpich-power-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the P-CPICH power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.UMTS.RAN.RF.PCPICHPower}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.UMTS.RAN.RF.PCPICHPower}} as an upper bound.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.PCPICHPowerConfig";
+    }
+    leaf max-ul-tx-power-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Maximum UL Transmit Power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.UMTS.RAN.RF.MaxULTxPower}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.UMTS.RAN.RF.MaxULTxPower}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.MaxULTxPowerConfig";
+    }
+    leaf lacracura-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the LAC, RAC, and URA. If {{true}} multiple values MAY be provided in {{param|.CellConfig.UMTS.CN.LACRAC}} and {{param|.CellConfig.UMTS.RAN.URAList}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.UMTS.CN.LACRAC}} and {{param|.CellConfig.UMTS.RAN.URAList}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.LACRACURAConfig";
+    }
+    leaf neighbor-list-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the neighbor list. If {{true}} the ACS uses the {{object|.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.}}, {{object|.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.}}, {{object|.CellConfig.UMTS.RAN.NeighborList.InterRATCell.}} tables to explicitly include or exclude entries and the FAP uses that information to determine the final configuration found in the {{object|.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.}}, {{object|.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.}}, {{object|.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.}} tables. If {{false}} the ACS uses the {{object|.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.}}, {{object|.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.}}, {{object|.CellConfig.UMTS.RAN.NeighborList.InterRATCell.}} tables to only specify the included entries and the FAP uses that list.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.NeighborListConfig";
+    }
+    leaf cell-re-selection-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine cell-reselection values. If {{true}} {{object|.CellConfig.UMTS.RAN.CellSelection.}} can be self-configured. If {{false}} {{object|.CellConfig.UMTS.RAN.CellSelection.}} is provided by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.CellReSelectionConfig";
+    }
+    leaf intra-freq-meas-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine intra-frequency measurement values. If {{true}} {{object|.CellConfig.UMTS.RAN.IntraFreqMeas.}} can be self-configured. If {{false}} {{object|.CellConfig.UMTS.RAN.IntraFreqMeas.}} is provided by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.IntraFreqMeasConfig";
+    }
+    leaf inter-freq-meas-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine inter-frequency measurement values. If {{true}} {{object|.CellConfig.UMTS.RAN.InterFreqMeas.}} can be self-configured. If {{false}} {{object|.CellConfig.UMTS.RAN.InterFreqMeas.}} is provided by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.InterFreqMeasConfig";
+    }
+    leaf inter-rat-meas-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine inter-RAT measurement values. If {{true}} {{object|.CellConfig.UMTS.RAN.InterRATMeas.}} can be self-configured. If {{false}} {{object|.CellConfig.UMTS.RAN.InterRATMeas.}} is provided by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.InterRATMeasConfig";
+    }
+    leaf ue-internal-meas-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine UE internal measurement values. If {{true}} {{object|.CellConfig.UMTS.RAN.UEInternalMeas.}} can be self-configured. If {{false}} {{object|.CellConfig.UMTS.RAN.UEInternalMeas.}} is provided by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.UEInternalMeasConfig";
+    }
+    leaf noise-rise-limit-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the selfconfiguration capability to determine the Noise Rise Limit. If {{true}} {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitLowerValue}} and {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitUpperValue}}. MAY provide a range of values to select from. If {{false}} {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitUpperValue}} provides only a single value to be used. The value of {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitLowerValue}} is ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.NoiseRiseLimitConfig";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.";
+  }
+
+  grouping capabilities-lte-g {
+    description
+      "This object contains parameters relating to the system and RF aspect of the FAP device that supports the LTE system.";
+    leaf duplex-mode {
+      type enumeration {
+        enum "fdd-mode" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.DuplexMode - FDDMode";
+        }
+        enum "tdd-mode" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.DuplexMode - TDDMode";
+        }
+      }
+      description
+        "Indicates the mode supported by the LTE FAP. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.DuplexMode";
+    }
+    leaf-list bands-supported {
+      type uint8 {
+        range "1..21 | 33..40";
+      }
+      min-elements 1;
+      max-elements "16";
+      description
+        "{{list}} Indicates the LTE bands that the LTE FAP supports {{bibref|3GPP-TS.36.101|Section 5.5}}. At least one band MUST be supported and multiple bands MAY be supported. Each individual band is identified by arabic number (1, 2,...). The order of the band indicators in the string has no significance. In case a new band is defined in the 3GPP standard in a future release of {{bibref|3GPP-TS.36.101}}, the corresponding new band number will be included in the valid band indicators. The followings are examples of valid values: :\"1\" (specifies only band-1 is supported) :\"1,2,11\" (specifies 3 bands are supported) :\"2,11,1\" (specifies 3 bands are supported)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.BandsSupported";
+    }
+    leaf nnsf-supported {
+      type boolean;
+      description
+        "Indicates whether LTE FAP supports the NAS Node Selection Function (NNSF) or not. NNSF is described in {{bibref|3GPP-TS.36.300|Section 19.2.1.7 and Section 4.6.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.NNSFSupported";
+    }
+    leaf umts-rx-supported {
+      type boolean;
+      description
+        "Indicates whether the LTE FAP hardware supports the receiving function of UMTS or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.UMTSRxSupported";
+    }
+    leaf-list umts-rx-bands-supported {
+      type string;
+      max-elements "16";
+      description
+        "{{list}} Indicates the UMTS receive bands that the LTE FAP supports {{bibref|3GPP-TS.25.104}}, Release 8. If {{param|UMTSRxSupported}} is {{true}}, then at least one band MUST be supported and multiple bands MAY be supported. Each individual band is identified by its upper case Roman numeral. The order of the band indicators in the string has no significance. In case a new band is defined in the 3GPP standard in a future release of {{bibref|3GPP-TS.25.104}}, the corresponding new upper case Roman numeral will be included in the valid band indicators. The followings are examples of valid values: :\"I\" (specifies only band-I is supported) :\"I,II,V\" (specifies 3 bands are supported) :\"II,VII,I\" (specifies 3 bands are supported)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.UMTSRxBandsSupported";
+    }
+    leaf gsm-rx-supported {
+      type boolean;
+      description
+        "Indicates whether the LTE FAP hardware supports the receiving function of GSM or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxSupported";
+    }
+    leaf-list gsm-rx-bands-supported {
+      type enumeration {
+        enum "t-gsm380" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - T-GSM380";
+        }
+        enum "t-gsm410" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - T-GSM410";
+        }
+        enum "gsm450" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - GSM450";
+        }
+        enum "gsm480" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - GSM480";
+        }
+        enum "gsm710" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - GSM710";
+        }
+        enum "gsm750" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - GSM750";
+        }
+        enum "t-gsm810" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - T-GSM810";
+        }
+        enum "gsm850" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - GSM850";
+        }
+        enum "p-gsm900" {
+          value 9;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - P-GSM900";
+        }
+        enum "e-gsm900" {
+          value 10;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - E-GSM900";
+        }
+        enum "r-gsm900" {
+          value 11;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - R-GSM900";
+        }
+        enum "t-gsm900" {
+          value 12;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - T-GSM900";
+        }
+        enum "dcs1800" {
+          value 13;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - DCS1800";
+        }
+        enum "pcs1900" {
+          value 14;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - PCS1900";
+        }
+      }
+      description
+        "{{list}} Indicates the GSM receive bands that the LTE FAP supports {{bibref|3GPP-TS.45.005}}. If {{param|GSMRxSupported}} is {{true}}, then at least one band MUST be supported and multiple bands MAY be supported. {{bibref|3GPP-TS.45.005}} defines 14 GSM bands. {{enum}} The order of the band indicators in the string has no significance. The following is an example of a valid value. :\"GSM850,PCS1900\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported";
+    }
+    leaf cdma2000-rx-supported {
+      type boolean;
+      description
+        "Indicates whether the LTE FAP hardware supports the receiving function of CDMA2000 or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.CDMA2000RxSupported";
+    }
+    leaf-list cdma2000-rx-bands-supported {
+      type string;
+      max-elements "16";
+      description
+        "{{list}} Indicates the CDMA2000 receive bands that the LTE FAP supports. If {{param|CDMA2000RxSupported}} is {{true}}, then at least one band MUST be supported and multiple bands MAY be supported. The order of the band indicators in the string has no significance. Bandclass is a 1 or 2-digit number as defined in {{bibref|3GPP2-C.S0057-B}}. The following are example values: :\"0\" (specifies US Cellular) :\"1,3,14\" (specifies US PCS, Japan Cellular and US PCS 1.9Ghz) specifies 3 bands are supported)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.CDMA2000RxBandsSupported";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.";
+  }
+
+  grouping capabilities-cdma2000-g {
+    description
+      "This object contains parameters relating to the capability attributes for CDMA2000 FAP.";
+    leaf remote-ip-access-capable {
+      type boolean;
+      description
+        "Indicates whether the FAP is capable of providing remote IP access service as defined in {{bibref|3GPP2-X.S0059}}. If {{true}}, the FAP is capable of remote IP access service. If {{false}}, the FAP is not capable of remote IP access service.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.RemoteIPAccessCapable";
+    }
+    leaf-list band-class-supportedfap-beacon {
+      type string;
+      max-elements "32";
+      description
+        "{{list}} Indicates the band classes that the FAP supports for beacon transmission. One or multiple bands MAY be supported. Bandclass is a 1 or 2-digit number as defined in {{bibref|3GPP2-C.S0057}}. List is empty if FAP can not support beacon transmissions.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.BandClassSupportedFAPBeacon";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.";
+  }
+
+  grouping capabilities-cdma2000-one-x-g {
+    description
+      "This object contains parameters relating to the capability attributes for the CDMA2000 1x radio technology portions of a CDMA2000 FAP.";
+    leaf band-class-supportedfap {
+      type string {
+        length "0..32";
+      }
+      description
+        "{{list}} Indicates the CDMA bands that the FAP supports. At least one band MUST be supported and multiple bands MAY be supported. Bandclass is a 1 or 2-digit number as defined in {{bibref|3GPP2-C.S0057}}. The following are example values: \"0\" (specifies US Cellular) \"1,3,14\" (specifies US PCS, Japan Cellular and US PCS 1.9Ghz)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.BandClassSupportedFAP";
+    }
+    leaf active-handin-capable {
+      type boolean;
+      description
+        "Indicates whether the FAP is capable of accepting hand-in of active 1x call from another base station. If {{true}}, the FAP is capable of accepting hand-in. If {{false}}, the FAP is not capable of accepting hand-in.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.ActiveHandinCapable";
+    }
+    leaf femto-overhead-messages-capable {
+      type boolean;
+      description
+        "Indicates whether the FAP supports Access Point Identification, Access Point Pilot Information, and Access Point Identification Text messages specified in {{bibref|3GPP2-C.S0005}}. If {{true}}, the FAP supports these messages. If {{false}}, the FAP does not supports these messages.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.FemtoOverheadMessagesCapable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.";
+  }
+
+  grouping capabilities-cdma2000-one-x-self-config-g {
+    description
+      "This object contains parameters relating to the self-configuration capabilities of the FAP. Self-configuration is enabled in {{object|.FAPControl.CDMA2000.OneX.SelfConfig.}}.";
+    leaf rfcnfl-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Radio Frequency Channel Number. If {{true}} multiple values MAY be provided in {{param|.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFL}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFL}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.RFCNFLConfig";
+    }
+    leaf pilot-pn-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the pilot PN offset. If {{true}} multiple values or a range of values MAY be provided in {{param|.CellConfig.CDMA2000.OneX.RAN.RF.PilotPN}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.OneX.RAN.RF.PilotPN}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.PilotPNConfig";
+    }
+    leaf maxfap-tx-power-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Maximum FAP Transmit Power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.CDMA2000.OneX.RAN.RF.MaxFAPTxPower}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.OneX.RAN.RF.MaxFAPTxPower}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerConfig";
+    }
+    leaf maxfap-beacon-tx-power-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Maximum FAP Beacon Transmit Power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPower}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPower}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerConfig";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.";
+  }
+
+  grouping capabilities-cdma2000-hrpd-g {
+    description
+      "This object contains parameters relating to the capability attributes for the CDMA2000 HRPD radio technology portions of a CDMA2000 FAP.";
+    leaf a13-session-transfer-capable {
+      type boolean;
+      description
+        "Indicates whether the FAP is capable of supporting A13 session transfer. See {{bibref|3GPP2-C.S0024-B}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.A13SessionTransferCapable";
+    }
+    leaf a16-session-transfer-capable {
+      type boolean;
+      description
+        "Indicates whether the FAP is capable of supporting A16 session transfer. See {{bibref|3GPP2-C.S0024-B}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.A16SessionTransferCapable";
+    }
+    leaf local-ip-access-capable {
+      type boolean;
+      description
+        "Indicates whether the FAP is capable of supporting Local IP access. See {{bibref|3GPP2-C.S0024-B}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.LocalIPAccessCapable";
+    }
+    leaf dedicated-hrpd-beacon {
+      type boolean;
+      description
+        "Indicated whether the FAP supports a dedicated transmission of HRPD beacon independent of the generalized beacon.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.DedicatedHRPDBeacon";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.";
+  }
+
+  grouping capabilities-cdma2000-hrpd-self-config-g {
+    description
+      "This object contains parameters relating to the self-configuration capability attributes for the CDMA2000 HRPD radio technology portions of a CDMA2000 FAP.";
+    leaf rfcnfl-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Radio Frequency Channel Number. If {{true}} multiple values MAY be provided in {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.RFCNFL}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.RFCNFL}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.RFCNFLConfig";
+    }
+    leaf pilot-pn-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the pilot PN offset. If {{true}} multiple values or a range of values MAY be provided in {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.PilotPN}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.PilotPN}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.PilotPNConfig";
+    }
+    leaf maxfap-tx-power-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Maximum FAP Transmit Power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.MaxFAPTxPower}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.MaxFAPTxPower}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerConfig";
+    }
+    leaf maxfap-beacon-tx-power-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Maximum FAP Beacon Transmit Power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPower}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPower}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.MaxFAPBeaconTxPowerConfig";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.";
+  }
+
+  grouping fap-control-g {
+    description
+      "This object contains parameters relating to state management and provisioning aspects of the FAP.";
+    leaf-list self-config-events {
+      type enumeration {
+        enum "initial-rem" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.SelfConfigEvents - InitialREM";
+        }
+      }
+      config false;
+      description
+        "{{list}} Each item is an event that causes the FAP to perform self configuration as defined by {{object|.FAPControl.UMTS.SelfConfig.}}, {{object|.FAPControl.CDMA2000.OneX.SelfConfig.}}, or {{object|.FAPControl.CDMA2000.HRPD.SelfConfig.}}. Vendors can extend the enumerated values with vendor-specific extensions, in which case the rules outlined in {{bibref|TR-106a2|Section3.3}} MUST be adhered to.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.SelfConfigEvents";
+    }
+    leaf enclosure-tampering-detected {
+      type boolean;
+      config false;
+      description
+        "This parameter indicates whether or not physical tampering of the device enclosure occurred, such as illegal opening of the box. If {{true}} device tampering is detected. If {{false}} no sign of device tampering is detected. Tampering state MUST be persisted across reboots and the device MUST never reset it back from {{true}} to {{false}} even after a factory reset.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.EnclosureTamperingDetected";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.";
+  }
+
+  grouping fap-control-umts-g {
+    description
+      "This object contains parameters relating to the UMTS system specific information.";
+    leaf op-state {
+      type boolean;
+      description
+        "Current operational state of the UMTS FAP as defined in {{bibref|ITU-X.731}}. If {{true}} the UMTS FAP is currently enabled. If {{false}} the UMTS FAP is currently disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.OpState";
+    }
+    leaf admin-state {
+      type boolean;
+      config false;
+      description
+        "Lock or unlock the UMTS FAP. This controls the administrative state of the UMTS FAP as defined in {{bibref|ITU-X.731}}. If {{true}} Unlocked with permission to serve traffic (and enable RF transmitter(s)). If {{false}} Locked. Transition UMTS FAP to state where it is NOT permitted to serve traffic. RF transmitter is disabled. Given that this command controls the UMTS FAP's RF transmitter, the underlying expectation is that the unlock is done when all necessary conditions are met to allow the transmitter to key on and provide service, including aspects such as: # location verification (including meeting the governing regulatory requirements) # verifying the UMTS FAP configuration # if physical tampering is supported and no physical tampering is detected. The default value after power-on is {{false}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.AdminState";
+    }
+    leaf rf-tx-status {
+      type boolean;
+      description
+        "Current status of this UMTS FAP RF transmitter. {{true}} indicates that the UMTS FAP Tx transmitter is on. {{false}} indicates that the UMTS FAP Tx transmitter is off. This state is tied to the Administrative state which is controlled by the ACS. :When the ACS sets {{param|AdminState}} to {{true}}, then the UMTS FAP has permission to turn on the RF transmitter. :When the ACS sets {{param|AdminState}} to {{false}}, then the UMTS FAP is not allowed to provide service and MUST turn off the RF transmitter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.RFTxStatus";
+    }
+    leaf pm-config {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The value MUST be the path name of a row in the optional ''FAP.PerfMgmt.Config.'' table (see {{bibref|TR-262}}). This is the performance management related configuration for the UMTS FAP. In case of a multiple-radio-technology FAP product, each radio technology can have its own PM configuration or share a common PM configuration. In the former case, {{param}} can contain a unique instance number. In the latter case, {{param}} under all radio technologies can have the same instance number. If the referenced object is deleted, the parameter value MUST be set to an empty string.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.PMConfig";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.";
+  }
+
+  grouping fap-control-umts-self-config-g {
+    description
+      "This object contains parameters relating to the controlling of self-configuration capabilities in the FAP.";
+    leaf uarfcn-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the values of {{param|.CellConfig.UMTS.RAN.CSG.UARFCNDLList}}. If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.UARFCNSelfConfigEnable";
+    }
+    leaf primary-scrambling-code-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.UMTS.RAN.RF.PrimaryScramblingCode}}. If {{true}} the FAP self-configures the value. If {{false}} the ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.PrimaryScramblingCodeSelfConfigEnable";
+    }
+    leaf maxfap-tx-power-expanded-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.UMTS.RAN.RF.MaxFAPTxPowerExpanded}}. If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.MaxFAPTxPowerExpandedSelfConfigEnable";
+    }
+    leaf pcpich-power-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.UMTS.RAN.RF.PCPICHPower}}. If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.PCPICHPowerSelfConfigEnable";
+    }
+    leaf max-ul-tx-power-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.UMTS.RAN.RF.MaxULTxPower}}. If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.MaxULTxPowerSelfConfigEnable";
+    }
+    leaf lacracura-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the values of {{param|.CellConfig.UMTS.CN.LACRAC}} and {{param|.CellConfig.UMTS.RAN.URAList}}. If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.LACRACURASelfConfigEnable";
+    }
+    leaf neighbor-list-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the values in the object {{object|.CellConfig.UMTS.RAN.NeighborList.}} If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.NeighborListSelfConfigEnable";
+    }
+    leaf cell-re-selection-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine Cell Selection/Reselection-related parameters in {{object|.CellConfig.UMTS.RAN.CellSelection.}} If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.CellReSelectionSelfConfigEnable";
+    }
+    leaf intra-freq-meas-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine intra-frequency measurement -related parameters in {{object|.CellConfig.UMTS.RAN.IntraFreqMeas.}} If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.IntraFreqMeasSelfConfigEnable";
+    }
+    leaf inter-freq-meas-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine inter-frequency measurement -related parameters in {{object|.CellConfig.UMTS.RAN.InterFreqMeas.}} If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.InterFreqMeasSelfConfigEnable";
+    }
+    leaf inter-rat-meas-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine inter-RAT measurement -related parameters in {{object|.CellConfig.UMTS.RAN.InterRATMeas.}} If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.InterRATMeasSelfConfigEnable";
+    }
+    leaf ue-internal-meas-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine UE internal measurement-related parameters in {{object|.CellConfig.UMTS.RAN.UEInternalMeas.}} If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.UEInternalMeasConfigEnable";
+    }
+    leaf noise-rise-limit-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitInUse}}. If {{true}} the FAP self-configures the value, based on the limits specified in {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitLowerValue}} and {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitUpperValue}}. If {{false}} the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.NoiseRiseLimitConfigEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.";
+  }
+
+  grouping fap-control-umts-gateway-g {
+    description
+      "This object contains parameters relating to the Gateways that FAP is connected to.";
+    leaf sec-gw-server1 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "First SecGW the FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.SecGWServer1";
+    }
+    leaf sec-gw-server2 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Second SecGW the FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.SecGWServer2";
+    }
+    leaf sec-gw-server3 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Third SecGW the FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.SecGWServer3";
+    }
+    leaf fap-gw-server1 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "First FAPGW the FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.FAPGWServer1";
+    }
+    leaf fap-gw-server2 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Second FAPGW the FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.FAPGWServer2";
+    }
+    leaf fap-gw-server3 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Third FAPGW the FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.FAPGWServer3";
+    }
+    leaf fap-gw-port {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Port number of FAPGW used for initial Iuh SCTP contact. This value is specified as 29169 according to IANA definition per {{bibref|IANA-portnumbers}}, registered on 2009-09-08. Use of IANA-defined value is recommended.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.FAPGWPort";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.";
+  }
+
+  grouping fap-control-lte-g {
+    description
+      "This object contains parameters relating to the LTE system specific information.";
+    leaf op-state {
+      type boolean;
+      description
+        "Current operational state of the LTE FAP as defined in {{bibref|ITU-X.731}}. If {{true}} the LTE FAP is currently enabled. If {{false}} the LTE FAP is currently disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.OpState";
+    }
+    leaf admin-state {
+      type boolean;
+      config false;
+      description
+        "Lock or unlock the LTE FAP. This controls the administrative state of the LTE FAP as defined in {{bibref|ITU-X.731}}. If {{true}} Unlocked with permission to serve traffic (and enable RF transmitter(s)). If {{false}} Locked. Transition LTE FAP to state where it is NOT permitted to serve traffic. RF transmitter is disabled. Given that this command controls the LTE FAP's RF transmitter, the underlying expectation is that the unlock is done when all necessary conditions are met to allow the transmitter to key on and provide service, including aspects such as: # location verification (including meeting the governing regulatory requirements) # verifying the LTE FAP configuration # if physical tampering is supported and no physical tampering is detected. The default value after power-on is {{false}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.AdminState";
+    }
+    leaf rf-tx-status {
+      type boolean;
+      description
+        "Current status of this LTE FAP RF transmitter. {{true}} indicates that the LTE FAP Tx transmitter is on. {{false}} indicates that the LTE FAP Tx transmitter is off. This state is tied to the Administrative state which is controlled by the ACS. :When the ACS sets {{param|AdminState}} to {{true}}, then the LTE FAP has permission to turn on the RF transmitter. :When the ACS sets {{param|AdminState}} to {{false}}, then the LTE FAP is not allowed to provide service and MUST turn off the RF transmitter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.RFTxStatus";
+    }
+    leaf pm-config {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The value MUST be the path name of a row in optional the ''.FAP.PerfMgmt.Config.'' table (see {{bibref|TR-262}}). This is the performance management related configuration for the LTE FAP. In case of a multiple-radio-technology FAP product, each radio technology can have its own PM configuration or share a common PM configuration. In the former case, {{param}} can contain a unique instance number. In the latter case, {{param}} under all radio technologies can have the same instance number. If the referenced object is deleted, the parameter value MUST be set to an empty string.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.PMConfig";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.";
+  }
+
+  grouping fap-control-lte-gateway-g {
+    description
+      "This object contains parameters relating to the Gateways that the LTE FAP is connected to.";
+    leaf sec-gw-server1 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "First SecGW the LTE FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.SecGWServer1";
+    }
+    leaf sec-gw-server2 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Second SecGW the LTE FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.SecGWServer2";
+    }
+    leaf sec-gw-server3 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Third SecGW the LTE FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.SecGWServer3";
+    }
+    leaf-list s1-sig-link-server-list {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a S1 signaling connection end point (-GW or MME) the LTE FAP attempts to establish connection with. It is in the form of either hostname or IPaddress. LTE FAP's behavior in terms of the number of S1 connection to established with is determined by {{param|S1ConnectionMode}} parameter. If {{param|S1ConnectionMode}} has the value of {{enum|One|S1ConnectionMode}}, then LTE FAP attempts to establish S1 connection with only one address following the ordering of the list. If {{param|S1ConnectionMode}} has the value of {{enum|All|S1ConnectionMode}}, then LTE FAP attempts to establish connection with all addresses in the list.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.S1SigLinkServerList";
+    }
+    leaf s1-connection-mode {
+      type enumeration {
+        enum "one" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.S1ConnectionMode - One";
+        }
+        enum "all" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.S1ConnectionMode - All";
+        }
+      }
+      config false;
+      description
+        "Indicates how many of the configured far-end S1 link address(es),as defined in {{param|S1SigLinkServerList}}, LTE FAP SHOULD attempt to establish connection with simultaneously. If {{param}} parameter is not explicitly configured, then LTE FAP shall assume the value to be {{enum|One|S1ConnectionMode}} as default.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.S1ConnectionMode";
+    }
+    leaf s1-sig-link-port {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Port number of S1AP signaling connection end point (-GW or MME) used for initial S1 SCTP contact. This value is specified as 36412 according to IANA definition per {{bibref|IANA-portnumbers}}, registered on 2009-09-01. Use of IANA-defined value is recommended.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.S1SigLinkPort";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.";
+  }
+
+  grouping fap-control-cdma2000-g {
+    description
+      "This object contains parameters relating to the configuration for the control portions of a CDMA2000 FAP.";
+    leaf home-domain {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "A string containing one of operator's home domains in URI format. FAP is preconfigured with a default home domain, which can be overwritten later by ACS. See {{bibref|3GPP2-X.S0059}}. If the''.ManagementServer.URL'' is null, then the FAP shall use the value of this attribute to construct the ''.ManagementServer.URL'' attribute. If {{param|.FAPControl.CDMA2000.Gateway.SecGWServer1}} is null, then the FAP shall use the value of this attribute to construct the {{param|.FAPControl.CDMA2000.Gateway.SecGWServer1}} attribute. If the FAP is unable to connect to the management server indicated by the value of the ''.ManagementServer.URL'' attribute and this attribute is not null, the FAP may use the value of this attribute to construct the ''.ManagementServer.URL'' attribute. If the FAP is unable to connect to any security gateway indicated by the value of the {{param|.FAPControl.CDMA2000.Gateway.SecGWServer1}}, {{param|.FAPControl.CDMA2000.Gateway.SecGWServer2}}, and {{param|.FAPControl.CDMA2000.Gateway.SecGWServer3}} attributes and this attribute is not null, the FAP may use the value of this attribute to construct the {{param|.FAPControl.CDMA2000.Gateway.SecGWServer1}} attribute.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HomeDomain";
+    }
+    leaf remote-ip-access-enable {
+      type boolean;
+      config false;
+      description
+        "Enable or disable remote IP access service as defined in {{bibref|3GPP2-X.S0059}}. If {{true}} remote IP access is enabled. If {{false}} remove IP access is disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.RemoteIPAccessEnable";
+    }
+    leaf pm-config {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The value MUST be the path name of a row in the ''.FAP.PerfMgmt.Config.'' table. This is the performance management related configuration for the CDMA2000 FAP. In case of a multiple-radio-technology FAP product, each radio technology can have its own PM configuration or share a common PM configuration. In the former case, {{param}} can contain a unique instance number. In the latter case, {{param}} under all radio technologies can have the same instance number. If the referenced object is deleted, the parameter value MUST be set to an empty string.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.PMConfig";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.";
+  }
+
+  grouping fap-control-cdma2000-time-g {
+    description
+      "This object contains parameters related to time syncronization with CDMA2000 System Time (see {{bibref|3GPP2-C.S0005}}).";
+    leaf local-time-zone {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The local time zone for CDMA2000 operational purposes. E.g., \"+HH:MM JST\" for Japan. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Time.LocalTimeZone";
+    }
+    leaf current-local-time {
+      type string {
+        length "0..64";
+      }
+      description
+        "The current CDMA System Time (see {{bibref|3GPP2-C.S0005}}), expressed as date and time in the CPE's local time zone. The format of this field is \"YYYY-MM-DDThh:mm:ss.sTZD\" (e.g., 1997-07-16T19:20:30.45+01:00), where: YYYY = four-digit year MM = two-digit month (01=January, etc.) DD = two-digit day of month (01 through 31) hh = two digits of hour (00 through 23) (am/pm NOT allowed) mm = two digits of minute (00 through 59) ss = two digits of second (00 through 59) s = one or more digits representing a decimal fraction of a second TZD = time zone designator (Z or +hh:mm or -hh:mm)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Time.CurrentLocalTime";
+    }
+    leaf leap-seconds {
+      type int64;
+      units "seconds";
+      config false;
+      description
+        "Number of leap seconds (in {{units}} to be applied between CurrentLocalTime and CDMA System Time. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Time.LeapSeconds";
+    }
+    leaf daylight-savings-used {
+      type boolean;
+      config false;
+      description
+        "Whether or not daylight savings time is in use in the FAP's local time zone with respect to CDMA2000 System Time (see {{bibref|3GPP2-C.S0005}}). {true}} if daylight savings time is being used; otherwise {{false}}. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Time.DaylightSavingsUsed";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Time.";
+  }
+
+  grouping fap-control-cdma2000-one-x-g {
+    description
+      "This object contains all global attributes of the 1xFemto application.";
+    leaf admin-state {
+      type enumeration {
+        enum "lock" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.AdminState - Lock";
+        }
+        enum "unlock" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.AdminState - Unlock";
+        }
+      }
+      config false;
+      description
+        "Administrative state for 1x";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.AdminState";
+    }
+    leaf op-state {
+      type enumeration {
+        enum "enabled" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.OpState - Enabled";
+        }
+        enum "disabled" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.OpState - Disabled";
+        }
+      }
+      description
+        "Operational state of the 1x";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.OpState";
+    }
+    leaf rf-tx-status {
+      type boolean;
+      description
+        "Current status of this RF transmitter. {{true}} indicates that the 3G Tx transmitter is on. {{false}} indicates that the 3G Tx transmitter is off. This state is tied to the Administrative state which is controlled by the ACS. When the ACS sets AdminState to {{true}}, then the FAP has permission to turn on the RF transmitter. When the ACS sets AdminState to {{false}}, then the FAP is not allowed to provide service and MUST turn off the RF transmitter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.RFTxStatus";
+    }
+    leaf daylight {
+      type int64;
+      config false;
+      description
+        "If Daylight Savings Time is being used with respect to CDMA2000 1x overhead parameters (see {{bibref|3GPP2-C.S0005}}), then {{param}} should be set to {{true}}. Otherwise, {{param}} should be set to {{false}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.Daylight";
+    }
+    leaf max-p-rev {
+      type int64;
+      config false;
+      description
+        "Protocol revision supported by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.MaxPRev";
+    }
+    leaf reregister {
+      type uint64;
+      config false;
+      description
+        "{{param}} triggers a re-registration of all mobiles. The FAP triggers re-registration of all registered mobiles everytime this number changes";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.Reregister";
+    }
+    leaf emergency-session-period {
+      type uint16 {
+        range "15..1800";
+      }
+      units "seconds";
+      config false;
+      description
+        "The period (in {{units}}) the session of an unauthorized user is kept alive after an emergency call.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.EmergencySessionPeriod";
+    }
+    leaf location-area-code {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "This is the location area code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.LocationAreaCode";
+    }
+    leaf msc-id {
+      type uint64;
+      config false;
+      description
+        "This is the FAP's MSCID. This ID is used in PANI header.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.MSCId";
+    }
+    leaf active-handin-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the FAP performs active hand-in from another base station. If {{true}} active hand-in is enabled; if {{false}} active hand-in is disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.";
+  }
+
+  grouping fap-control-cdma2000-one-x-active-handin-measurement-g {
+    description
+      "CDMA2000 1x active handin operational parameters.";
+    leaf active-handin-measurement-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the FAP performs active hand-in measurement if a request is received. If {{true}} active hand-in measurement is enabled; if {{false}} active hand-in measurement is disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinMeasurement.ActiveHandinMeasurementEnable";
+    }
+    leaf active-hand-in-measurement-duration {
+      type uint16 {
+        range "0..65535";
+      }
+      units "1.25 ms slots";
+      config false;
+      description
+        "The minimum duration in {{units}} for which FAP should take a mobile's RL pilot strength measurements for active hand-in purpose when directed by the network. Instead of continuous measurement for this entire duration, a FAP can make multiple measurements by sampling over shorter durations. In such a case, this value specifies the minimum time separation required between the first and last measurement samples.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinMeasurement.ActiveHandInMeasurementDuration";
+    }
+    leaf measurement-report-threshold {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "The threshold (in {{units}}) for the FAP to report an active hand-in measurement. If the metric to be reported is below the threshold, the FAP may not send any report.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinMeasurement.MeasurementReportThreshold";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinMeasurement.";
+  }
+
+  grouping fap-control-cdma2000-one-x-self-config-g {
+    description
+      "This object contains parameters relating to the controlling of self-configuration capabilities in the FAP.";
+    leaf rfcnfl-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the values of {{param|.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFL}}. If {{true}}, the FAP self-configures the value. If {{false}}, the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.RFCNFLSelfConfigEnable";
+    }
+    leaf pilot-pn-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.CDMA2000.OneX.RAN.RF.PilotPN}}. If {{true}} the FAP self-configures the value. If {{false}} the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.PilotPNSelfConfigEnable";
+    }
+    leaf maxfap-tx-power-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.CDMA2000.OneX.RAN.RF.MaxFAPTxPower}}. If {{true}} the FAP self-configures the value. If {{false}} the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerSelfConfigEnable";
+    }
+    leaf maxfap-beacon-tx-power-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPower}}. If {{true}}, the FAP self-configures the value. If {{false}}, the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerSelfConfigEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.";
+  }
+
+  grouping fap-control-cdma2000-gateway-g {
+    description
+      "CDMA2000 FAP Security Gateway operational parameters.";
+    leaf sec-gw-server1 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "First SecGW the FAP attempts to contact. Either FQDN or IP address";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Gateway.SecGWServer1";
+    }
+    leaf sec-gw-server2 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Second SecGW the FAP attempts to contact. Either FQDN or IP address";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Gateway.SecGWServer2";
+    }
+    leaf sec-gw-server3 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Third SecGW that the FAP attempts to contact. Can contain either FQDN or IP address";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Gateway.SecGWServer3";
+    }
+    leaf sec-gw-switchover-count {
+      type uint64;
+      description
+        "Counter indicating how many times FAP has switched between SecGW";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Gateway.SecGWSwitchoverCount";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Gateway.";
+  }
+
+  grouping fap-control-cdma2000-hrpd-g {
+    description
+      "Operational parameters for the HRPD portion of a CDMA2000 FAP.";
+    leaf op-state {
+      type boolean;
+      description
+        "Current operational state of the FAP as defined in ITU-X.731 [32]. If {{true}} the FAP is currently enabled. If {{false}} the FAP is currently disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.OpState";
+    }
+    leaf admin-state {
+      type boolean;
+      config false;
+      description
+        "Lock or unlock the FAP. This controls the administrative state of the FAP as defined in ITU-X.731 [32]. If {{true}} Unlocked with permission to serve traffic (and enable RF transmitter(s)). If {{false}} Locked. Transition FAP to state where it is NOT permitted to serve traffic. RF transmitter is disabled. Given that this command controls the FAP's RF transmitter, the underlying expectation is that the unlock is done when all necessary conditions are met to allow the transmitter to key on and provide service, including aspects such as: location verification (including meeting the governing regulatory requirements) verifying the FAP configuration if physical tampering is supported and no physical tampering is detected. The default value after power-on is {{false}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.AdminState";
+    }
+    leaf rf-tx-status {
+      type boolean;
+      description
+        "Current status of this RF transmitter. {{true}} indicates that the 3G Tx transmitter is on. {{false}} indicates that the 3G Tx transmitter is off. This state is tied to the Administrative state which is controlled by the ACS. When the ACS sets AdminState to {{true}}, then the FAP has permission to turn on the RF transmitter. When the ACS sets AdminState to {{false}}, then the FAP is not allowed to provide service and MUST turn off the RF transmitter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.RFTxStatus";
+    }
+    leaf a13-session-transfer-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the FAP performs A13 session transfer. If {{true}} A13 session transfer is enabled; if {{false}} A13 session transfer is disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13SessionTransferEnable";
+    }
+    leaf local-ip-access-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the FAP can assign local IP address to capable ATs. If {{true}} local IP address is assigned.; if {{false}} local IP address is not assigned.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.LocalIPAccessEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.";
+  }
+
+  grouping fap-control-cdma2000-hrpd-self-config-g {
+    description
+      "This object contains parameters relating to the controlling of self-configuration capabilities in the FAP.";
+    leaf rfcnfl-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the values of {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.RFCNFL}}. If {{true}}, the FAP self-configures the value. If {{false}}, the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.RFCNFLSelfConfigEnable";
+    }
+    leaf pilot-pn-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.PilotPN}}. If {{true}}, the FAP self-configures the value. If {{false}}, the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.PilotPNSelfConfigEnable";
+    }
+    leaf maxfap-tx-power-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.MaxFAPTxPower}} . If {{true}}, the FAP self-configures the value. If {{false}}, the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerSelfConfigEnable";
+    }
+    leaf max-hrpd-beacon-tx-power-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.CDMA2000.Beacon.MaxHRPDBeaconTxPower}}. If {{true}} the FAP self-configures the value. If {{false}} The ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.MaxHRPDBeaconTxPowerSelfConfigEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.";
+  }
+
+  grouping fap-control-cdma2000-hrpd-a13-g {
+    description
+      "This object contains attributes related to A13 Session Transfer";
+    leaf color-code-to-uati104-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104NumberOfEntries";
+    }
+    leaf hrpd-subnet-to-ip-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIPNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.";
+  }
+
+  grouping fap-control-cdma2000-hrpd-a13-color-code-to-uati104-g {
+    description
+      "HRPD ColorCode to UATI Mapping Table number of entries.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.Alias";
+    }
+    leaf color-code {
+      type uint16 {
+        range "0..256";
+      }
+      description
+        "Color Code mapped to UATI104 in the following field";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.ColorCode";
+    }
+    leaf uati104 {
+      type binary {
+        length "0..13";
+      }
+      description
+        "The UATI104 of the AT that accesses with the ColorCode field";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.UATI104";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.";
+  }
+
+  grouping fap-control-cdma2000-hrpd-a13-hrpd-subnet-to-ip-g {
+    description
+      "This object contains attributes related to A13 Session Transfer";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.Alias";
+    }
+    leaf hrpd-subnet-length {
+      type uint8 {
+        range "1..104";
+      }
+      units "bits";
+      config false;
+      description
+        "The number of MSBs (in {{units}}) in the following field that is part of HRPDSubnet";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.HRPDSubnetLength";
+    }
+    leaf hrpd-subnet {
+      type binary {
+        length "0..13";
+      }
+      config false;
+      description
+        "The {{param|HRPDSubnetLength}} MSBs of this field contain the HRPD subnet that maps to the IP address in the following field";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.HRPDSubnet";
+    }
+    leaf a13-ip-address {
+      type inet:ip-address;
+      description
+        "This field contains the IP address of A13 endpoint that corresponds to the HRPD subnet";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.A13IPAddress";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.";
+  }
+
+  grouping access-mgmt-g {
+    description
+      "This object contains parameters relating to Access Management for the different radio technologies.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.";
+  }
+
+  grouping access-mgmt-umts-g {
+    description
+      "This object contains parameters relating to Access Management for UMTS FAP (ACL, CSG, LIPA). Closed Subscriber Group (CSG) service behavior is specified in {{bibref|3GPP-TS.22.011}}. Note: Cell barring and 3GPP access class parameters are contained in {{object|.CellConfig.UMTS.RAN.CellRestriction.}} (UMTS FAP).";
+    leaf access-mode {
+      type enumeration {
+        enum "open access" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.AccessMode - Open Access";
+        }
+        enum "closed access" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.AccessMode - Closed Access";
+        }
+        enum "hybrid access" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.AccessMode - Hybrid Access";
+        }
+      }
+      default "open access";
+      config false;
+      description
+        "Indicates the type of access mode the FAP operates in. {{enum}} When the value is not {{enum|Open Access}} non-CSG-capable UE are handled according to {{param|NonCSGUEAccessDecision}}. Note: This parameter controls the setting of the CSGindicator bit, specified in MIB in {{bibref|3GPP-TS.25.331}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.AccessMode";
+    }
+    leaf non-csgue-access-decision {
+      type enumeration {
+        enum "local" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.NonCSGUEAccessDecision - Local";
+        }
+        enum "query fap-gw" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.NonCSGUEAccessDecision - Query FAPGW";
+        }
+        enum "by core" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.NonCSGUEAccessDecision - By Core";
+        }
+      }
+      default "local";
+      config false;
+      description
+        "Indicates how the access decision is made for non-CSG-capable UE. Parameter is ignored when {{param|AccessMode}} is {{enum|Open Access|AccessMode}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.NonCSGUEAccessDecision";
+    }
+    leaf csg-membership-determined-locally {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Indicates how the access decision is made for CSG-capable UE. Parameter is ignored when {{param|AccessMode}} is {{enum|Open Access|AccessMode}}. If {{true}} access decision is determined the same way as for {{param|NonCSGUEAccessDecision}}. (E.g. if core network doesn't (yet) support full CSG functionality.) If {{false}} FAP always allows access for CSG-capable UE. CSG enforcement is performed by MSC/SGSN (with support from HSS), or by FGW. {{bibref|3GPP-TS.22.011}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.CSGMembershipDeterminedLocally";
+    }
+    leaf max-u-es-served {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Maximum number of concurrent UEs allowed at a cell. Valid for any {{param|AccessMode}}. A value of -1 allows an unlimited number of concurrent UEs up to the limit of FAP capacity. The setting does not affect emergency calls.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MaxUEsServed";
+    }
+    leaf max-csg-members {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Maximum number of concurrent CSG member UEs allowed at a hybrid or closed cell. A value of -1 allows an unlimited number of CSG members up to the limit of FAP capacity. The setting cannot be larger than the value of {{param|MaxUEsServed}}. The setting does not affect emergency calls. {{bibref|3GPP-TS.22.011}}, {{bibref|3GPP-TS.22.220}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MaxCSGMembers";
+    }
+    leaf max-non-csg-members {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Maximum number of concurerent non-CSG member UEs allowed at a hybrid cell. Valid only if {{param|AccessMode}} is {{enum|Hybrid Access|AccessMode}}. The setting cannot be larger than the value of {{param|MaxUEsServed}}. The setting does not affect emergency calls.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MaxNonCSGMembers";
+    }
+    leaf max-resource-non-csg-members {
+      type uint8 {
+        range "0..100";
+      }
+      config false;
+      description
+        "Maximum percentage of physical resource that can be assigned to non-CSG members aggregately at one time. In UMTS FAP, this applies to RB resource.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MaxResourceNonCSGMembers";
+    }
+    leaf hnb-name {
+      type string {
+        length "0..48";
+      }
+      config false;
+      description
+        "Home NodeB name. An operator-defined string that is broadcast by a CSG cell or a hybrid cell and displayed on the UE for the purpose of manual cell selection or indication that the UE is camped on the cell as specified in {{bibref|3GPP-TS.22.220|Section 5.4.2}}. Corresponds to parameter 'hnb-Name' specified in SIB20 in {{bibref|3GPP-TS.25.331|Section 10.2.48.8.23}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.HNBName";
+    }
+    leaf csgid {
+      type uint32 {
+        range "0..134217727";
+      }
+      config false;
+      description
+        "Defines the Closed Subscriber Group of the Access Control List. The UMTS FAP broadcasts this CSG ID in SIB3 depending on the AccessMode. The LTE FAP broadcasts this in SIB1, and corresponds to parameter csg-Identity in SIB1 in {{bibref|3GPP-TS.36.331}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.CSGID";
+    }
+    leaf-list access-control-list {
+      type string {
+        length "0..15";
+      }
+      config false;
+      max-elements "1024";
+      description
+        "{{list}} Each entry is an IMSI.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.AccessControlList";
+    }
+    leaf max-member-detail-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.AccessMgmt.UMTS.MemberDetail.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MaxMemberDetailEntries";
+    }
+    leaf member-detail-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetailNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.";
+  }
+
+  grouping access-mgmt-umts-member-detail-g {
+    description
+      "Details for CSG and Non-CSG members.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the MemberDetail entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.Alias";
+    }
+    leaf imsi {
+      type string {
+        length "0..15";
+      }
+      description
+        "International Mobile Subscriber Identity of the UE.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.IMSI";
+    }
+    leaf msisdn {
+      type string {
+        length "0..15";
+      }
+      config false;
+      description
+        "Mobile Station International Subscriber Identity Number. Set to {{empty}} if unknown.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.MSISDN";
+    }
+    leaf membership-expires {
+      type yang:date-and-time;
+      config false;
+      description
+        "Time when the ACL membership expires. An Unknown Time value, as defined in {{bibref|TR-106a2|Section 3.2}}, indicates that the membership doesn't expire. Upon expiry the FAP MUST remove the IMSI from the {{param|.AccessMgmt.UMTS.AccessControlList}}, but the entry in {{object|.AccessMgmt.UMTS.MemberDetail.{i}.}} remains. {{bibref|3GPP-TS.22.011}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.MembershipExpires";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.";
+  }
+
+  grouping access-mgmt-umts-local-ip-access-g {
+    description
+      "Local IP access for UMTS FAP.";
+    leaf enable {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Enables/disables the Local IP Access (LIPA) functionality.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.LocalIPAccess.Enable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.LocalIPAccess.";
+  }
+
+  grouping access-mgmt-lte-g {
+    description
+      "This object contains parameters relating to Access Management, as defined in {{bibref|3GPP-TS.32.592}}/ Closed Subscriber Group (CSG) service behavior is specified in {{bibref|3GPP-TS.22.011}}. Note: Cell barring and 3GPP access class parameters are contained in SIB1 in {{bibref|3GPP-TS.36.331}}.";
+    leaf access-mode {
+      type enumeration {
+        enum "open access" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.AccessMode - Open Access";
+        }
+        enum "closed access" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.AccessMode - Closed Access";
+        }
+        enum "hybrid access" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.AccessMode - Hybrid Access";
+        }
+      }
+      default "open access";
+      config false;
+      description
+        "Indicates the type of access mode the FAP operates in. {{enum}} Note: This parameter controls the setting of the CSGindicator bit, specified in SIB1 in {{bibref|3GPP-TS.36.331}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.AccessMode";
+    }
+    leaf max-u-es-served {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Maximum number of concurrent UEs allowed at a cell. Valid for any {{param|AccessMode}}. A value of -1 allows an unlimited number of concurrent UEs up to the limit of FAP capacity. The setting does not affect emergency calls.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.MaxUEsServed";
+    }
+    leaf max-csg-members {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Maximum number of concurrent CSG member UEs allowed at a hybrid or closed cell. A value of -1 allows an unlimited number of CSG members up to the limit of FAP capacity. The setting cannot be larger than the value of {{param|MaxUEsServed}}. The setting does not affect emergency calls. {{bibref|3GPP-TS.22.011}}, {{bibref|3GPP-TS.22.220}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.MaxCSGMembers";
+    }
+    leaf max-non-csg-members {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Maximum number of concurerent non-CSG member UEs allowed at a hybrid cell. Valid only if {{param|AccessMode}} is {{enum|Hybrid Access|AccessMode}}. The setting cannot be larger than the value of {{param|MaxUEsServed}}. The setting does not affect emergency calls.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.MaxNonCSGMembers";
+    }
+    leaf max-resource-non-csg-members {
+      type uint8 {
+        range "0..100";
+      }
+      config false;
+      description
+        "Maximum percentage of physical resource that can be assigned to non-CSG members aggregately at one time. This applies to PDSCH physical resource blocks.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.MaxResourceNonCSGMembers";
+    }
+    leaf csgid {
+      type uint32 {
+        range "0..134217727";
+      }
+      config false;
+      description
+        "Defines the Closed Subscriber Group of the Access Control List. The LTE FAP broadcasts this in SIB1, and corresponds to parameter csg-Identity in SIB1 in {{bibref|3GPP-TS.36.331}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.CSGID";
+    }
+    leaf hnb-name {
+      type string {
+        length "0..48";
+      }
+      config false;
+      description
+        "Home NodeB name. An operator-defined string that is broadcast by a CSG cell or a hybrid cell and displayed on the UE for the purpose of manual cell selection or indication that the UE is camped on the cell as specified in {{bibref|3GPP-TS.22.220|Section 5.4.2}}. Corresponds to parameter 'hnb-Name' specified in SIB9 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.HNBName";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.";
+  }
+
+  grouping access-mgmt-lte-local-ip-access-g {
+    description
+      "Local IP access for LTE FAP.";
+    leaf enable {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Enables/disables the Local IP Access (LIPA) functionality.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.LocalIPAccess.Enable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.LocalIPAccess.";
+  }
+
+  grouping access-mgmt-cdma2000-g {
+    description
+      "This object contains configurable and observable attributes related to CDMA2000 Access and Admission Control of the FAP.";
+    leaf access-mode {
+      type uint8 {
+        range "0 | 1 | 3";
+      }
+      config false;
+      description
+        "Defines the access control mode of FAP. Allowed modes are Open, Closed, and Signaling Association (refer to {{bibref|3GPP2-A.S0024}}). AccessMode 2 (Hybrid) is not applicable to CDMA2000 FAPs. 0- Open,1-Closed, 2-Reserved, 3-Signaling Association.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.AccessMode";
+    }
+    leaf max-total-active-calls-allowed {
+      type uint16 {
+        range "1..1024";
+      }
+      config false;
+      description
+        "Total number of active calls allowed.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MaxTotalActiveCallsAllowed";
+    }
+    leaf access-control-list {
+      type string {
+        length "0..1024";
+      }
+      config false;
+      description
+        "{{list}} (maximum item length 15). Each entry is an IMSI.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.AccessControlList";
+    }
+    leaf max-member-detail-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.AccessMgmt.CDMA2000.MemberDetail.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MaxMemberDetailEntries";
+    }
+    leaf member-detail-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetailNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.";
+  }
+
+  grouping access-mgmt-cdma2000-member-detail-g {
+    description
+      "At most one enabled entry in this table can exist with a given value for IMSI and HRPDIdentifierValue. The IMSI field may be empty.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.Alias";
+    }
+    leaf imsi {
+      type string {
+        length "0..15";
+      }
+      description
+        "International Mobile Subscriber Identity of the UE.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.IMSI";
+    }
+    leaf hrpd-identifier-type {
+      type int64;
+      config false;
+      description
+        "Type of identifier used for the HRPD AT. 0-invalid 1-ESN 2-MEID 3-A12NAI. If IMSI in this record is valid, then this attribute is set to 0.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.HRPDIdentifierType";
+    }
+    leaf hrpd-identifier-value {
+      type string {
+        length "0..128";
+      }
+      config false;
+      description
+        "The value of this attribute depends on {{param|HRPDIdentifierType}}. ESN and MEID shall be defined as Hex.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.HRPDIdentifierValue";
+    }
+    leaf membership-expires {
+      type yang:date-and-time;
+      config false;
+      description
+        "The time that the current ACL membership expires.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.MembershipExpires";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.";
+  }
+
+  grouping access-mgmt-cdma2000-local-ip-access-g {
+    description
+      "Local IP access support as defined in 3GPP2";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.";
+  }
+
+  grouping access-mgmt-cdma2000-local-ip-access-hrpd-g {
+    description
+      "Local IP access support as defined in 3GPP2";
+    leaf filter-type {
+      type uint8 {
+        range "0..3";
+      }
+      config false;
+      description
+        "Value of '0' indicates that the FAP shall allow only IP packets with destination address matching the local IP subnet on Local IP access interface. Value of '1' indicates that the FAP shall allow any IP packets with destination address matching either the local IP subnet or the subnets listed in Local IP egress filter parameter on Local IP access interface. Value of '2' indicates that the FAP shall allow any IP packets with destination addresses that do not match the Local IP egress filter parameter on Local IP access interface.Value of '3' indicates that the FAP shall allow any IP packets on the local IP address interface.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.FilterType";
+    }
+    leaf filter-in-use {
+      type string {
+        length "0..256";
+      }
+      description
+        "This parameter is set to the IPCP Vendor Specific Option which the FAP uses to send Local IP access packet filter on AN-PPP interface.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.FilterInUse";
+    }
+    leaf egress-filter-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilterNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.";
+  }
+
+  grouping access-mgmt-cdma2000-local-ip-access-hrpd-egress-filter-g {
+    description
+      "HRPD LIPA Egress Filter Table entries.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.Alias";
+    }
+    leaf subnet {
+      type inet:ipv4-address;
+      description
+        "The IP subnet of the egress filter to be installed to the AT. The meaning of this field depends on the {{param|.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.FilterType}} field.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.Subnet";
+    }
+    leaf subnet-mask {
+      type uint8 {
+        range "0..32";
+      }
+      description
+        "The length of the IP subnetmask associated with the IP subnet in the previous field.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.SubnetMask";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.";
+  }
+
+  grouping access-mgmt-legacy-g {
+    description
+      "This object contains configurable and observable attributes related to Access and Admission Control of the FAP, which are not not covered by 3GPP and 3GPP2 specifications.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.";
+  }
+
+  grouping access-mgmt-legacy-local-ip-access-g {
+    description
+      "Old Local IP access object, included on special request.";
+    leaf enable {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Enables/disables the Local IP Access (LIPA) functionality.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Enable";
+    }
+    leaf max-rules-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.MaxRulesEntries";
+    }
+    leaf rule-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.RuleNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.";
+  }
+
+  grouping access-mgmt-legacy-local-ip-access-rule-g {
+    description
+      "Policy for selecting traffic for local IP access. Originated traffic will be NAT'ed. The rule is bi-directional, i.e. return traffic is allowed. Rules do NOT affect traffic to/from the FAP itself (such as TR-069 or control). The rules are applied to the mobile station data traffic (PS-domain) via deep packet inspection or similar method.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the forwarding entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Alias";
+    }
+    leaf dest-ip-address {
+      type inet:ip-address;
+      description
+        "Destination IP Address. {{empty}} indicates no destination address is specified. An entry for which {{param}} and {{param|DestSubnetMask}} are both {{empty}} is a default route.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.DestIPAddress";
+    }
+    leaf dest-subnet-mask {
+      type inet:ip-address;
+      description
+        "Destination subnet mask (IPv4) or prefix (IPv6). {{empty}} indicates no destination subnet mask or prefix is specified. If a destination subnet mask or prefix is specified, {{param}} is ANDed with the destination address before comparing with {{param|DestIPAddress}}. Otherwise, the full destination address is used as-is. An entry for which {{param|DestIPAddress}} and {{param}} are both {{empty}} is a default route.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.DestSubnetMask";
+    }
+    leaf protocol {
+      type int64;
+      description
+        "IP Protocol Identifier. -1 matches any protocol.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Protocol";
+    }
+    leaf action {
+      type enumeration {
+        enum "tunnel" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Action - Tunnel";
+        }
+        enum "napt" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Action - NAPT";
+        }
+      }
+      config false;
+      description
+        "Action to be taken for traffic matching this rule.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Action";
+    }
+    leaf interface {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "Specifies the egress interface when {{param|Action}} is set to {{enum|NAPT|Action}}. {{reference}} layer-3 connection object. Example: InternetGatewayDevice.LANDevice.{i}.LANEthernetInterfaceConfig.{i}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Interface";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.";
+  }
+
+  grouping cell-config-g {
+    description
+      "This object contains parameters relating to configuring the FAP.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.";
+  }
+
+  grouping umts-g {
+    description
+      "This object contains parameters relating to configuring UMTS system specific information.";
+    leaf tunnel-instance {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "This is the reference to the IPsec tunnel instance used by the UMTS FAP. For all root data models, which use the tunnel definition provided in {{bibref|TR-262}} (InternetGatewayDevice:1 {{bibref|TR-098}} and Device:1 {{bibref|TR-181i1}}) the {{param}} MUST point to a row in the 'FAP.Tunnel.IKESA.{i}.' table, defined in {{bibref|TR-262}}. If the root data model used is Device:2 {{bibref|TR-181i2}} than the {{param}} MUST point to IPsec tunnel instance defined in {{bibref|TR-181i2}}. If the referenced object is deleted, the parameter value MUST be set to an empty string. In case of a multiple-radio-technology FAP product, each radio technology can have its own tunnels or share common tunnels. In the former case, {{param}} can contain a unique instance number. In the latter case, {{param}} under all radio technologies can have the same instance number.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.TunnelInstance";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.";
+  }
+
+  grouping umts-cn-g {
+    description
+      "This object contains parameters relating to configuring UMTS CN.";
+    leaf plmn-type {
+      type enumeration {
+        enum "gsm-map" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.PLMNType - GSM-MAP";
+        }
+        enum "ansi-41" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.PLMNType - ANSI-41";
+        }
+      }
+      config false;
+      description
+        "Type of Public Land Mobile Network (PLMN).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.PLMNType";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      config false;
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.PLMNID";
+    }
+    leaf-list equiv-plmnid {
+      type string {
+        length "0..6";
+      }
+      config false;
+      max-elements "64";
+      description
+        "{{list}} Each item is a PLMNID. PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of the PLMNID is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.EquivPLMNID";
+    }
+    leaf sac {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Service Area Code (SAC) {{bibref|3GPP-TS.23.003}}. The concatenation of PLMN ID (MCC+MNC), LAC, and SAC uniquely identifies the Service Area ID (SAI).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.SAC";
+    }
+    leaf broadcast-sac {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Service Area Code (SAC) for broadcast. The format of this parameter is the same with {{param|SAC}}, and it uniquely identifies the Service Area ID (SAI) for Earthquake and Tsunami Warning Services (ETWS) {{bibref|3GPP-TS.25.469|Section 9.1.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.BroadcastSAC";
+    }
+    leaf-list lacrac {
+      type string;
+      config false;
+      max-elements "256";
+      description
+        "{{list}} Each item is a LAC/RAC combination expressed in the following format: :<LAC or LACrange>':'<RAC or RACrange> Where LAC and RAC are single values, while LACrange and RACrange are inclusive and can be expressed in the following format: :<Start-value>\"..\"<End-value> Location Area Code (LAC) consists of up to 5 numerical characters. The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}. Routing Area Code (RAC) consists of up to 3 numerical characters. The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}. The FAP is to select one LAC and RAC from the combination(s) expressed in this parameter for use in {{param|LACInUse}} and {{param|RACInUse}} respectively. If a LAC occurs more than once in the list, this shall not increase the chance that it is selected over other LAC values in the list. The following are examples of the valid LACRAC combination formats: :\"64000:210\" ::(one list item with single value for LAC and RAC) :\"64000..64100:210, 64101:211\" ::(two list items, first item has a LAC range) :\"64000:210..214, 64001:215..219\" ::(two list items, both items have a RAC range for a specific LAC value) :\"64000..64100:210..214\" ::(one list item both have a LAC range and a RAC range)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.LACRAC";
+    }
+    leaf lac-in-use {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "The LAC being used by the FAP. Self-configuration for LAC is controlled by {{param|.Capabilities.UMTS.SelfConfig.LACRACURAConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.LACRACURASelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|LACRAC}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first LAC value in {{param|LACRAC}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.LACInUse";
+    }
+    leaf rac-in-use {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "The RAC being used by the FAP. Self-configuration for RAC is controlled by {{param|.Capabilities.UMTS.SelfConfig.LACRACURAConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.LACRACURASelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|LACRAC}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first RAC value in {{param|LACRAC}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.RACInUse";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.";
+  }
+
+  grouping umts-cn-cs-domain-g {
+    description
+      "This object contains parameters relating to configuring the CS domain of the UMTS CN.";
+    leaf t3212 {
+      type uint32 {
+        range "0..91800";
+      }
+      units "seconds";
+      config false;
+      description
+        "T3212 timeout value specified in {{units}} {{bibref|3GPP-TS.24.008|section 10.5.1.12.2}}. The values are implemented by steps of 360 {{units}}, which aligns with values in decihours in {{bibref|3GPP-TS.24.008}}. The value of 0 is used for infinite timeout value i.e. periodic updating shall not be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.CSDomain.T3212";
+    }
+    leaf imsi-attach-detach-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates the UE behavior regarding IMSI attach/detach procedure to the CN {{bibref|3GPP-TS.24.008}}. If {{true}} UE SHALL apply IMSI attach and detach procedure If {{false}} UE SHALL NOT apply IMSI attach and detach procedure";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.CSDomain.IMSIAttachDetachEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.CSDomain.";
+  }
+
+  grouping umts-cn-ps-domain-g {
+    description
+      "This object contains parameters relating to configuring the PS domain of the UMTS CN.";
+    leaf network-mode-operation-combined {
+      type boolean;
+      config false;
+      description
+        "Network Mode of Operation of the CN. {{bibref|3GPP-TS.23.060}} {{bibref|3GPP-TS.24.008}} If {{true}} (Network Mode of Operation II) Combined procedures between CS and PS domain are not supported (i.e. Gs interface is not present). If {{false}} (Network Mode of Operation I) Combined procedures between CS and PS domain are supported (i.e. Gs interface is present).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.PSDomain.NetworkModeOperationCombined";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.PSDomain.";
+  }
+
+  grouping umts-ran-g {
+    description
+      "This object contains parameters relating to the RAN-level configuration.";
+    leaf-list ura-list {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      min-elements 1;
+      max-elements "50";
+      description
+        "{{list}} Each item is a URA (UTRAN Registration Area) to which the FAP belongs. The order of the URA values has no significance. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.URAList";
+    }
+    leaf ura-in-use {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "The URA being used by the FAP. Self-configuration for URA is controlled by {{param|.Capabilities.UMTS.SelfConfig.LACRACURAConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.LACRACURASelfConfigEnable}} from an enabled perspective. If the FAP's self-configuration capability for URA is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|URAList}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first URA value in {{param|URAList}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.URAInUse";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "RNC-ID allocated to the FAP. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RNCID";
+    }
+    leaf cell-id {
+      type uint32 {
+        range "0..268435455";
+      }
+      config false;
+      description
+        "Cell Identity. {{bibref|3GPP-TS.25.401|Section 6.1.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellID";
+    }
+    leaf t-rat-c {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Guard period in {{units}} before sending a \"RANAP:RESET ACKNOWLEDGE\" message towards the Femto GW. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TRatC";
+    }
+    leaf t-raf-c {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Maximum amount of time in {{units}} that the FAP SHOULD wait for receiving a \"RANAP:RESET ACKNOWLEDGE\" message from the Femto GW after sending a Reset to the Femto GW. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TRafC";
+    }
+    leaf n-raf-c {
+      type uint64 {
+        range "1..max";
+      }
+      config false;
+      description
+        "Maximum number for RESET procedure that can be repeated in FAP. {{bibref|3GPP-TS.25.413|Section 8.26.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NRafC";
+    }
+    leaf tig-or {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Amount of time in {{units}} used to determine when the additional level of traffic reduction in CN overload SHOULD take place. While this timer is running all OVERLOAD messages or signalling pointing to congested information received by the FAP are ignored. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TigOR";
+    }
+    leaf tin-tr {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Amount of time in {{units}} used to determine when the CN overload can be considered cleared. While this timer is running, the FAP is not allowed to increase traffic. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TinTR";
+    }
+    leaf t-data-fwd {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Maximum amount of time in {{units}} for Data Forwarding at FAP. Timer is started when a \"RANAP:SRNS Data Forward Command\" message (or a \"RANAP:Relocation Command\" message) is received. At timer expiry the \"SRNS Data Forwarding\" procedure is completed. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TDataFwd";
+    }
+    leaf t-reloc-prep {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Maximum amount of time in {{units}} for the Relocation Preparation procedure. Timer is started when a \"RANAP:Relocation Required\" message is sent. Timer is stopped when a \"RANAP:Relocation Command\" or a \"RANAP:Relocation Preparation Failure\" message is received. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TRelocPrep";
+    }
+    leaf t-reloc-overall {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Maximum amount of time in {{units}} for protection of the overall Relocation procedure. Timer is started when a \"RANAP:Relocation Command\" message is received. Timer is stopped when a \"RANAP:Iu Release Command\" is received or the relocation procedure is cancelled. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TRelocOverall";
+    }
+    leaf hnbid-realm {
+      type string {
+        length "0..182";
+      }
+      config false;
+      description
+        "The \"realm\" portion of the HNB-ID where HNB-ID is defined in {{bibref|3GPP-TS.25.469}} and is shown as follows: 0<IMSI>@<realm> Or 1<OUI>-<SerialNumber>@<realm> The other identifiers before \"@\" are device dependent values. Both <OUI> and <SerialNumber> are defined in {{bibref|TR-069a2|Table 36}}. <IMSI> is obtained from the USIM if it is equipped in the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.HNBIDRealm";
+    }
+    leaf hs-flag {
+      type boolean;
+      config false;
+      description
+        "Enables/disables the HSDPA function in the FAP. If {{true}} HSDPA is enabled (this is equivalent to a \"1\" in {{bibref|3GPP-TS.32.642|Section 6.3.9}}) If {{false}} HSDPA is disabled (this is equivalent to a \"0\" in {{bibref|3GPP-TS.32.642|Section 6.3.9}})";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.HSFlag";
+    }
+    leaf hs-enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables HSDPA in the cell. If {{true}} HSDPA is enabled (this is equivalent to a \"1\" in {{bibref|3GPP-TS.32.642|Section 6.3.9}}) If {{false}} HSDPA is not enabled (this is equivalent to a \"0\" in {{bibref|3GPP-TS.32.642|Section 6.3.9}}) If {{param|HSFlag}} is {{false}} then this value MUST be {{false}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.HSEnable";
+    }
+    leaf num-of-hspdsc-hs {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "The number of codes at the defined spreading factor (SF=16), within the complete code tree. {{bibref|3GPP-TS.32.642|Section 6.3.9}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NumOfHSPDSCHs";
+    }
+    leaf num-of-hsscc-hs {
+      type uint64;
+      config false;
+      description
+        "The number of HS-SCCHs for one cell. {{bibref|3GPP-TS.32.642|Section 6.3.9}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NumOfHSSCCHs";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.";
+  }
+
+  grouping umts-ran-csg-g {
+    description
+      "This object contains parameters relating to the Closed Subscriber Group (CSG).";
+    leaf csg-indicator {
+      type boolean;
+      description
+        "The CSG-indicator Information Element (IE) in the Master Information Block reflects the access mode of the CSG cell. It is hence dependent on the value of {{param|.AccessMgmt.UMTS.AccessMode}}. If {{true}} the CSG-indicator IE is present, reflecting access to the CSG cell is closed. If {{false}} the CSG-indicator IE is absent, reflecting access to the CSG cell is not closed. {{bibref|3GPP-TS.25.331|Section 10.2.48.8.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGIndicator";
+    }
+    leaf-list uarfcndl-list {
+      type uint16 {
+        range "0..16383";
+      }
+      config false;
+      max-elements "128";
+      description
+        "{{list}} Each item is a UTRA Absolute Radio Frequency Channel Number (UARFCN) in the DL direction dedicated to the CSG cells. {{param}} is broadcast in SIB 11bis {{bibref|3GPP-TS.25.331|Section 10.2.48.8.14a}}. The corresponding UTRA Absolute Radio Frequency Channel Number (UARFCN) in the UL direction is derived based on the fixed offset applicable for the frequency band.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.UARFCNDLList";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.";
+  }
+
+  grouping umts-ran-csg-csgpsc-split-info-g {
+    description
+      "This object contains parameters relating to the Primary Scrambling Code (PSC) split information for the CSG. Defined in SIB3/11bis {{bibref|3GPP-TS.25.331|Section 10.3.2.8 and 10.3.2.9}}.";
+    leaf start-psc-range1-coefficient {
+      type uint8 {
+        range "0..63";
+      }
+      config false;
+      description
+        "The value of this Information Element (IE) multiplied by 8 specifies the start PSC value of the first PSC range as specified in {{bibref|3GPP-TS.25.331|Section 8.6.2.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.StartPSCRange1Coefficient";
+    }
+    leaf number-of-ps-cs {
+      type enumeration {
+        enum "5" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 5";
+        }
+        enum "10" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 10";
+        }
+        enum "15" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 15";
+        }
+        enum "20" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 20";
+        }
+        enum "30" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 30";
+        }
+        enum "40" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 40";
+        }
+        enum "50" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 50";
+        }
+        enum "64" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 64";
+        }
+        enum "80" {
+          value 9;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 80";
+        }
+        enum "120" {
+          value 10;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 120";
+        }
+        enum "160" {
+          value 11;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 160";
+        }
+        enum "256" {
+          value 12;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 256";
+        }
+        enum "alltherest" {
+          value 13;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - alltherest";
+        }
+        enum "spare3" {
+          value 14;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - spare3";
+        }
+        enum "spare2" {
+          value 15;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - spare2";
+        }
+        enum "spare1" {
+          value 16;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - spare1";
+        }
+      }
+      config false;
+      description
+        "This Information Element (IE) specifies the number of PSCs reserved for CSG cells in each PSC range.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs";
+    }
+    leaf psc-range2-offset {
+      type uint8 {
+        range "0..63";
+      }
+      config false;
+      description
+        "If this Information Element (IE) is included, the UE shall calculate the second PSC range as specified in {{bibref|3GPP-TS.25.331|Section 8.6.2.4}}. If this Information Element (IE) is not included, the UE shall consider the second PSC range to be not present.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.PSCRange2Offset";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.";
+  }
+
+  grouping umts-ran-cell-selection-g {
+    description
+      "This object contains parameters related to cell selection and reselection.";
+    leaf quality-measure-cpich {
+      type enumeration {
+        enum "ec/no" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QualityMeasureCPICH - Ec/No";
+        }
+        enum "rscp" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QualityMeasureCPICH - RSCP";
+        }
+      }
+      config false;
+      description
+        "Which mechanism to use when doing CPICH quality measurements. {{bibref|3GPP-TS.25.331|Section 10.3.7.47}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QualityMeasureCPICH";
+    }
+    leaf qqual-min {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Minimum required quality measure, specified in {{units}}. {{bibref|3GPP-TS.25.331|Section 10.3.2.3 and Section 10.3.2.4}} This value is only meaningful if {{param|QualityMeasureCPICH}} has the value {{enum|Ec/No|QualityMeasureCPICH}} and it MUST otherwise be ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QqualMin";
+    }
+    leaf qqual-min-offset {
+      type uint8 {
+        range "1..16";
+      }
+      units "dB";
+      default "1";
+      config false;
+      description
+        "Offset for {{param|QqualMin}} specified in {{units}}. {{bibref|3GPP-TS.25.331|Section 10.3.2.3}} This value is only meaningful if {{param|QualityMeasureCPICH}} has the value {{enum|Ec/No|QualityMeasureCPICH}} and it MUST otherwise be ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QqualMinOffset";
+    }
+    leaf q-rx-lev-min {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Minimum required RX level in the cell, specified in {{units}}. {{bibref|3GPP-TS.25.331|Section 10.3.2.3}} Only odd values are valid, use of an even value MUST be rejected by the CPE. This value is only meaningful if {{param|QualityMeasureCPICH}} has the value {{enum|RSCP|QualityMeasureCPICH}} and it MUST otherwise be ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QRxLevMin";
+    }
+    leaf delta-q-rx-lev-min {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Delta for the minimum required RX level in the cell, specified in {{units}}. {{bibref|3GPP-TS.25.331|Section 10.3.2.3 and Section 10.3.2.4}} The actual value of {{param|QRxLevMin}} = {{param|QRxLevMin}} + {{param}} This value is only meaningful if {{param|QualityMeasureCPICH}} has the value {{enum|RSCP|QualityMeasureCPICH}} and it MUST otherwise be ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.DeltaQRxLevMin";
+    }
+    leaf q-rx-lev-min-offset {
+      type uint8 {
+        range "2 | 4 | 6 | 8 | 10 | 12 | 14 | 16";
+      }
+      units "dB";
+      default "2";
+      config false;
+      description
+        "Offset for {{param|QRxLevMin}}, specified in {{units}}. {{bibref|3GPP-TS.25.331|Section 10.3.2.3}} This value is only meaningful if {{param|QualityMeasureCPICH}} has the value {{enum|RSCP|QualityMeasureCPICH}} and it MUST otherwise be ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QRxLevMinOffset";
+    }
+    leaf q-hyst1s {
+      type uint8 {
+        range "0..40";
+      }
+      config false;
+      description
+        "GSM and FDD Cell reselection hysteresis 1. {{bibref|3GPP-TS.25.331|Section 10.3.2.3}} Only even values are valid, use of an odd value MUST be rejected by the CPE.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QHyst1s";
+    }
+    leaf q-hyst2s {
+      type uint8 {
+        range "0..40";
+      }
+      config false;
+      description
+        "FDD Cell reselection hysteresis 2. {{bibref|3GPP-TS.25.331|Section 10.3.2.3}} Only even values are valid, use of an odd value MUST be rejected by the CPE. This value is only meaningful if {{param|QualityMeasureCPICH}} has the value {{enum|Ec/No|QualityMeasureCPICH}} and it MUST otherwise be ignored. By default when {{param|QHyst1s}} is set and {{param}} is not, then the value for {{param}} SHOULD match the value of {{param|QHyst1s}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QHyst2s";
+    }
+    leaf t-reselections {
+      type uint8 {
+        range "0..31";
+      }
+      units "seconds";
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. A UE triggers the reselection of a new cell if the cell reselection criteria are fulfilled during the time interval in {{units}}. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TReselections";
+    }
+    leaf s-intrasearch {
+      type int64;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the threshold for intra-frequency measurements, and for the HCS measurement rules. Only even values are valid, use of an odd value MUST be rejected by the CPE. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SIntrasearch";
+    }
+    leaf s-intersearch {
+      type int64;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the threshold for inter-frequency measurements, and for the HCS measurement rules. Only even values are valid, use of an odd value MUST be rejected by the CPE. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SIntersearch";
+    }
+    leaf s-search-hcs {
+      type int64;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the threshold for intrafrequency and interfrequency measurement rules in HCS. Below this limit in the serving cell, the UE initiates measurements of all intrafrequency and interfrequency neighbouring cells of the serving cell. Only odd values are valid, use of an even value MUST be rejected by the CPE. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SSearchHCS";
+    }
+    leaf s-search-rat {
+      type int64;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the RAT (GSM) specific threshold for inter-RAT measurement rules. Only even values are valid, use of an odd value MUST be rejected by the CPE. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SSearchRAT";
+    }
+    leaf shcsrat {
+      type int64;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the RAT (GSM) specific threshold for inter-RAT measurement rules in HCS. Only odd values are valid, use of an even value MUST be rejected by the CPE. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SHCSRAT";
+    }
+    leaf s-limit-search-rat {
+      type int64;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the threshold for skipping inter-RAT measurement rules in HCS. Above this RAT (GSM) specific threshold in the serving UTRA cell, the UE does not need to perform any inter-RAT measurements. Only even values are valid, use of an odd value MUST be rejected by the CPE. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SLimitSearchRAT";
+    }
+    leaf non-hcstcr-max {
+      type enumeration {
+        enum "not used" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax - not used";
+        }
+        enum "30" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax - 30";
+        }
+        enum "60" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax - 60";
+        }
+        enum "120" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax - 120";
+        }
+        enum "180" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax - 180";
+        }
+        enum "240" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax - 240";
+        }
+      }
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the duration in seconds for evaluating the allowed amount of cell reselections. If the number of cell reselections during the time period defined by {{param}} exceeds {{param|NonHCSNCR}}, high mobility has been detected. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax";
+    }
+    leaf non-hcsncr {
+      type uint8 {
+        range "1..16";
+      }
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the maximum number of cell reselections. If the number of cell reselections during the {{param|NonHCSTCRMax}} time period exceeds the value of {{param}}, high mobility has been detected. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSNCR";
+    }
+    leaf non-hcstcr-max-hyst {
+      type enumeration {
+        enum "not used" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - not used";
+        }
+        enum "10" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 10";
+        }
+        enum "20" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 20";
+        }
+        enum "30" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 30";
+        }
+        enum "40" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 40";
+        }
+        enum "50" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 50";
+        }
+        enum "60" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 60";
+        }
+        enum "70" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 70";
+        }
+      }
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the cell reselection hysteresis for reverting from UE high-mobility measurements. The additional time period in seconds before UE reverts to low-mobility measurements. When the number of cell reselections during the time period defined by {{param|TCRMax}} no longer exceeds {{param|NCR}}, UE continues measurements during the time period defined by {{param|TCRMaxHyst}}. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst";
+    }
+    leaf qhcs {
+      type uint8 {
+        range "0..99";
+      }
+      default "0";
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the quality threshold levels for applying prioritised hierarchical cell reselection. {{bibref|3GPP-TS.25.331|Section 10.3.7.12 and Section 10.3.7.54a}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QHCS";
+    }
+    leaf use-of-hcs {
+      type boolean;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Indicate whether HCS is used in this cell or not. {{bibref|3GPP-TS.25.331|Section 10.3.7.47}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.UseOfHCS";
+    }
+    leaf hcs-prio {
+      type uint8 {
+        range "0..7";
+      }
+      default "0";
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the HCS priority of this cell. {{bibref|3GPP-TS.25.331|Section 10.3.7.12}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.HCSPrio";
+    }
+    leaf tcr-max {
+      type enumeration {
+        enum "not used" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax - not used";
+        }
+        enum "30" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax - 30";
+        }
+        enum "60" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax - 60";
+        }
+        enum "120" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax - 120";
+        }
+        enum "180" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax - 180";
+        }
+        enum "240" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax - 240";
+        }
+      }
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the duration in seconds for evaluating the allowed amount of cell reselections. If the number of cell reselections during the time period defined by {{param}} exceeds {{param|NCR}}, high mobility has been detected. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.7.12}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax";
+    }
+    leaf ncr {
+      type uint8 {
+        range "1..16";
+      }
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the maximum number of cell reselections. If the number of cell reselections during the {{param|TCRMax}} time period exceeds the value of {{param}}, high mobility has been detected. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.7.12}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NCR";
+    }
+    leaf tcr-max-hyst {
+      type enumeration {
+        enum "not used" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - not used";
+        }
+        enum "10" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 10";
+        }
+        enum "20" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 20";
+        }
+        enum "30" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 30";
+        }
+        enum "40" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 40";
+        }
+        enum "50" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 50";
+        }
+        enum "60" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 60";
+        }
+        enum "70" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 70";
+        }
+      }
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the cell reselection hysteresis for reverting from UE high-mobility measurements. The additional time period in seconds before UE reverts to low-mobility measurements. When the number of cell reselections during the time period defined by {{param|TCRMax}} no longer exceeds {{param|NCR}}, UE continues measurements during the time period defined by {{param}}. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.7.12}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst";
+    }
+    leaf ue-tx-pwr-max-rach {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the maximum transmit power level, specified in {{units}}, that an UE MAY use when accessing the cell on RACH. Used to calculate Pcompensation, which is: max(UE_TXPWR_MAX_RACH - P_MAX, 0), where UE_TXPWR_MAX_RACH is {{param}} and P_MAX is the max transmit power for a UE. {{bibref|3GPP-TS.25.331|Section 10.3.2.3}} {{bibref|3GPP-TS.25.304|Section 5.2.3}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.UETxPwrMaxRACH";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.";
+  }
+
+  grouping umts-ran-rrc-timers-g {
+    description
+      "This object contains parameters related to miscellaneous RRC timers and constants.";
+    leaf t300 {
+      type uint16 {
+        range "100..8000";
+      }
+      units "milliseconds";
+      default "1000";
+      config false;
+      description
+        "Timer measured in {{units}}. Only the following values are considered valid: :100, 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000, 3000, 4000, 6000, and 8000 Any value other than those and the CPE MUST reject the request. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T300";
+    }
+    leaf t301 {
+      type uint16 {
+        range "100..8000";
+      }
+      units "milliseconds";
+      default "2000";
+      config false;
+      description
+        "Timer measured in {{units}}. Only the following values are considered valid: :100, 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000, 3000, 4000, 6000, and 8000 Any value other than those and the CPE MUST reject the request. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T301";
+    }
+    leaf t302 {
+      type uint16 {
+        range "100..8000";
+      }
+      units "milliseconds";
+      default "4000";
+      config false;
+      description
+        "Timer measured in {{units}}. Only the following values are considered valid: :100, 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000, 3000, 4000, 6000, and 8000 Any value other than those and the CPE MUST reject the request. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T302";
+    }
+    leaf t304 {
+      type uint16 {
+        range "100 | 200 | 400 | 1000 | 2000";
+      }
+      units "milliseconds";
+      default "2000";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T304";
+    }
+    leaf t305 {
+      type int64;
+      units "minutes";
+      default "30";
+      config false;
+      description
+        "Timer measured in {{units}}. -1 indicates an unbounded timer in which there is no update. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T305";
+    }
+    leaf t307 {
+      type uint8 {
+        range "5 | 10 | 15 | 20 | 30 | 40 | 50";
+      }
+      units "seconds";
+      default "30";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T307";
+    }
+    leaf t308 {
+      type uint16 {
+        range "40 | 80 | 160 | 320";
+      }
+      units "milliseconds";
+      default "160";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T308";
+    }
+    leaf t309 {
+      type uint8 {
+        range "1..8";
+      }
+      units "seconds";
+      default "5";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T309";
+    }
+    leaf t310 {
+      type uint16 {
+        range "40 | 80 | 120 | 160 | 200 | 240 | 280 | 320";
+      }
+      units "milliseconds";
+      default "160";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T310";
+    }
+    leaf t311 {
+      type uint16 {
+        range "250 | 500 | 750 | 1000 | 1250 | 1500 | 1750 | 2000";
+      }
+      units "milliseconds";
+      default "2000";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T311";
+    }
+    leaf t312 {
+      type uint8 {
+        range "0..15";
+      }
+      units "seconds";
+      default "1";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T312";
+    }
+    leaf t313 {
+      type uint8 {
+        range "0..15";
+      }
+      units "seconds";
+      default "3";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T313";
+    }
+    leaf t314 {
+      type uint8 {
+        range "0 | 2 | 4 | 6 | 8 | 12 | 16 | 20";
+      }
+      units "seconds";
+      default "12";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T314";
+    }
+    leaf t315 {
+      type uint16 {
+        range "0 | 10 | 30 | 60 | 180 | 600 | 1200 | 1800";
+      }
+      units "seconds";
+      default "180";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T315";
+    }
+    leaf t316 {
+      type int64;
+      units "seconds";
+      default "30";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}. -1 indicates an unbounded timer in which there is no update.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T316";
+    }
+    leaf t317 {
+      type uint16 {
+        range "0 | 10 | 30 | 60 | 180 | 600 | 1200 | 1800";
+      }
+      units "seconds";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T317";
+    }
+    leaf n300 {
+      type uint8 {
+        range "0..7";
+      }
+      default "3";
+      config false;
+      description
+        "Counter. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N300";
+    }
+    leaf n301 {
+      type uint8 {
+        range "0..7";
+      }
+      default "2";
+      config false;
+      description
+        "Counter. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N301";
+    }
+    leaf n302 {
+      type uint8 {
+        range "0..7";
+      }
+      default "3";
+      config false;
+      description
+        "Counter. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N302";
+    }
+    leaf n304 {
+      type uint8 {
+        range "0..7";
+      }
+      default "2";
+      config false;
+      description
+        "Counter. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N304";
+    }
+    leaf n310 {
+      type uint8 {
+        range "0..7";
+      }
+      default "4";
+      config false;
+      description
+        "Counter. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N310";
+    }
+    leaf n312 {
+      type uint16 {
+        range "1..1000";
+      }
+      default "1";
+      config false;
+      description
+        "Counter. Only the following values are considered valid: 1, 2, 4, 10, 20, 50, 100, 200, 400, 600, 800, and 1000. Any value other than those and the CPE MUST reject the request. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N312";
+    }
+    leaf n313 {
+      type uint8 {
+        range "1 | 2 | 4 | 10 | 20 | 50 | 100 | 200";
+      }
+      default "20";
+      config false;
+      description
+        "Counter. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N313";
+    }
+    leaf n315 {
+      type uint16 {
+        range "1..1000";
+      }
+      default "1";
+      config false;
+      description
+        "Counter. Only the following values are considered valid: :1, 2, 4, 10, 20, 50, 100, 200, 400, 600, 800, and 1000. Any value other than those and the CPE MUST reject the request. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N315";
+    }
+    leaf wait-time {
+      type uint8 {
+        range "0..15";
+      }
+      units "seconds";
+      config false;
+      description
+        "Time period the UE has to wait before repeating the rejected procedure. This is an IE used when sending RRC connection reject, redirecting the requesting UE to another frequency. 0 indicates that repetition is not allowed. {{bibref|3GPP-TS.25.331|Section 10.3.3.50}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.WaitTime";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.";
+  }
+
+  grouping umts-ran-drx-g {
+    description
+      "This object contains parameters related to DRX parameters.";
+    leaf drx-cycle-length-coefficient-cs {
+      type uint8 {
+        range "6..9";
+      }
+      config false;
+      description
+        "Defines the DRX cycle length coefficient for CS domain to optimize paging in idle mode. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 10.3.3.6}}. {{param}} refers to 'k' in the formula as specified in {{bibref|3GPP-TS.25.304}}, Discontinuous reception. Used by the CN CS domain to count paging occasions for discontinuous reception in Idle Mode. The duration of the DRX cycle is 2 <power> k frames, where 'k' is the used DRX cycle length coefficient for CN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.DRX.DRXCycleLengthCoefficientCS";
+    }
+    leaf drx-cycle-length-coefficient-ps {
+      type uint8 {
+        range "6..9";
+      }
+      config false;
+      description
+        "Defines the DRX cycle length coefficient for PS domain to optimize paging in idle mode. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 10.3.3.6}}. {{param}} refers to 'k' in the formula as specified in {{bibref|3GPP-TS.25.304}}, Discontinuous reception. Used by the CN PS domain to count paging occasions for discontinuous reception in Idle Mode. The duration of the DRX cycle is 2 <power> k frames, where 'k' is the used DRX cycle length coefficient for CN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.DRX.DRXCycleLengthCoefficientPS";
+    }
+    leaf utrandrx-cycle-length-coefficient {
+      type uint8 {
+        range "3..9";
+      }
+      config false;
+      description
+        "Defines the DRX cycle length used by UTRAN to count paging occasions for discontinuous reception in Connected Mode. The duration of the DRX cycle is 2 <power> k frames, where 'k' is the used DRX cycle length coefficient for UTRAN. {{param}} SHOULD be used by the UTRAN/FAP for UEs in Cell_PCH/Cell_FACH state. {{bibref|3GPP-TS.25.331|Section 10.3.3.49}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.DRX.UTRANDRXCycleLengthCoefficient";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.DRX.";
+  }
+
+  grouping umts-ran-power-control-g {
+    description
+      "This object contains parameters related to power control and RACH.";
+    leaf constant-value {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Used by the UE to calculate the initial output power, specified in {{units}}, on PRACH according to the open loop power control procedure. Parameter in SIB5. {{bibref|3GPP-TS.25.331|Section 10.3.6.11}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.ConstantValue";
+    }
+    leaf power-ramp-step-up {
+      type uint8 {
+        range "1..8";
+      }
+      units "dB";
+      config false;
+      description
+        "Used for the Uplink Common Channel. Defines the Power ramp setup, specified in {{units}}, on PRACH preamble when no acquisition indicator (AI) is detected by the UE. Parameter in SIB5. {{bibref|3GPP-TS.25.331|Section 10.3.6.54}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.PowerRampStepUp";
+    }
+    leaf preamble-retrans-max {
+      type uint8 {
+        range "1..64";
+      }
+      config false;
+      description
+        "Used for the Uplink Common Channel. Defines the maximum number of preambles allowed in one preamble ramping cycle. PRACH Preamble Retrans Max is part of \"PRACH power offset\" which is part of \"PRACH system information list\". Parameter in SIB5. {{bibref|3GPP-TS.25.331|Section 10.3.6.54}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.PreambleRetransMax";
+    }
+    leaf persistence-scale-factor {
+      type uint8 {
+        range "2..9";
+      }
+      config false;
+      description
+        "Persistence Scaling Factor for overload control. Parameter in SIB5. The value is the scaling factor multiplied by 10, e.g. 2 is a scaling factor of 0.2";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.PersistenceScaleFactor";
+    }
+    leaf m-max {
+      type uint8 {
+        range "1..32";
+      }
+      config false;
+      description
+        "Maximum number of RACH preamble cycles. Defines how many times the PRACH preamble ramping procedure can be repeated before UE MAC reports a failure on RACH transmission to higher layers. Maximum number of RACH preamble cycles is part of \"RACH transmission parameters\" which is part of \"PRACH system information list\" which is part of SIB5. {{bibref|3GPP-TS.25.331|Section 10.3.6.67}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.MMax";
+    }
+    leaf nb01-min {
+      type uint8 {
+        range "0..50";
+      }
+      config false;
+      description
+        "RACH random back-off lower bound. {{param}} is the lower bound of the waiting time in 10 millisecond increments (i.e. 1 corresponds to 10 ms and 50 corresponds to 500 ms). {{param}} is part of \"RACH transmission parameters\" which is part of \"PRACH system information list\" which is part of SIB5. {{bibref|3GPP-TS.25.331|Section 10.3.6.67}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.NB01Min";
+    }
+    leaf nb01-max {
+      type uint8 {
+        range "0..50";
+      }
+      config false;
+      description
+        "RACH random back-off upper bound. {{param}} is the Upper bound of the waiting time in 10 millisecond increments (i.e. 1 corresponds to 10 ms and 50 corresponds to 500 ms). {{param}} is part of \"RACH transmission parameters\" which is part of \"PRACH system information list\" which is part of SIB5. {{bibref|3GPP-TS.25.331|Section 10.3.6.67}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.NB01Max";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.";
+  }
+
+  grouping umts-ran-cell-restriction-g {
+    description
+      "This object contains parameters related to cell access restriction.";
+    leaf cell-barred {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the FAP is barred from service or not. {{bibref|3GPP-TS.25.331|Section 10.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.CellBarred";
+    }
+    leaf intra-freq-cell-reselection-indicator {
+      type boolean;
+      config false;
+      description
+        "When {{param|CellBarred}} is {{true}}, this indicates whether the intra-frequency cell re-selection is allowed or not. {{param}} has no meaning if {{param|CellBarred}} is {{false}} and MUST be ignored in such cases. {{true}} means that intra-frequency cell re-selection is allowed. {{false}} means that intra-frequency cell re-selection is not allowed. {{bibref|3GPP-TS.25.331|Section 10.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.IntraFreqCellReselectionIndicator";
+    }
+    leaf t-barred {
+      type uint16 {
+        range "10 | 20 | 40 | 80 | 160 | 320 | 640 | 1280";
+      }
+      units "seconds";
+      config false;
+      description
+        "The time period in {{units}} during which the UE is barred from accessing the FAP. {{bibref|3GPP-TS.25.331|Section 10.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.TBarred";
+    }
+    leaf-list access-class-barred-list-cs {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "{{list}} Each entry is an Access Class that is barred from CS service. The order of the list has no significance. {{bibref|3GPP-TS.25.331|Section 10.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.AccessClassBarredListCS";
+    }
+    leaf-list access-class-barred-list-ps {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "{{list}} Each entry is an Access Class that is barred from PS service. The order of the list has no significance. {{bibref|3GPP-TS.25.331|Section 10.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.AccessClassBarredListPS";
+    }
+    leaf cell-reserved-for-operator-use {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the FAP is reserved for operator use or not. {{bibref|3GPP-TS.25.331|Section 10.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.CellReservedForOperatorUse";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.";
+  }
+
+  grouping umts-ran-intra-freq-meas-g {
+    description
+      "This object contains parameters relating to the intra-freq HO control parameters.";
+    leaf measurement-quantity {
+      type enumeration {
+        enum "cpich ec/no" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.MeasurementQuantity - CPICH Ec/No";
+        }
+        enum "cpich rscp" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.MeasurementQuantity - CPICH RSCP";
+        }
+        enum "pathloss" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.MeasurementQuantity - Pathloss";
+        }
+      }
+      config false;
+      description
+        "Defines the measurement quantity for intra-freq HO measurement when the UE is in Cell-DCH state. Enumeration of: {{enum}} {{bibref|3GPP-TS.25.331|Section 10.3.7.38}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.MeasurementQuantity";
+    }
+    leaf filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the equivalent time constant of the low pass filter applied to the CPICH quality measurements, or {{enum|CPICH Ec/No|MeasurementQuantity}}. {{bibref|3GPP-TS.25.331|Section 8.6.7.2 and Section 10.3.7.9}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.FilterCoefficient";
+    }
+    leaf-list intra-frequency-event-identity {
+      type string;
+      config false;
+      max-elements "32";
+      description
+        "{{list}} Each entry is an Event ID from the list of: 1a, 1b, 1c, 1d, 1e, 1f, 1g, 1h, 1i Defines the identity of the event used to trigger UE reporting (in case of event-triggered reporting). {{bibref|3GPP-TS.25.331|Section 10.3.7.34}} Since the FAP can determine this on its own, it might not be necessary to configure it.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.IntraFrequencyEventIdentity";
+    }
+    leaf-list triggering-condition2-event1a {
+      type enumeration {
+        enum "active" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1a - Active";
+        }
+        enum "monitored" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1a - Monitored";
+        }
+        enum "active and monitored" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1a - Active and Monitored";
+        }
+        enum "detected" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1a - Detected";
+        }
+        enum "detected and monitored" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1a - Detected and Monitored";
+        }
+      }
+      config false;
+      description
+        "{{list}} Indicates which cells can trigger Event 1a. {{enum}} {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1a";
+    }
+    leaf-list triggering-condition1-event1b {
+      type enumeration {
+        enum "active" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1b - Active";
+        }
+        enum "monitored" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1b - Monitored";
+        }
+        enum "active and monitored" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1b - Active and Monitored";
+        }
+      }
+      config false;
+      description
+        "{{list}} Indicates which cells can trigger Event 1b. {{enum}} {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1b";
+    }
+    leaf-list triggering-condition2-event1e {
+      type enumeration {
+        enum "active" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1e - Active";
+        }
+        enum "monitored" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1e - Monitored";
+        }
+        enum "active and monitored" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1e - Active and Monitored";
+        }
+        enum "detected" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1e - Detected";
+        }
+        enum "detected and monitored" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1e - Detected and Monitored";
+        }
+      }
+      config false;
+      description
+        "{{list}} Indicates which cells can trigger Event 1e. {{enum}} {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1e";
+    }
+    leaf-list triggering-condition1-event1f {
+      type enumeration {
+        enum "active" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1f - Active";
+        }
+        enum "monitored" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1f - Monitored";
+        }
+        enum "active and monitored" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1f - Active and Monitored";
+        }
+      }
+      config false;
+      description
+        "{{list}} Indicates which cells can trigger Event 1f. {{enum}} {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1f";
+    }
+    leaf reporting-range-event1a {
+      type uint8 {
+        range "0..29";
+      }
+      units "dB";
+      config false;
+      description
+        "Defines a constant in the inequality criterion that needs to be satisfied for an Event 1a to occur. Actual values of the range are 0.0 to 14.5 {{units}} in steps of 0.5 {{units}}. The value of {{param}} divided by 2 yields the actual value of the range. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingRangeEvent1a";
+    }
+    leaf reporting-range-event1b {
+      type uint8 {
+        range "0..29";
+      }
+      units "dB";
+      config false;
+      description
+        "Defines a constant in the inequality criterion that needs to be satisfied for an Event 1b to occur. Actual values of the range are 0.0 to 14.5 {{units}} in steps of 0.5 {{units}}. The value of {{param}} divided by 2 yields the actual value of the range. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingRangeEvent1b";
+    }
+    leaf weighting-factor-event1a {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.WeightingFactorEvent1a";
+    }
+    leaf weighting-factor-event1b {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.WeightingFactorEvent1b";
+    }
+    leaf report-deactivation-threshold-event1a {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Defines the maximum number of cells allowed in the \"active cell set\" for Event 1a to occur. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportDeactivationThresholdEvent1a";
+    }
+    leaf reporting-amount-event1a {
+      type int64;
+      config false;
+      description
+        "Defines the maximum number of MEASUREMENT REPORT messages sent by the UE in case of periodic reporting triggered by an Event 1a The value -1 is used to represent an unbounded maximum. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingAmountEvent1a";
+    }
+    leaf reporting-amount-event1c {
+      type int64;
+      config false;
+      description
+        "Defines the maximum number of MEASUREMENT REPORT messages sent by the UE in case of periodic reporting triggered by an Event 1c The value -1 is used to represent an unbounded maximum. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingAmountEvent1c";
+    }
+    leaf reporting-interval-event1a {
+      type uint16 {
+        range "0 | 250 | 500 | 1000 | 2000 | 4000 | 8000 | 16000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the transmission period in {{units}} of MEASUREMENT REPORT messages sent by the UE in case of periodic reporting triggered by an Event 1a. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingIntervalEvent1a";
+    }
+    leaf reporting-interval-event1c {
+      type uint16 {
+        range "0 | 250 | 500 | 1000 | 2000 | 4000 | 8000 | 16000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the transmission period in {{units}} of MEASUREMENT REPORT messages sent by the UE in case of periodic reporting triggered by an Event 1c. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingIntervalEvent1c";
+    }
+    leaf hysteresis-event1a {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1a";
+    }
+    leaf hysteresis-event1b {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1b";
+    }
+    leaf hysteresis-event1c {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1c";
+    }
+    leaf hysteresis-event1d {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1d";
+    }
+    leaf hysteresis-event1e {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1e";
+    }
+    leaf hysteresis-event1f {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1f";
+    }
+    leaf time-to-trigger-event1a {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1a";
+    }
+    leaf time-to-trigger-event1b {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1b";
+    }
+    leaf time-to-trigger-event1c {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1c";
+    }
+    leaf time-to-trigger-event1d {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1d";
+    }
+    leaf time-to-trigger-event1e {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1e";
+    }
+    leaf time-to-trigger-event1f {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1f";
+    }
+    leaf threshold-used-frequency-event1e {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for intra-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.39}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB {{enum|Pathloss|MeasurementQuantity}} has a range of 30 dB to 165 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ThresholdUsedFrequencyEvent1e";
+    }
+    leaf threshold-used-frequency-event1f {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for intra-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.39}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB {{enum|Pathloss|MeasurementQuantity}} has a range of 30 dB to 165 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ThresholdUsedFrequencyEvent1f";
+    }
+    leaf replacement-activation-threshold-event1c {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Defines the minimum number of cells allowed in the \"active cell set\" for Event 1c to occur. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReplacementActivationThresholdEvent1c";
+    }
+    leaf instance-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.InstanceNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.";
+  }
+
+  grouping umts-ran-intra-freq-meas-instance-g {
+    description
+      "Table containing parameters relating to a particular instance of intra-freq events.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.Alias";
+    }
+    leaf intra-frequency-event-identity {
+      type enumeration {
+        enum "1a" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 1a";
+        }
+        enum "1b" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 1b";
+        }
+        enum "1c" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 1c";
+        }
+        enum "1d" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 1d";
+        }
+        enum "1e" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 1e";
+        }
+        enum "1f" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 1f";
+        }
+      }
+      description
+        "Each entry is an Event ID from the list of: {{enum}} Defines the identity of the event used to trigger UE reporting (in case of event-triggered reporting). {{bibref|3GPP-TS.25.331|Section 10.3.7.34}} This attribute is readable, as it is highly dependent on how the FAP makes use of the event.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity";
+    }
+    leaf event-description {
+      type string {
+        length "0..256";
+      }
+      description
+        "A free-form description of the way the event instance is meant to be used. E.g. \"hand-out to macro cells\", \"addition of enterprise HNB cell to Active Set\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.EventDescription";
+    }
+    leaf measurement-quantity {
+      type enumeration {
+        enum "cpich ec/no" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.MeasurementQuantity - CPICH Ec/No";
+        }
+        enum "cpich rscp" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.MeasurementQuantity - CPICH RSCP";
+        }
+        enum "pathloss" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.MeasurementQuantity - Pathloss";
+        }
+      }
+      config false;
+      description
+        "Defines the measurement quantity for intra-freq HO measurement when the UE is in Cell-DCH state. Enumeration of: {{enum}} {{bibref|3GPP-TS.25.331|Section 10.3.7.38}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.MeasurementQuantity";
+    }
+    leaf filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the equivalent time constant of the low pass filter applied to the CPICH quality measurements, or {{enum|CPICH Ec/No|MeasurementQuantity}}. {{bibref|3GPP-TS.25.331|Section 8.6.7.2 and Section 10.3.7.9}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.FilterCoefficient";
+    }
+    leaf-list triggering-condition {
+      type enumeration {
+        enum "active" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TriggeringCondition - Active";
+        }
+        enum "monitored" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TriggeringCondition - Monitored";
+        }
+        enum "active and monitored" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TriggeringCondition - Active and Monitored";
+        }
+        enum "detected" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TriggeringCondition - Detected";
+        }
+        enum "detected and monitored" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TriggeringCondition - Detected and Monitored";
+        }
+      }
+      config false;
+      description
+        "{{list}} Indicates which cells can trigger the event instance. {{enum}} {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TriggeringCondition";
+    }
+    leaf reporting-range {
+      type uint8 {
+        range "0..29";
+      }
+      units "dB";
+      config false;
+      description
+        "Applicable to events 1a, 1b, otherwise not needed. Defines a constant in the inequality criterion that needs to be satisfied for an Event 1b to occur. Actual values of the range are 0.0 to 14.5 {{units}} in steps of 0.5 {{units}}. The value of {{param}} divided by 2 yields the actual value of the range. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReportingRange";
+    }
+    leaf weighting-factor {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Applicable to events 1a, 1b, otherwise not needed. Defines the weighting factor for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.WeightingFactor";
+    }
+    leaf report-deactivation-threshold {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Applicable to events 1a, otherwise not needed. Defines the maximum number of cells allowed in the \"active cell set\" for Event 1a to occur. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReportDeactivationThreshold";
+    }
+    leaf reporting-amount {
+      type int64;
+      config false;
+      description
+        "Applicable to events 1a, 1c, otherwise not needed. Defines the maximum number of MEASUREMENT REPORT messages sent by the UE in case of periodic reporting triggered by an Event 1a The value -1 is used to represent an unbounded maximum. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReportingAmount";
+    }
+    leaf reporting-interval {
+      type uint16 {
+        range "0 | 250 | 500 | 1000 | 2000 | 4000 | 8000 | 16000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Applicable to events 1a, 1c, otherwise not needed. Defines the transmission period in {{units}} of MEASUREMENT REPORT messages sent by the UE in case of periodic reporting triggered by an Event 1a. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReportingInterval";
+    }
+    leaf hysteresis {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.Hysteresis";
+    }
+    leaf time-to-trigger {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TimeToTrigger";
+    }
+    leaf threshold-used-frequency {
+      type int64;
+      config false;
+      description
+        "Applicable to events 1e, 1f, otherwise not needed. Defines the reporting threshold for intra-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.39}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB {{enum|Pathloss|MeasurementQuantity}} has a range of 30 dB to 165 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ThresholdUsedFrequency";
+    }
+    leaf replacement-activation-threshold {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Applicable only to event 1c Defines the minimum number of cells allowed in the \"active cell set\" for Event 1c to occur. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReplacementActivationThreshold";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.";
+  }
+
+  grouping umts-ran-inter-freq-meas-g {
+    description
+      "This object contains parameters relating to the inter-freq HO related control parameters.";
+    leaf measurement-quantity {
+      type enumeration {
+        enum "cpich ec/no" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.MeasurementQuantity - CPICH Ec/No";
+        }
+        enum "cpich rscp" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.MeasurementQuantity - CPICH RSCP";
+        }
+      }
+      config false;
+      description
+        "Defines the measurement quantity for inter-freq HO measurement when the UE is in Cell-DCH state. Enumeration of: {{enum}} {{bibref|3GPP-TS.25.331|Section 10.3.7.18}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.MeasurementQuantity";
+    }
+    leaf filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the filter coefficient for inter-freq HO measurement when the UE is in Cell-DCH state. {{bibref|3GPP-TS.25.331|Section 10.3.7.9 and Section 10.3.7.18}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.FilterCoefficient";
+    }
+    leaf-list inter-frequency-event-identity {
+      type string;
+      config false;
+      max-elements "32";
+      description
+        "{{list}} Each entry is an Event ID from the list of: 2a, 2b, 2c, 2d, 2e,2f Defines the identity of the event used to trigger inter-frequency UE reporting (in case of event-triggered reporting). {{bibref|3GPP-TS.25.331|Section 10.3.7.14}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.InterFrequencyEventIdentity";
+    }
+    leaf weighting-factor-event2a {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.WeightingFactorEvent2a";
+    }
+    leaf weighting-factor-event2b {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.WeightingFactorEvent2b";
+    }
+    leaf weighting-factor-event2d {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.WeightingFactorEvent2d";
+    }
+    leaf weighting-factor-event2f {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.WeightingFactorEvent2f";
+    }
+    leaf hysteresis-event2a {
+      type uint8 {
+        range "0..29";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 14.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.HysteresisEvent2a";
+    }
+    leaf hysteresis-event2b {
+      type uint8 {
+        range "0..29";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 14.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.HysteresisEvent2b";
+    }
+    leaf hysteresis-event2d {
+      type uint8 {
+        range "0..29";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 14.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.HysteresisEvent2d";
+    }
+    leaf hysteresis-event2f {
+      type uint8 {
+        range "0..29";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 14.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.HysteresisEvent2f";
+    }
+    leaf time-to-trigger-event2a {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.19 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.TimeToTriggerEvent2a";
+    }
+    leaf time-to-trigger-event2b {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.19 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.TimeToTriggerEvent2b";
+    }
+    leaf time-to-trigger-event2d {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.19 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.TimeToTriggerEvent2d";
+    }
+    leaf time-to-trigger-event2f {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.19 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.TimeToTriggerEvent2f";
+    }
+    leaf threshold-used-frequency-event2b {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for inter-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.ThresholdUsedFrequencyEvent2b";
+    }
+    leaf threshold-used-frequency-event2d {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for inter-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.ThresholdUsedFrequencyEvent2d";
+    }
+    leaf threshold-used-frequency-event2f {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for inter-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.ThresholdUsedFrequencyEvent2f";
+    }
+    leaf instance-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.InstanceNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.";
+  }
+
+  grouping umts-ran-inter-freq-meas-instance-g {
+    description
+      "Table containing parameters relating to a particular instance of inter-freq events.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.Alias";
+    }
+    leaf intra-frequency-event-identity {
+      type enumeration {
+        enum "2a" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 2a";
+        }
+        enum "2b" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 2b";
+        }
+        enum "2c" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 2c";
+        }
+        enum "2d" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 2d";
+        }
+        enum "2e" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 2e";
+        }
+        enum "2f" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 2f";
+        }
+      }
+      description
+        "Each entry is an Event ID from the list of: {{enum}} Defines the identity of the event used to trigger UE reporting (in case of event-triggered reporting). {{bibref|3GPP-TS.25.331|Section 10.3.7.14}} This attribute is readable, as it is highly dependent on how the FAP makes use of the event.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity";
+    }
+    leaf event-description {
+      type string {
+        length "0..256";
+      }
+      description
+        "A free-form description of the way the event instance is meant to be used. E.g. \"detecting cell edge to prepare for hand-out\", \"cancel hand-out preparation\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.EventDescription";
+    }
+    leaf measurement-quantity {
+      type enumeration {
+        enum "cpich ec/no" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.MeasurementQuantity - CPICH Ec/No";
+        }
+        enum "cpich rscp" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.MeasurementQuantity - CPICH RSCP";
+        }
+      }
+      config false;
+      description
+        "Defines the measurement quantity for inter-freq HO measurement when the UE is in Cell-DCH state. Enumeration of: {{enum}} {{bibref|3GPP-TS.25.331|Section 10.3.7.18}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.MeasurementQuantity";
+    }
+    leaf filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the filter coefficient for inter-freq HO measurement when the UE is in Cell-DCH state. {{bibref|3GPP-TS.25.331|Section 10.3.7.9 and Section 10.3.7.18}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.FilterCoefficient";
+    }
+    leaf weighting-factor {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.WeightingFactor";
+    }
+    leaf hysteresis {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 14.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.Hysteresis";
+    }
+    leaf time-to-trigger {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.TimeToTrigger";
+    }
+    leaf threshold-used-frequency {
+      type int64;
+      config false;
+      description
+        "Applicable to events 2b, 2d, 2f, otherwise not needed. Defines the reporting threshold for inter-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.ThresholdUsedFrequency";
+    }
+    leaf threshold-non-used-frequency {
+      type int64;
+      config false;
+      description
+        "Applicable to events 2a, 2b, 2c, 2e otherwise not needed. Defines the reporting threshold for inter-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold non used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.ThresholdNonUsedFrequency";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.";
+  }
+
+  grouping umts-ran-inter-rat-meas-g {
+    description
+      "This object contains parameters relating to the inter-RAT HO related control parameters. This is specifically for GERAN system.";
+    leaf gsm-filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the filter coefficient for inter-RAT HO measurement when the UE is in Cell-DCH state. {{bibref|3GPP-TS.25.331|Section 10.3.7.9 and Section 10.3.7.29}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.GSMFilterCoefficient";
+    }
+    leaf bsic-verification-required {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the BSIC verification is required or not for inter-RAT HO measurement when the UE is in Cell-DCH state. {{bibref|3GPP-TS.25.331|Section 10.3.7.29}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.BSICVerificationRequired";
+    }
+    leaf weighting-factor {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-RAT HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.WeightingFactor";
+    }
+    leaf hysteresis {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-RAT HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Hysteresis";
+    }
+    leaf time-to-trigger {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-RAT HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.TimeToTrigger";
+    }
+    leaf threshold-own-system {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for inter-RAT HO measurement when the UE is in Cell-DCH state. This is the \"Threshold own system\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.ThresholdOwnSystem";
+    }
+    leaf threshold-other-system {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for inter-RAT HO measurement when the UE is in Cell-DCH state. This is the \"Threshold other system\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.ThresholdOtherSystem";
+    }
+    leaf instance-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.InstanceNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.";
+  }
+
+  grouping umts-ran-inter-rat-meas-instance-g {
+    description
+      "Table containing parameters relating to a particular instance of inter-freq events.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.Alias";
+    }
+    leaf inter-rat-event-identity {
+      type enumeration {
+        enum "3a" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.InterRATEventIdentity - 3a";
+        }
+        enum "3b" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.InterRATEventIdentity - 3b";
+        }
+        enum "3c" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.InterRATEventIdentity - 3c";
+        }
+        enum "3d" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.InterRATEventIdentity - 3d";
+        }
+      }
+      description
+        "Each entry is an Event ID from the list of: {{enum}} Defines the identity of the event used to trigger UE reporting (in case of event-triggered reporting). {{bibref|3GPP-TS.25.331|Section 10.3.7.14}} This attribute is readable, as it is highly dependent on how the FAP makes use of the event.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.InterRATEventIdentity";
+    }
+    leaf event-description {
+      type string {
+        length "0..256";
+      }
+      description
+        "A free-form description of the way the event instance is meant to be used. E.g. \"hand-out to GSM macrocell\", \"cancel hand-out preparation due to decreasing macrocell quality\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.EventDescription";
+    }
+    leaf filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the filter coefficient for inter-freq HO measurement when the UE is in Cell-DCH state. {{bibref|3GPP-TS.25.331|Section 10.3.7.9 and Section 10.3.7.18}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.FilterCoefficient";
+    }
+    leaf bsic-verification-required {
+      type boolean;
+      config false;
+      description
+        "Applicable only to GSM events. Indicates whether the BSIC verification is required or not for inter-RAT HO measurement when the UE is in Cell-DCH state. {{bibref|3GPP-TS.25.331|Section 10.3.7.29}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.BSICVerificationRequired";
+    }
+    leaf weighting-factor {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-RAT HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.WeightingFactor";
+    }
+    leaf hysteresis {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-RAT HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.Hysteresis";
+    }
+    leaf time-to-trigger {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-RAT HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.TimeToTrigger";
+    }
+    leaf threshold-own-system {
+      type int64;
+      config false;
+      description
+        "Applicable only to event 3a, otherwise not needed. Defines the reporting threshold for inter-RAT HO measurement when the UE is in Cell-DCH state. This is the \"Threshold own system\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.ThresholdOwnSystem";
+    }
+    leaf threshold-other-system {
+      type int64;
+      config false;
+      description
+        "Applicable to events 3a, 3b, 3c, otherwise not needed. Defines the reporting threshold for inter-RAT HO measurement when the UE is in Cell-DCH state. This is the \"Threshold other system\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.ThresholdOtherSystem";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.";
+  }
+
+  grouping umts-ran-ue-internal-meas-g {
+    description
+      "This object contains parameters relating to the UE internal measurement control parameters.";
+    leaf filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the filter coefficient for UE internal measurement. {{bibref|3GPP-TS.25.331|Section 10.3.7.9 and Section 10.3.7.79}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.FilterCoefficient";
+    }
+    leaf ue-tx-pwr-threshold-event6a {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Defines the threshold for UE transmit power above which Event 6a is reported. {{bibref|3GPP-TS.25.331|Section 10.3.7.80}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.UETxPwrThresholdEvent6a";
+    }
+    leaf time-to-trigger-event6a {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the period in {{units}} between detection of Event 6a and sending of Measurement Report. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.80}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.TimeToTriggerEvent6a";
+    }
+    leaf ue-tx-pwr-threshold-event6b {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Defines the threshold for UE transmit power above which Event 6b is reported. {{bibref|3GPP-TS.25.331|Section 10.3.7.80}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.UETxPwrThresholdEvent6b";
+    }
+    leaf time-to-trigger-event6b {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the period in {{units}} between detection of Event 6b and sending of Measurement Report. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.80}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.TimeToTriggerEvent6b";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.";
+  }
+
+  grouping umts-ran-rf-g {
+    description
+      "This object contains parameters relating to the RF configuration.";
+    leaf-list uarfcndl {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a DL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433|Section 9.2.1.65}} Self-configuration for UARFCN is controlled by {{param|.Capabilities.UMTS.SelfConfig.UARFCNConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.UARFCNSelfConfigEnable}} from an enabled perspective. If the FAP's self-configuration capability for UARFCN is available and enabled, this parameter MAY contain more than one item and the FAP is expected to select one from the list for {{param|UARFCNDLInUse}}. If the self-configuration capability is not available or not enabled, then this parameter SHOULD contain only a single item. The UARFCN values supplied to the list are derived based on the formula defined in {{bibref|3GPP-TS.25.104|Section 5.4.3}} The order of the UARFCN entries has no significance. The carrier spacing in FDD mode is fixed as defined in {{bibref|3GPP-TS.25.104}}. Therefore, the FAP can unambiguously derive the UL UARFCN value based on the selected DL UARFCN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.UARFCNDL";
+    }
+    leaf uarfcndl-in-use {
+      type uint64;
+      description
+        "The DL UARFCN being used by the FAP. Self-configuration for UARFCN is controlled by {{param|.Capabilities.UMTS.SelfConfig.UARFCNConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.UARFCNSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|UARFCNDL}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first value in {{param|UARFCNDL}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.UARFCNDLInUse";
+    }
+    leaf uarfcnul-in-use {
+      type uint64;
+      description
+        "The UL UARFCN being used by the FAP. The UL UARFCN that corresponds to {{param|UARFCNDLInUse}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.UARFCNULInUse";
+    }
+    leaf-list uarfcndl-to-protect {
+      type string;
+      config false;
+      max-elements "64";
+      description
+        "{{list}} Each item is a DL UARFCNs to be protected from adjacent channel interference. \"Adjacent channel\" in this context means offset from the FAP's UARFCN by 5MHz. {{bibref|3GPP-TS.25.104|Section 6.4.6}} If any of the items in the list are adjacent to the FAP's own DL channel, the FAP MUST take the Primary CPICH code power measured on these channels into account as part of its maximum transmit power self-configuration. The UARFCNs in the list can belong to any operator, allowing for protection of the FAP operator's own macro layer as well as that of other operators (only the latter is mandated by the {{bibref|3GPP-TS.25.104}} requirements). The list SHOULD take into account the ability of the FAP to self-configure its own DL UARFCN and so SHOULD include any channels (requiring protection) which can potentially be adjacent to the UARFCN selected by the FAP. For example, if only adjacent operator protection is required and the FAP has the ability to self-configure to any channel owned by its operator, this list would be populated with the UARFCNs immediately above and below the range of channels owned by the FAP operator. Adjacent channel protection can cause the FAP transmit power to be reduced down to as low as 8dBm. If {{empty}} then it indicates that there are no channels adjacent to the FAP that require protection, or that self-configuration of the FAP transmit power is not enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.UARFCNDLToProtect";
+    }
+    leaf-list primary-scrambling-code {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a Primary DL Scrambling Code used by the FDD mode cell with a numeric range between 0 and 511 inclusive. {{bibref|3GPP-TS.25.433|Section 9.2.2.34}} Self-configuration for PSC is controlled by {{param|.Capabilities.UMTS.SelfConfig.PrimaryScramblingCodeConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.PrimaryScramblingCodeSelfConfigEnable}} from an enabled perspective. If the FAP's self-configuration capability for {{param}} is available and enabled, this parameter MAY contain more than one item and the FAP is expected to select one from the list for {{param|PrimaryScramblingCodeInUse}}. If the self-configuration capability is not available or not enabled, then this parameter SHOULD contain only a single item. The multiplicity of the PSC values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. The following are examples of valid PSC string: :\"20\" ::(explicitly specifies a single PSC value) :\"20,30,40\" ::(specifies 3 possible PSC values to select from) \"20..40\" ::(specifies 21 possible values between 20 and 40, inclusive) \"20..40,50\" ::(specifies 22 possible values between 20 and 40 inclusive and a single value 50) The order of the items has no significance.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PrimaryScramblingCode";
+    }
+    leaf primary-scrambling-code-in-use {
+      type uint64;
+      description
+        "The PSC being used by the FAP. Self-configuration for PSC is controlled by {{param|.Capabilities.UMTS.SelfConfig.PrimaryScramblingCodeConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.PrimaryScramblingCodeSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|PrimaryScramblingCode}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first value in {{param|PrimaryScramblingCode}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PrimaryScramblingCodeInUse";
+    }
+    leaf maxfap-tx-power-expanded {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Defines the maximum transmission power allowed on the FAP, maximum value for the linear sum of the power of all downlink physical channels, that is allowed to be used in a cell. {{param}} is expressed as a range of allowed maximum power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<Pmax_low>..<Pmax_high>\". {{param}} identifies the limits between which the FAP can self-configure its maximum transmit power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.UMTS.SelfConfig.MaxFAPTxPowerExpandedConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.MaxFAPTxPowerExpandedSelfConfigEnable}} from an enabled perspective. <Pmax_low> and <Pmax_high> are measured in dBm and have a range of -30.0 to 20.0 incremented by 0.1 dB. {{bibref|3GPP-TS.32.642|Section 6.3.9}} {{bibref|3GPP-TS.25.104|Section 6.2.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxFAPTxPowerExpanded";
+    }
+    leaf maxfap-tx-power-in-use-expanded {
+      type int64;
+      units "dBm";
+      description
+        "The maximum transmission power measured in {{units}} currently used by the FAP. Actual values of the maximum transmission power are -30.0 {{units}} to 20.0 {{units}} in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the maximum transmission power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.UMTS.SelfConfig.MaxFAPTxPowerExpandedConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.MaxFAPTxPowerExpandedSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the range provided in {{param|MaxFAPTxPowerExpanded}}. If the self-configuration capability is not available or not enabled, then this parameter contains a value selected by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxFAPTxPowerInUseExpanded";
+    }
+    leaf max-ul-tx-power {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Defines the maximum transmission power level a UE can use on PRACH. {{param}} is expressed as a range of allowed maximum power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<Pmax_low>..<Pmax_high>\". {{param}} identifies the limits between which the FAP can self-configure its maximum transmit power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.UMTS.SelfConfig.MaxULTxPowerConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.MaxULTxPowerSelfConfigEnable}} from an enabled perspective. <Pmax_low> and <Pmax_high> are measured in dBm and have a range of -50 to 33 incremented by 1. {{bibref|3GPP-TS.25.331|Section 10.3.6.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxULTxPower";
+    }
+    leaf max-ul-tx-power-in-use {
+      type int64;
+      units "dBm";
+      description
+        "The maximum transmission power level a UE can use on PRACH. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.UMTS.SelfConfig.MaxULTxPowerConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.MaxULTxPowerSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the range provided in {{param|MaxULTxPower}}. If the self-configuration capability is not available or not enabled, then this parameter contains a value selected by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxULTxPowerInUse";
+    }
+    leaf pcpich-power {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "The value of the transmission power of the Primary Common PIlot CHannel (P-CPICH). The P-CPICH physical channel carries the common pilots of the cell. Parameter in SIB5. {{param}} is expressed as a range of allowed transmission power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<Pmax_low>..<Pmax_high>\". {{param}} identifies the limits between which the FAP can self-configure its transmission power. Self-configuration for transmission power is controlled by {{param|.Capabilities.UMTS.SelfConfig.PCPICHPowerConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.PCPICHPowerSelfConfigEnable}} from an enabled perspective. <Pmax_low> and <Pmax_high> are measured in dBm and have a range of -10.0 to 20.0 incremented by 0.1 dB. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.104|Section 6.2.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PCPICHPower";
+    }
+    leaf pcpich-power-in-use {
+      type int64;
+      units "dBm";
+      description
+        "The P-CPICH power measured in {{units}} currently used by the FAP. Actual values of the maximum transmission power are -10.0 {{units}} to 20.0 {{units}} in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the maximum transmission power. Self-configuration for transmission power is controlled by {{param|.Capabilities.UMTS.SelfConfig.PCPICHPowerConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.PCPICHPowerSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the range provided in {{param|PCPICHPower}}. If the self-configuration capability is not available or not enabled, then this parameter contains a value selected by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PCPICHPowerInUse";
+    }
+    leaf power-offset-pilot-dpdch {
+      type uint8 {
+        range "0..24";
+      }
+      units "dB";
+      config false;
+      description
+        "Defines the power offset between pilot channel and DPDCH. Actual values of the offset are 0.0 {{units}} to 6.0 {{units}} in steps of 0.25 {{units}}. The value of {{param}} divided by 4 yields the actual value of the offset. {{bibref|3GPP-TS.25.331|Section 10.3.6.18}} {{bibref|3GPP-TS.25.214|Section 5.2.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PowerOffsetPilotDPDCH";
+    }
+    leaf fap-coverage-target {
+      type uint8 {
+        range "50..150";
+      }
+      units "dB";
+      config false;
+      description
+        "Defines the target value measured in {{units}} for the range of the FAP's DL coverage, in terms of RF propagation loss. This value can be used by the FAP's self-configuration algorithms to help derive transmit power levels in the presence of co-channel and adjacent channel interference. {{bibref|3GPP-TS.25.967|Section 7.2.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.FAPCoverageTarget";
+    }
+    leaf fap-quality-target-ec-io {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the target value measured in dB for the downlink signal quality of the FAP in terms of CPICH Ec/Io, thereby clarifying the meaning of \"FAPCoverageTarget\". Actual values of the FAPQualityTargetEcIo are -20 dB to 0 dB in steps of 0.1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.FAPQualityTargetEcIo";
+    }
+    leaf psch-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the transmission power offset measured in {{units}} of the Primary SCH relative to the Primary CPICH power. Actual values of the transmission power offset are -35.0 {{units}} to 15.0 {{units}} in steps of 0.1 {{units}}. The value of {{param}} divided by 10 yields the actual value of the transmission power offset. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 9.1.24 and Section 9.2.1.21}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PSCHPower";
+    }
+    leaf ssch-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the transmission power offset measured in {{units}} of the Secondary SCH relative to the Primary CPICH power. Actual values of the transmission power offset are -35.0 {{units}} to 15.0 {{units}} in steps of 0.1 {{units}}. The value of {{param}} divided by 10 yields the actual value of the transmission power offset. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 9.1.24 and Section 9.2.1.21}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.SSCHPower";
+    }
+    leaf pich-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the maximum transmission power offset measured in {{units}} of the PICH channel relative to the Primary CPICH transmission power. {{bibref|3GPP-TS.32.642|Section 6.3.9}} {{bibref|3GPP-TS.25.433|Section 9.2.1.49A}} {{bibref|3GPP-TS.25.331|Section 10.3.6.50}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PICHPower";
+    }
+    leaf pch-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the transmission power offset measured in {{units}} of the PCH relative to the Primary CPICH power. Actual values of the transmission power offset are -35.0 {{units}} to 15.0 {{units}} in steps of 0.1 {{units}}. The value of {{param}} divided by 10 yields the actual value of the transmission power offset. {{bibref|3GPP-TS.32.642|Section 6.3.9}} {{bibref|3GPP-TS.25.433|Section 9.1.3.1 and Section 9.2.1.21}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PCHPower";
+    }
+    leaf fach-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the transmission power offset measured in {{units}} of the FACH relative to the Primary CPICH power. Actual values of the transmission power offset are -35.0 {{units}} to 15.0 {{units}} in steps of 0.1 {{units}}. The value of {{param}} divided by 10 yields the actual value of the transmission power offset. {{bibref|3GPP-TS.32.642|Section 6.3.9}} {{bibref|3GPP-TS.25.433|Section 9.1.6.1 and Section 9.2.1.21}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.FACHPower";
+    }
+    leaf bch-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the transmission power offset measured in {{units}} of the BCH relative to the Primary CPICH power. Actual values of the transmission power offset are -35.0 {{units}} to 15.0 {{units}} in steps of 0.1 {{units}}. The value of {{param}} divided by 10 yields the actual value of the transmission power offset. {{bibref|3GPP-TS.32.642|Section 9.3.11}} {{bibref|3GPP-TS.25.433|Section 9.1.24 and Section 9.2.1.21}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.BCHPower";
+    }
+    leaf aich-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the transmission power offset measured in {{units}} of one AICH relative to the Primary CPICH power. Parameter defined in SIB5 {{bibref|3GPP-TS.25.331|Section 10.3.6.3}}. Transmission power level of AICH, AP-AICH and CD/CA-ICH channels compared to CPICH. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 9.2.2.D}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.AICHPower";
+    }
+    leaf ctch-allocation-period {
+      type uint8 {
+        range "1..255";
+      }
+      config false;
+      description
+        "The value defines 'N' multiples of M(TTI) for CBS DRX calculations at the UE side.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.CTCHAllocationPeriod";
+    }
+    leaf cbs-frame-offset {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Value of CBS frame offset (CTCH) on DL FACH. Parameter in SIB5";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.CBSFrameOffset";
+    }
+    leaf max-tti {
+      type uint8 {
+        range "1..255";
+      }
+      config false;
+      description
+        "Defines the number of radio frames in the TTI of the FACH used for CTCH (MTTI).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxTTI";
+    }
+    leaf noise-rise-limit-lower-value {
+      type uint16 {
+        range "0..500";
+      }
+      config false;
+      description
+        "Defines the lower value of the Noise Rise Limit range that UMTS FAP is allowed to pick from. The value is measured in dB and has a range of 0.0 to 50.0 incremented by 0.1 dB. the value MUST not exceed the value of {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitUpperValue}} The Noise Rise Limit range identifies the limits between which the FAP can self-configure its uplink noise rise limit. Self-configuration for noise rise limit is controlled by {{param|.Capabilities.UMTS.SelfConfig.NoiseRiseLimitConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.NoiseRiseLimitConfigEnable}} from an enabled perspective.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.NoiseRiseLimitLowerValue";
+    }
+    leaf noise-rise-limit-upper-value {
+      type uint16 {
+        range "0..500";
+      }
+      config false;
+      description
+        "Defines the upper value of the Noise Rise Limit range that UMTS FAP is allowed to pick from. The value is measured in dB and has a range of 0.0 to 50.0 incremented by 0.1 dB. the value MUST not be below the value of {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitLowerValue}} NoiseRiseLimit identifies the limits between which the FAP can self-configure its uplink noise rise limit. Self-configuration for noise rise limit is controlled by {{param|.Capabilities.UMTS.SelfConfig.NoiseRiseLimitConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.NoiseRiseLimitConfigEnable}} from an enabled perspective.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.NoiseRiseLimitUpperValue";
+    }
+    leaf noise-rise-limit-in-use {
+      type uint16 {
+        range "0..500";
+      }
+      description
+        "Actual value of the Noise Rise Limit that the FAP uses. The value is measured in dB and has a range of 0.0 to 50.0 incremented by 0.1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.NoiseRiseLimitInUse";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.";
+  }
+
+  grouping umts-ran-neighbor-list-g {
+    description
+      "This object contains parameters relating to the neighbor list.";
+    leaf max-intra-freq-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.MaxIntraFreqCellEntries";
+    }
+    leaf max-inter-freq-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.MaxInterFreqCellEntries";
+    }
+    leaf intra-freq-cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCellNumberOfEntries";
+    }
+    leaf inter-freq-cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCellNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.";
+  }
+
+  grouping umts-ran-neighbor-list-intra-freq-cell-g {
+    description
+      "Table containing the intra-frequency cell list provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.MustInclude";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      config false;
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.PLMNID";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "RNC-ID of an intra-freq neighbor cell. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.RNCID";
+    }
+    leaf cid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Cell Identifier (C-id) that identifies a cell within an RNS. This Cell Identifier together with the controlling RNC (RNC-ID) constitutes the UTRAN Cell ID (UC-ID) and is used to identify a cell uniquely within UTRAN. C-ID is either 12-bit or 16-bit value. {{bibref|3GPP-TS.25.401|Section 6.1.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.CID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65533 | 65535";
+      }
+      config false;
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Routing Area Code (RAC). The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.RAC";
+    }
+    leaf ura {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "UTRAN Registration Area (URA) {{bibref|3GPP-TS.23.401}}. Indicates to the UE which {{param}} it shall use in case of overlapping URAs. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.URA";
+    }
+    leaf pcpich-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Primary CPICH scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.PCPICHScramblingCode";
+    }
+    leaf pcpich-tx-power {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Primary CPICH Tx power in {{units}}. Actual values of the power are -10.0 {{units}} to 50.0 {{units}} in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the power. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 2.2.33}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.PCPICHTxPower";
+    }
+    leaf collocated-inter-freq-cell {
+      type uint32 {
+        range "0..268435455";
+      }
+      config false;
+      description
+        "Provides identity of collocated inter-frequency Cell. Needed for pathloss estimation, in case the femto environment masks intra-frequency neighbor. Cell Identity. {{bibref|3GPP-TS.25.331|Section 10.3.2.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.CollocatedInterFreqCell";
+    }
+    leaf max-tx-power {
+      type int64;
+      units "0.1 dBm";
+      config false;
+      description
+        "Cell Max Tx Power. Parameter needed in HNB power calibration, for protection of neighbour cells. Actual values of the power are -30.0 dBm to 60.0 dBm in steps of 0.1 dB. The value of MaxTxPower divided by 10 yields the actual value of the power. C.f {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.104|Section 6.2.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.MaxTxPower";
+    }
+    leaf max-dpc-htx-power {
+      type int64;
+      units "0.1 dBm";
+      config false;
+      description
+        "Maximum DL DPCH Tx Power per UE configured in the cell (for CS UEs). Parameter may be used by FAP to protect the DL budget allocated to neighbouring UEs served by neighbour cells. C.f (max 10 dB below max Tx power) {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.104|Section 6.2.1}} Actual values of the power are -40.0 dBm to 50.0 dBm in steps of 0.1 dB. The value of MaxDPCHtxPower divided by 10 yields the actual value of the power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.MaxDPCHtxPower";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.";
+  }
+
+  grouping umts-ran-neighbor-list-inter-freq-cell-g {
+    description
+      "Table containing the inter-frequency cell list provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.MustInclude";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      config false;
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.PLMNID";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "RNC-ID of an intra-freq neighbor cell. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.RNCID";
+    }
+    leaf cid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Cell Identifier (C-id) that identifies a cell within an RNS. This Cell Identifier together with the controlling RNC (RNC-ID) constitutes the UTRAN Cell ID (UC-ID) and is used to identify a cell uniquely within UTRAN. C-ID is either 12-bit or 16-bit value. {{bibref|3GPP-TS.25.401|Section 6.1.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.CID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65533 | 65535";
+      }
+      config false;
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Routing Area Code (RAC). The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.RAC";
+    }
+    leaf ura {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "UTRAN Registration Area (URA) {{bibref|3GPP-TS.23.401}}. Indicates to the UE which {{param}} it shall use in case of overlapping URAs. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.URA";
+    }
+    leaf uarfcnul {
+      type uint16 {
+        range "0..16383";
+      }
+      config false;
+      description
+        "The UL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.UARFCNUL";
+    }
+    leaf uarfcndl {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "The DL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.UARFCNDL";
+    }
+    leaf pcpich-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Primary CPICH scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.PCPICHScramblingCode";
+    }
+    leaf pcpich-tx-power {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Primary CPICH Tx power in {{units}}. Actual values of the power are -10.0 {{units}} to 50.0 {{units}} in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the power. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 2.2.33}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.PCPICHTxPower";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.";
+  }
+
+  grouping umts-ran-neighbor-list-inter-rat-cell-g {
+    description
+      "The inter-RAT cell lists separated by technology. {{bibref|3GPP-TS.25.331|Section 10.3.7.23}}";
+    leaf max-gsm-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.MaxGSMEntries";
+    }
+    leaf gsm-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSMNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.";
+  }
+
+  grouping umts-ran-neighbor-list-inter-rat-cell-gsm-g {
+    description
+      "Table containing the inter-RAT cell list for GSM provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.MustInclude";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      config false;
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.PLMNID";
+    }
+    leaf lac {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.LAC";
+    }
+    leaf bsic {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "BSIC of the cell per {{bibref|3GPP-TS.23.003}}, consisting of: :Bit 7:6 - not used (\"00\") :Bit 5:3 - NCC (PLMN Color Code) :Bit 2:0 - BCC (BS color code) For example, if NCC is 7 and BCC is 2 you would have 00111010 (binary) or 0x3A (hex), and the value of this parameter would be 58.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BSIC";
+    }
+    leaf ci {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Cell ID of the cell per {{bibref|3GPP-TS.23.003|Section 4.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.CI";
+    }
+    leaf band-indicator {
+      type enumeration {
+        enum "gsm 850" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - GSM 850";
+        }
+        enum "gsm 900" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - GSM 900";
+        }
+        enum "dcs 1800" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - DCS 1800";
+        }
+        enum "pcs 1900" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - PCS 1900";
+        }
+      }
+      config false;
+      description
+        "Indicates how to interpret the BCCH ARFCN. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator";
+    }
+    leaf bccharfcn {
+      type uint16 {
+        range "0..1023";
+      }
+      description
+        "ARFCN of this cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BCCHARFCN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.";
+  }
+
+  grouping umts-ran-neighbor-list-in-use-g {
+    description
+      "This object contains parameters relating to the neighbor list used by the FAP based on its self-configuration capability and {{object|.CellConfig.UMTS.RAN.NeighborList.}} configuration of adding and excluding cells.";
+    leaf max-intra-freq-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.MaxIntraFreqCellEntries";
+    }
+    leaf max-inter-freq-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.MaxInterFreqCellEntries";
+    }
+    leaf intra-freq-cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCellNumberOfEntries";
+    }
+    leaf inter-freq-cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCellNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.";
+  }
+
+  grouping umts-ran-neighbor-list-in-use-intra-freq-cell-g {
+    description
+      "Table containing the intra-frequency cell list.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.PLMNID";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "RNC-ID of an intra-freq neighbor cell. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.RNCID";
+    }
+    leaf cid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "C-ID of the intra-freq neighbour cell {{bibref|3GPP-TS.25.401|Section 6.1.5}}. If {{param|RNCID}} is larger than 4095, then {{param}} will be 12 bits (i.e. a range of [0:4095]), else {{param}} is 16 bits long (i.e. range of [4096:65535]). This is needed to facilitate Femto to Macro handover. Used in {{bibref|3GPP-TS.25.413|Section 9.2.1.28}} as part of Target Cell ID.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.CID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65533 | 65535";
+      }
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "Routing Area Code (RAC). The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.RAC";
+    }
+    leaf ura {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "UTRAN Registration Area (URA) {{bibref|3GPP-TS.23.401}}. Indicates to the UE which {{param}} it shall use in case of overlapping URAs. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.URA";
+    }
+    leaf pcpich-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Primary CPICH scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.PCPICHScramblingCode";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.";
+  }
+
+  grouping umts-ran-neighbor-list-in-use-inter-freq-cell-g {
+    description
+      "Table containing the inter-frequency cell list.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.PLMNID";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "RNC-ID of an intra-freq neighbor cell. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.RNCID";
+    }
+    leaf cid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "C-ID of the intra-freq neighbour cell {{bibref|3GPP-TS.25.401|Section 6.1.5}}. If {{param|RNCID}} is larger than 4095, then {{param}} will be 12 bits (i.e. a range of [0:4095]), else {{param}} is 16 bits long (i.e. range of [4096:65535]). This is needed to facilitate Femto to Macro handover. Used in {{bibref|3GPP-TS.25.413|Section 9.2.1.28}} as part of Target Cell ID.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.CID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65533 | 65535";
+      }
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "Routing Area Code (RAC). The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.RAC";
+    }
+    leaf ura {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "UTRAN Registration Area (URA) {{bibref|3GPP-TS.23.401}}. Indicates to the UE which {{param}} it shall use in case of overlapping URAs. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.URA";
+    }
+    leaf uarfcnul {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "The UL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.UARFCNUL";
+    }
+    leaf uarfcndl {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "The DL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.UARFCNDL";
+    }
+    leaf pcpich-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Primary CPICH scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.PCPICHScramblingCode";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.";
+  }
+
+  grouping umts-ran-neighbor-list-in-use-inter-rat-cell-g {
+    description
+      "The inter-RAT cell lists separated by technology. {{bibref|3GPP-TS.25.331|Section 10.3.7.23}}";
+    leaf max-gsm-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.MaxGSMEntries";
+    }
+    leaf gsm-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSMNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.";
+  }
+
+  grouping umts-ran-neighbor-list-in-use-inter-rat-cell-gsm-g {
+    description
+      "Table containing the inter-RAT cell list for GSM.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.PLMNID";
+    }
+    leaf lac {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.LAC";
+    }
+    leaf bsic {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "BSIC of the cell per {{bibref|3GPP-TS.23.003}}, consisting of: :Bit 7:6 - not used (\"00\") :Bit 5:3 - NCC (PLMN Color Code) :Bit 2:0 - BCC (BS color code) For example, if NCC is 7 and BCC is 2 you would have 00111010 (binary) or 0x3A (hex), and the value of this parameter would be 58.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BSIC";
+    }
+    leaf ci {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Cell ID of the cell per {{bibref|3GPP-TS.23.003|Section 4.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.CI";
+    }
+    leaf band-indicator {
+      type enumeration {
+        enum "gsm 850" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - GSM 850";
+        }
+        enum "gsm 900" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - GSM 900";
+        }
+        enum "dcs 1800" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - DCS 1800";
+        }
+        enum "pcs 1900" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - PCS 1900";
+        }
+      }
+      description
+        "Indicates how to interpret the BCCH ARFCN. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator";
+    }
+    leaf bccharfcn {
+      type uint16 {
+        range "0..1023";
+      }
+      description
+        "ARFCN of this cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BCCHARFCN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.";
+  }
+
+  grouping umts-rab-g {
+    description
+      "This object contains parameters relating to Radio Access layers {{bibref|3GPP-TS.32.405}}";
+    leaf rab-succ-estab-cs {
+      type uint64;
+      description
+        "The number of successfully established RABs (with or without queueing) for CS domain.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABSuccEstabCS";
+    }
+    leaf rab-fail-estab-cs {
+      type uint64;
+      description
+        "The number of RAB establishment failures for CS domain.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABFailEstabCS";
+    }
+    leaf rab-succ-estab-ps {
+      type uint64;
+      description
+        "The number of successfully established RABs for PS domain.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABSuccEstabPS";
+    }
+    leaf rab-fail-estab-ps {
+      type uint64;
+      description
+        "The number of RABs failed to establish for PS domain.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABFailEstabPS";
+    }
+    leaf rabcs-setup-time-mean {
+      type uint64;
+      units "milliseconds";
+      description
+        "The mean time in {{units}} for a FAP to establish a RAB CS connection. This measurement is obtained by accumulating the time intervals for each successful RAB establishment between the receipt by the FAP of a RANAP \"RAB ASSIGNMENT REQUEST\" message to establish a RAB for CS domain, and the first corresponding (based on RAB ID) transmission by the FAP of a RANAP \"RAB ASSIGNMENT RESPONSE\" message for successfully established RABs over a granularity period (Sample Interval {{bibref|3GPP-TS.32.582|Section 6.3.2}}). This end value of the time will then be divided by the number of successfully established RABs observed in the granularity period to give the arithmetic mean. The accumulator SHALL be reinitialized at the beginning of each granularity period.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABCSSetupTimeMean";
+    }
+    leaf rabcs-setup-time-max {
+      type uint64;
+      units "milliseconds";
+      description
+        "The maximum time in {{units}} for a FAP to establish a RAB CS connection. This measurement is obtained by monitoring the time intervals for each successful RAB establishment between the receipt by the FAP of a RANAP \"RAB ASSIGNMENT REQUEST\" message to establish a RAB for CS domain, and the first corresponding (based on RAB ID) transmission by the FAP of a RANAP \"RAB ASSIGNMENT RESPONSE\" message for successfully established RABs. The high tide mark of this time will be stored in a gauge; the gauge SHALL be reinitialized at the beginning of each granularity period (Sample Interval {{bibref|3GPP-TS.32.582|Section 6.3.2}}).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABCSSetupTimeMax";
+    }
+    leaf rabps-setup-time-mean {
+      type uint64;
+      units "milliseconds";
+      description
+        "The mean time in {{units}} for a FAP to establish a RAB PS connection. This measurement is obtained by accumulating the time intervals for each successful RAB establishment between the receipt by the FAP of a RANAP \"RAB ASSIGNMENT REQUEST\" message to establish a RAB for PS domain, and the first corresponding (based on RAB ID) transmission by the FAP of a RANAP \"RAB ASSIGNMENT RESPONSE\" message for successfully established RABs over a granularity period (Sample Interval {{bibref|3GPP-TS.32.582|Section 6.3.2}}). This end value of the time will then be divided by the number of successfully established RABs observed in the granularity period to give the arithmetic mean. The accumulator SHALL be reinitialized at the beginning of each granularity period.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABPSSetupTimeMean";
+    }
+    leaf rabps-setup-time-max {
+      type uint64;
+      units "milliseconds";
+      description
+        "The maximum time in {{units}} for a FAP to establish a RAB PS connection. This measurement is obtained by monitoring the time intervals for each successful RAB establishment between the receipt by the FAP of a RANAP \"RAB ASSIGNMENT REQUEST\" message to establish a RAB for PS domain, and the first corresponding (based on RAB ID) transmission by the FAP of a RANAP \"RAB ASSIGNMENT RESPONSE\" message for successfully established RABs. The high tide mark of this time will be stored in a gauge; the gauge SHALL be reinitialized at the beginning of each granularity period (Sample Interval {{bibref|3GPP-TS.32.582|Section 6.3.2}}).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABPSSetupTimeMax";
+    }
+    leaf fail-ho {
+      type uint64;
+      description
+        "The number of failed Handovers.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.FailHO";
+    }
+    leaf succ-ho {
+      type uint64;
+      description
+        "The number of successful Handovers.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.SuccHO";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.";
+  }
+
+  grouping lte-g {
+    description
+      "This object contains parameters relating to configuring the LTE FAP.";
+    leaf tunnel-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.TunnelNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.";
+  }
+
+  grouping lte-tunnel-g {
+    description
+      "This object contains a table of all tunnel instances configured for the LTE FAP.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.Tunnel.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.Tunnel.{i}.Alias";
+    }
+    leaf tunnel-ref {
+      type string {
+        length "0..256";
+      }
+      description
+        "This is the reference to an IPsec tunnel instance used by the LTE FAP. For all root data models, which use the tunnel definition provided in {{bibref|TR-262}} (InternetGatewayDevice:1 {{bibref|TR-098}} and Device:1 {{bibref|TR-181i1}}) the {{param}} MUST point to a row in the 'FAP.Tunnel.IKESA.{i}.' table, defined in {{bibref|TR-262}}. If the root data model used is Device:2 {{bibref|TR-181i2}} than the {{param}} MUST point to IPsec tunnel instance defined in {{bibref|TR-181i2}}. If the referenced object is deleted, the parameter value MUST be set to an empty string. In case of a multiple-radio-technology FAP product, each radio technology can have its own tunnels or share common tunnels. In the former case, {{param}} can contain a unique instance number. In the latter case, {{param}} under all radio technologies can have the same instance number.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.Tunnel.{i}.TunnelRef";
+    }
+    leaf-list plmnid {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "{{list}} Optional list of PLMM IDs associated with the tunnel, which can be used for selecting the tunnel. Each PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.Tunnel.{i}.PLMNID";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.Tunnel.{i}.";
+  }
+
+  grouping lte-epc-g {
+    description
+      "This object contains parameters relating to configuring LTE EPC.";
+    leaf-list allowed-ciphering-algorithm-list {
+      type enumeration {
+        enum "eea0" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedCipheringAlgorithmList - EEA0";
+        }
+        enum "128-eea1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedCipheringAlgorithmList - 128-EEA1";
+        }
+        enum "128-eea2" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedCipheringAlgorithmList - 128-EEA2";
+        }
+      }
+      config false;
+      min-elements 1;
+      description
+        "{{list}} Each item is a ciphering algorithm allowed to be used for RRC and UP confidentiality protection as defined in {{bibref|3GPP-TS.33.401}}. If the list contains more than 1 item, it is in the order of the preferred algorithm to be used. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedCipheringAlgorithmList";
+    }
+    leaf-list allowed-integrity-protection-algorithm-list {
+      type enumeration {
+        enum "128-eia1" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedIntegrityProtectionAlgorithmList - 128-EIA1";
+        }
+        enum "128-eia2" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedIntegrityProtectionAlgorithmList - 128-EIA2";
+        }
+      }
+      config false;
+      min-elements 1;
+      description
+        "{{list}} Each item is a integrity protection algorithm allowed to be used for RRC as defined in {{bibref|3GPP-TS.33.401}}. If the list contains more than 1 item, it is in the order of the preferred algorithm to be used. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedIntegrityProtectionAlgorithmList";
+    }
+    leaf tac {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "TAC (Tracking Area Code) for LTE FAP as specified in SystemInformationBlockType1 message in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.TAC";
+    }
+    leaf eaid {
+      type uint32 {
+        range "0..16777216";
+      }
+      config false;
+      description
+        "Emergency Area ID that uniquely identifies the area of emergency for Earthquake and Tsunami Warning Services (ETWS). Corresponds to Emergency Area ID in {{bibref|3GPP-TS.36.413|Section 9.2.1.47}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.EAID";
+    }
+    leaf max-plmn-list-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.CellConfig.LTE.EPC.PLMNList.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.MaxPLMNListEntries";
+    }
+    leaf plmn-list-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNListNumberOfEntries";
+    }
+    leaf max-qo-s-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.EPC.QoS.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.MaxQoSEntries";
+    }
+    leaf qo-s-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoSNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.";
+  }
+
+  grouping lte-epc-plmn-list-g {
+    description
+      "This object contains parameters relating to list of PLMN identity specific to LTE EPC definition, called PLMN-IdentityList, as specified in SystemInformationBlockType1 message in {{bibref|3GPP-TS.36.331|Section 6.2.2}}. Each instance in this object is a PLMN-IdentityInfo which consists of plmn-Identity and cellReservedForOperatorUse IEs. At minimum 1 item MUST be present in this list, and maximum of 6 items.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.Alias";
+    }
+    leaf is-primary {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this {{param|PLMNID}} is a primary PLMN or not. If there is more than one instance in {{object|.CellConfig.LTE.EPC.PLMNList.{i}.}} table, then ACS MUST set this {{param}} set to {{true}} in only one instance.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.IsPrimary";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.PLMNID";
+    }
+    leaf cell-reserved-for-operator-use {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the cell is reserved for operator use or not. If {{true}}, it is reserved. If {{false}}, it is not reserved. Corresponds to \"reserved\" \"notReserved\" respectively as defined in PLMN-IdentityInfo in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.CellReservedForOperatorUse";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.";
+  }
+
+  grouping lte-epc-qo-s-g {
+    description
+      "This object contains parameters relating to configuring QoS in LTE EPC.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Alias";
+    }
+    leaf qci {
+      type uint8 {
+        range "1..20";
+      }
+      description
+        "QoS class identity as defined in {{bibref|3GPP-TS.23.203|Section 6.1.7.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.QCI";
+    }
+    leaf type {
+      type enumeration {
+        enum "gbr" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Type - GBR";
+        }
+        enum "non-gbr" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Type - Non-GBR";
+        }
+      }
+      config false;
+      description
+        "Defines the type of the QoS class as defined in {{bibref|3GPP-TS.23.203|Section 6.1.7.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Type";
+    }
+    leaf priority {
+      type uint8 {
+        range "1..20";
+      }
+      config false;
+      description
+        "Priority of the QoS class as defined in {{bibref|3GPP-TS.23.203|Section 6.1.7.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Priority";
+    }
+    leaf packet-delay-budget {
+      type uint16 {
+        range "50 | 100 | 150 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 1000 | 1500 | 2000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the Packet delay budget, specified in {{units}}, as defined in {{bibref|3GPP-TS.23.203|Section 6.1.7.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.PacketDelayBudget";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.";
+  }
+
+  grouping lte-ran-g {
+    description
+      "This object contains parameters relating to the LTE RAN level configuration.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.";
+  }
+
+  grouping lte-ran-common-g {
+    description
+      "This object contains parameters relating to the common configuration in LTE RAN.";
+    leaf cell-identity {
+      type uint32 {
+        range "0..268435455";
+      }
+      config false;
+      description
+        "Cell Identity as specified in {{bibref|3GPP-TS.36.331|Section 6.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Common.CellIdentity";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Common.";
+  }
+
+  grouping lte-ran-s1-ap-g {
+    description
+      "This object contains parameters relating to the S1AP configuration.";
+    leaf-list t-reloc-prep {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a maximum time for the Handover Preparation procedure in the source LTE FAP, specified in seconds, with a numeric range between 0 and 300 inclusive. Only values in multiple of 5 are valid; use of other values within the defined range MUST be rejected by the CPE. In case there is more than one item in the list, the first item contains the most preferred value. The value of {{param}} divided by 10 yields the actual value. The timer is started when the LTE FAP sends the HANDOVER REQUIRED message. Upon reception of the HANDOVER COMMAND message the LTE FAP shall stop the timer. Corresponds to parameter TS1RELOCprep defined in {{bibref|3GPP-TS.36.413|Section 8.4.1.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If the LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then the LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If the LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then the LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.S1AP.TRelocPrep";
+    }
+    leaf-list t-reloc-overall {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a maximum time for the protection of the overall handover procedure in the source LTE FAP, specified in seconds, with a numeric range between 0 and 300 inclusive. Only values in multiple of 5 are valid; use of other values within the defined range MUST be rejected by the CPE. In case there is more than one item in the list, the first item contains the most preferred value. The value of {{param}} divided by 10 yields the actual value. The timer is started reception of the HANDOVER COMMAND message. Corresponds to parameter TS1RELOCOverall defined in {{bibref|3GPP-TS.36.413|Section 8.4.1.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.S1AP.TRelocOverall";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.S1AP.";
+  }
+
+  grouping lte-ran-s1-u-g {
+    description
+      "This object contains parameters relating to the S1-U configuration.";
+    leaf gtpu-echo-interval {
+      type uint8 {
+        range "0 | 60..max";
+      }
+      units "seconds";
+      config false;
+      description
+        "Defines the interval in {{units}} between each GTP-U Echo Request that LTE FAP sends to the GTP-U peer, as specified in {{bibref|3GPP-TS.29.281|Section 7.2.1}}. If the value of {{param}} is equal to 0, then this functionality is supressed and thus LTE FAP does not send GTP-U Echo Request. If there is no GTP-U path in use, then no Echo Request is sent regardless of the value of {{param}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.S1U.GTPUEchoInterval";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.S1U.";
+  }
+
+  grouping lte-ran-rf-g {
+    description
+      "This object contains parameters relating to the RF, see {{bibref|3GPP-TS.32.592|Section 6.1.7.1}}.";
+    leaf-list earfcndl {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is an E-UTRA Absolute Radio Frequency Channel Number in the downlink direction. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter NDL specified in {{bibref|3GPP-TS.36.104|Table 5.7.3.1}}. If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.EARFCNDL";
+    }
+    leaf-list earfcnul {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is an E-UTRA Absolute Radio Frequency Channel Number in the uplink direction. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter NUL specified in {{bibref|3GPP-TS.36.104|Table 5.7.3.1}}. If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.EARFCNUL";
+    }
+    leaf freq-band-indicator {
+      type uint8 {
+        range "1..40";
+      }
+      config false;
+      description
+        "Frequency band indicator. Corresponds to parameter freqBandIndicator in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.FreqBandIndicator";
+    }
+    leaf-list dl-bandwidth {
+      type uint8 {
+        range "6 | 15 | 25 | 50 | 75 | 100";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a downlink transmission bandwidth, specified in number of Resource Blocks. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter dl_Bandwidth in MIB (Master Information Block) in {{bibref|3GPP-TS.36.331|Section 6.2.2}}. and to parameter NRB in {{bibref|3GPP-TS.36.101|Table 5.6-1}}. If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.DLBandwidth";
+    }
+    leaf-list ul-bandwidth {
+      type uint8 {
+        range "6 | 15 | 25 | 50 | 75 | 100";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is an uplink transmission bandwidth, specified in number of Resource Blocks. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter ul_Bandwidth in SIB2 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}. and to parameter NRB in {{bibref|3GPP-TS.36.101|Table 5.6-1}}. If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.ULBandwidth";
+    }
+    leaf-list reference-signal-power {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a downlink reference-signal transmit power, specified in dBm, with a numeric range between -60 and 50 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Defined as the linear average over the power contributions (in W) of all resource elements that carry cell-specific reference signals within the operating system bandwidth. Corresponds to parameter referenceSignalPower in PDSCH-Config IE in {{bibref|3GPP-TS.36.331|Section 6.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.ReferenceSignalPower";
+    }
+    leaf-list phy-cell-id {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a physical cell ID with a numeric range between 0 and 503 inclusive. Represents the list of physical cell identities LTE FAP to choose from. In case there is more than one item in the list, the first item contains the most preferred value. As specified in {{bibref|3GPP-TS.36.211|Section 6.11}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.PhyCellID";
+    }
+    leaf-list psch-power-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a power offset, specified in dB, of the Primary Synchronization Channel with respect to the ReferenceSignalPower, with a numeric range between -350 and 150 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of {{param}} divided by 10 yields the actual value. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.PSCHPowerOffset";
+    }
+    leaf-list ssch-power-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a power offset, specified in dB, of the Secondary Synchronization Channel with respect to the ReferenceSignalPower, with a numeric range between -350 and 150 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of {{param}} divided by 10 yields the actual value. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.SSCHPowerOffset";
+    }
+    leaf-list pbch-power-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a power offset, specified in dB, of the Physical Broadcast Channel with respect to the ReferenceSignalPower, with a numeric range between -350 and 150 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of {{param}} divided by 10 yields the actual value. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.PBCHPowerOffset";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.";
+  }
+
+  grouping lte-ran-phy-g {
+    description
+      "This object contains parameters relating to the physical layer level configuration.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.";
+  }
+
+  grouping lte-ran-phy-antenna-info-g {
+    description
+      "This object contains parameters relating to the antenna configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.1}}).";
+    leaf antenna-ports-count {
+      type uint8 {
+        range "1 | 2 | 4";
+      }
+      description
+        "Defines the number of cell specific antenna ports according to {{bibref|3GPP-TS.36.211|Section 6.2.1}}. A UE in IDLE mode acquires the information about the number of transmit antenna ports according to {{bibref|3GPP-TS.36.212|Section 5.3.1.1}}. Corresponds to antennaPortsCount IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.AntennaInfo.AntennaPortsCount";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.AntennaInfo.";
+  }
+
+  grouping lte-ran-phy-pdsch-g {
+    description
+      "This object contains parameters relating to the PDSCH (Physical Downlink Shared Channel) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.2}}).";
+    leaf-list pb {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a Eb/Ea value with a numeric range between 0 and 3 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of this parameter is the same for all UEs in the cell. Eb repsents EPRE of PDSCH REs type B, i.e. REs in OFDM symbols that include reference symbols, as specified in {{bibref|3GPP-TS.36.213|Section 5.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PDSCH.Pb";
+    }
+    leaf-list pa {
+      type int64;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a Ea/Ers value. In case there is more than one item in the list, the first item contains the most preferred value. Ea represents EPRE of PDSCH REs type A, i.e. REs in OFDM symbols that do not include reference symbols. Ers represents EPRE of reference symbols REs. Specified in {{bibref|3GPP-TS.36.213|Section 5.2}}. Actual values of range are -6.00 to 3.00dB. The value of each item in {{param}} divided by 100 yields the actual value. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PDSCH.Pa";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PDSCH.";
+  }
+
+  grouping lte-ran-phy-srs-g {
+    description
+      "This object contains parameters relating to the UL SRS (Sounding Reference Signal) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.3}}).";
+    leaf srs-enabled {
+      type boolean;
+      config false;
+      description
+        "Indicates whether UL SRS (Sounding RS) is enabled or not. If {{true}}, UL Sounding RS is enabled. If {{false}}, UL Sounding RS is disabled. Corresponds to SoundingRS-UL-ConfigCommonIE defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.SRSEnabled";
+    }
+    leaf-list srs-bandwidth-config {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a index into tables of cell specific SRS Bandwidth Configuration, with a numeric range between 0 and 7 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. SRS Bandwidth Configuration tables are specified in {{bibref|3GPP-TS.36.211|Table 5.5.3.2-1, 5.5.3.2-2, 5.5.3.2-3 and 5.5.3.2– 4}}. Corresponds to srs-BandwidthConfig IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.SRSBandwidthConfig";
+    }
+    leaf srs-max-up-pts {
+      type boolean;
+      config false;
+      description
+        "Defines whether reconfiguration of SRS applies to UpPTS or not. If {{true}}, SRS applies to UpPTS. If {{false}}, SRS does not apply to UpPTS. Corresponds to srs-MaxUpPts specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and srsMaxUpPts specified in {{bibref|3GPP-TS.36.211|Section 5.5.3.2}}. This parameter is applicable to TDD mode only.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.SRSMaxUpPTS";
+    }
+    leaf ack-nack-srs-simultaneous-transmission {
+      type boolean;
+      config false;
+      description
+        "Defines whether a UE can simultaneously transmit SRS and HARQ ACK/NACK or not. If {{true}}, simultaneous transmission is allowed. If {{false}}, simultaneous transmission is not allowed. Corresponds to ackNackSRS-SimultaneousTransmission specfied in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and Simultaneous-AN-and-SRS specified in {{bibref|3GPP-TS.36.213|Section 8.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.AckNackSRSSimultaneousTransmission";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.";
+  }
+
+  grouping lte-ran-phy-prach-g {
+    description
+      "This object contains parameters relating to the PRACH (Physical Random Access Channel) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.4}}).";
+    leaf-list root-sequence-index {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a Logical root sequence index with a numeric range between 0 and 837 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Logical root sequence index is used to determine 64 physical RACH preamble sequences available in the cell. Corresponds to RACH_ROOT_SEQUENCE parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and {{bibref|3GPP-TS.36.211|Section 5.7.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.RootSequenceIndex";
+    }
+    leaf-list configuration-index {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is an index to the table defining PRACH resources within the frame with a numeric range between 0 and 63 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to PRACH-Configuration-Index parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and {{bibref|3GPP-TS.36.211|Section 5.7.1}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.ConfigurationIndex";
+    }
+    leaf high-speed-flag {
+      type boolean;
+      config false;
+      description
+        "Indicates whether restricted set or unrestricted set of preambles is used. If {{true}}, indicates restricted set. If {{false}}, indicates unrestricted set. Corresponds to highSpeedFlag parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and high-speed-flag parameter defined in {{bibref|3GPP-TS.36.211|Section 5.7.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.HighSpeedFlag";
+    }
+    leaf-list zero-correlation-zone-config {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a value used for preamble sequence generation with a numeric range between 0 and 15 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Each item corresponds to zeroCorrelationZoneConfig parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and to NCS parameter defined in {{bibref|3GPP-TS.36.211|Section 5.7.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.ZeroCorrelationZoneConfig";
+    }
+    leaf-list freq-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item represents the first available physical resource block number for PRACH. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to prach-FreqOffset parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and nPRBoffsetRA parameter defined {{bibref|3GPP-TS.36.211|Section 5.7.1}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.FreqOffset";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.";
+  }
+
+  grouping lte-ran-phy-pucch-g {
+    description
+      "This object contains parameters relating to the PUCCH (Physical Uplink Control Channel) configuration. (see {{bibref|3GPP-TS.32.592|Section 6.1.1.5}})";
+    leaf delta-pucch-shift {
+      type enumeration {
+        enum "ds1" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.DeltaPUCCHShift - ds1";
+        }
+        enum "ds2" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.DeltaPUCCHShift - ds2";
+        }
+        enum "ds3" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.DeltaPUCCHShift - ds3";
+        }
+      }
+      config false;
+      description
+        "Defines the cyclic shift used for PUCCH formats 1/1a/1b in a resource block used for a mix of formats 1/1a/1b and 2/2a/2b. It is an integer multiple of deltaPUCCHShift within the range of {0, 1, ., 7} . Corresponds to deltaPUCCH-Shift parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and Delta-shiftPUCCH parameter defined {{bibref|3GPP-TS.36.211|Section 5.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.DeltaPUCCHShift";
+    }
+    leaf-list nrbcqi {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a value that defines the bandwidth in terms of resource blocks available for use by PUCCH formats 2/2a/2b transmission in each slot, with a numeric range between 0 and 98 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to nRB-CQI parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and NRB(2) parameter defined {{bibref|3GPP-TS.36.211|Section 5.4}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive.If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.NRBCQI";
+    }
+    leaf ncsan {
+      type uint8 {
+        range "0..7";
+      }
+      description
+        "Defines the number of cyclic shift used for PUCCH formats 1/1a/1b in a resource block used for a mix of formats 1/1a/1b and 2/2a/2b. The value is an integer multiple of deltaPUCCHShift within the range of {0, 1, ., 7}. Corresponds to nCS-AN parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and NRB(1) parameter defined {{bibref|3GPP-TS.36.211|Section 5.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.NCSAN";
+    }
+    leaf-list n1-pucchan {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a value that determines resources used for transmission of PUCCH format 1/1a/1b and 2/2a/2b, with a numeric range between 0 and 2047 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to n1PUCCH-AN parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and NPUCCH(1) parameter defined {{bibref|3GPP-TS.36.213|Section 10.1}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.N1PUCCHAN";
+    }
+    leaf-list cqipucch-resource-index {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a value that indicates the position of PUCCH, with a numeric range between 0 and 1185 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. . Corresponds to the cqi-PUCCH-ResourceIndex IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}. and to parameter nPUCCH(2) specified in {{bibref|3GPP-TS.36.213|Section 7.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.CQIPUCCHResourceIndex";
+    }
+    leaf k {
+      type uint8 {
+        range "1..4";
+      }
+      units "Resource Blocks";
+      description
+        "Sub-band size for sub-band reporting mode expressed in units of physical {{units}}, see {{bibref|3GPP-TS.36.213|Section 7.2.2}}. This parameter corresponds to the K IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.K";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.";
+  }
+
+  grouping lte-ran-phy-pusch-g {
+    description
+      "This object contains parameters relating to the PUSCH (Physical Uplink Shared Channel) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.6}}).";
+    leaf nsb {
+      type uint8 {
+        range "1..4";
+      }
+      config false;
+      description
+        "Defines the number of sub-bands. This parameter corresponds to n-SB parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and NSB parameter specified in {{bibref|3GPP-TS.36.211|Section 5.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.NSB";
+    }
+    leaf hopping-mode {
+      type enumeration {
+        enum "inter-sub-frame" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.HoppingMode - InterSubFrame";
+        }
+        enum "intra-and-inter-sub-frame" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.HoppingMode - IntraAndInterSubFrame";
+        }
+      }
+      config false;
+      description
+        "Indicates if hopping is \"inter-subframe\" or \"intra and inter-subframe\". Corresponds to hoppingMode parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and Hopping-mode parameter specified in {{bibref|3GPP-TS.36.211|Section 5.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.HoppingMode";
+    }
+    leaf-list hopping-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a value to compute the set of physical resource blocks to be used for transmission on PUSCH if uplink frequency hopping mode is enabled, with a numeric range between 0 and 98 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. This parameter corresponds to pusch-HoppingOffset parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and NRBHO parameter specified in {{bibref|3GPP-TS.36.211|Section 5.3.4}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.HoppingOffset";
+    }
+    leaf enable64-qam {
+      type boolean;
+      description
+        "Indicates whether 64QAM is allowed or not. If {{true}}, 64QAM is allowed. If {{false}}, 64QAM is not allowed. Corresponds to enable64QAM parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.Enable64QAM";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.";
+  }
+
+  grouping lte-ran-phy-pusch-ulrs-g {
+    description
+      "This object contains parameters relating to the ULRS (Uplink Reference Signal) of PUSCH (Physical Uplink Shared Channel) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.6.1}}).";
+    leaf group-hopping-enabled {
+      type boolean;
+      config false;
+      description
+        "Indicates whether group hopping is enabled or not. If {{true}}, group hopping is enabled. If {{false}}, group hopping is not enabled. Corresponds to groupHoppingEnabled parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.and in {{bibref|3GPP-TS.36.211|Section 5.5.1.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.GroupHoppingEnabled";
+    }
+    leaf group-assignment-pusch {
+      type uint8 {
+        range "0..29";
+      }
+      description
+        "Corresponds to parameter groupAssignmentPUSCH specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.GroupAssignmentPUSCH";
+    }
+    leaf sequence-hopping-enabled {
+      type boolean;
+      config false;
+      description
+        "Indicates whether sequence hopping is enabled or not. If {{true}}, sequence hopping is enabled. If {{false}}, sequence hopping is not enabled. Corresponds to sequenceHoppingEnabled parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.and in {{bibref|3GPP-TS.36.211|Section 5.5.1.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.SequenceHoppingEnabled";
+    }
+    leaf cyclic-shift {
+      type uint8 {
+        range "0..7";
+      }
+      description
+        "Corresponds to parameter cyclcShift specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.CyclicShift";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.";
+  }
+
+  grouping lte-ran-phy-ul-power-control-g {
+    description
+      "This object contains parameters relating to the uplink power control configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.7}}).";
+    leaf-list p0-nominal-pusch {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a value to compute the UL UE transmit power for transmission on PUSCH for semi-persistant grants, with a numeric range between -126 and 24 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to p0-NominalPUSCH parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and PO_NOMINAL_PUSCH(0) parameter specified in {{bibref|3GPP-TS.36.211|Section 5.1.1.1}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.P0NominalPUSCH";
+    }
+    leaf-list alpha {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a value used to compute the UL UE transmit power for transmission on PUSCH, from the list of 0, 4, 5, 6, 7, 8, 9, 100. In case there is more than one item in the list, the first item contains the most preferred value. Actual values of range are from 0.00 to 1.00. The value of {{param}} divided by 100 yields the actual value. Corresponds to alpha parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and to α parameter specified in {{bibref|3GPP-TS.36.211|Section 5.1.1.1}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.Alpha";
+    }
+    leaf-list p0-nominal-pucch {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a value to compute the UL UE transmit power for transmission on PUCCH, with a numeric range between -126 and 24 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to p0-NominalPUCCH parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and PO_NOMINAL_PUCCH parameter specified in {{bibref|3GPP-TS.36.211|Section 5.1.2.1}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.P0NominalPUCCH";
+    }
+    leaf delta-fpucch-format1 {
+      type int64;
+      units "dB";
+      description
+        "Defines deltaF-PUCCH-Format1 to derive the UE transmit power. Corresponds to parameter ?F_PUCCH(1) in {{units}} as specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.213|Section 5.1.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat1";
+    }
+    leaf delta-fpucch-format1b {
+      type uint8 {
+        range "1 | 3 | 5";
+      }
+      units "dB";
+      description
+        "Defines deltaF-PUCCH-Format1b to derive the UE transmit power. Corresponds to parameter ?F_PUCCH(1b) in {{units}} dB as specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.213|Section 5.1.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat1b";
+    }
+    leaf delta-fpucch-format2 {
+      type int64;
+      units "dB";
+      description
+        "Defines deltaF-PUCCH-Format2 to derive the UE transmit power. Corresponds to parameter ?F_PUCCH(2) in {{units}} as specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.213|Section 5.1.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat2";
+    }
+    leaf delta-fpucch-format2a {
+      type int64;
+      units "dB";
+      description
+        "Defines deltaF-PUCCH-Format2a to derive the UE transmit power. Corresponds to parameter ?F_PUCCH(2a) in {{units}} as specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.213|Section 5.1.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat2a";
+    }
+    leaf delta-fpucch-format2b {
+      type int64;
+      units "dB";
+      description
+        "Defines deltaF-PUCCH-Format2b to derive the UE transmit power. Corresponds to parameter ?F_PUCCH(2b) in {{units}} as specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.213|Section 5.1.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat2b";
+    }
+    leaf delta-preamble-msg3 {
+      type int64;
+      units "dB";
+      description
+        "Defines the parameter in {{units}} used to compute the UL UE transmit power for transmission of random access response grant. This parameter corresponds to deltaPreambleMsg3 parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and to ?PREAMBLE_Msg3 parameter specified in {{bibref|3GPP-TS.36.213|Section 5.1.1.1}}. Actual value is 2x the value of this parameter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaPreambleMsg3";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.";
+  }
+
+  grouping lte-ran-phy-mbsfn-g {
+    description
+      "This object contains parameters relating to the MBSFN (Multimedia Broadcast multicast service Single Frequency Network) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.8}}).";
+    leaf neigh-cell-config {
+      type uint8 {
+        range "0..3";
+      }
+      config false;
+      description
+        "Defines the information related to MBSFN and TDD UL/DL configuration of neighbour cells. Corresponds to NeighCellConfig IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.6}}. Value 0: Not all neighbour cells have the same MBSFN sub-frame allocation as serving cell. Value 1: No MBSFN sub-frames are present in all neighbour cells. Value 2: The MBSFN sub-frame allocations of all neighbour cells are identical to or subsets of that in the serving cell. Value 3: Different UL/DL allocation in neighbouring cells for TDD compared to the serving cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.NeighCellConfig";
+    }
+    leaf max-sf-config-list-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.MaxSFConfigListEntries";
+    }
+    leaf sf-config-list-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigListNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.";
+  }
+
+  grouping lte-ran-phy-mbsfn-sf-config-list-g {
+    description
+      "This object contains parameters relating to the sub-frame that are reserved for MBSFN (Multimedia Broadcast multicast service Single Frequency Network) in downlink direction. For FDD mode, only one entry can exist in this table. For TDD mode, at most one entry can exist with a given value of stratumID (see {{bibref|3GPP-TS.32.592|Section 6.1.1.8}}).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.Alias";
+    }
+    leaf sync-stratum-id {
+      type uint8 {
+        range "1..8";
+      }
+      config false;
+      description
+        "This parameter is applicable to TDD mode only. Defines the synchronization stratum level to which the MBSFN configuration applies.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.SyncStratumID";
+    }
+    leaf radio-frame-allocation-period {
+      type uint8 {
+        range "1..2 | 4 | 8 | 16 | 32";
+      }
+      description
+        "Defines the period where MBSFN sub-frames occur in the radio frames. Radio frames contain MBSFN sub-frame when the following condition is met: ((SFN mod {{param}}) = {{param|RadioframeAllocationOffset}}). The value of 1 and 2 are only meaningful when the value of {{param|RadioFrameAllocationSize}} parameter is 1. Corresponds to radioFrameAllocationPeriod IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.RadioFrameAllocationPeriod";
+    }
+    leaf radioframe-allocation-offset {
+      type uint8 {
+        range "0..7";
+      }
+      description
+        "Defines the offset where MBSFN sub-frames occur in the radio frames. Radio frames contain MBSFN sub-frame when the following condition is met: ((SFN mod {{param|RadioFrameAllocationPeriod}}) = {{param}}). Corresponds to radioFrameAllocationOffset IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.RadioframeAllocationOffset";
+    }
+    leaf radio-frame-allocation-size {
+      type uint8 {
+        range "1 | 4";
+      }
+      description
+        "Defines the number of connsecutive frames that the MBSFN allocation pertains to defined by the combination of {{param|RadioFrameAllocationPeriod}} and {{param|RadioframeAllocationOffset}} parameters.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.RadioFrameAllocationSize";
+    }
+    leaf-list sub-frame-allocations {
+      type uint8 {
+        range "0 | 1";
+      }
+      config false;
+      max-elements "64";
+      description
+        "{{list}} The value of \"1\" indicates the position of sub-frames that is allocated to MBSFN within the radio frame. First item defines the MBSFN allocation for sub-frame #1, second item for #2, third item for #3, fourth item for #6, fifth item for #7, sixth item for #8. If the value of {{param|RadioFrameAllocationSize}} is 4, then this pattern repeats in the sequence of the four radio frames. The actual size of this parameter depends on the value of {{param|RadioFrameAllocationSize}} parameter. If the value of {{param|RadioFrameAllocationSize}} is 1, then the size of this parameter is 6; if the size {{param|RadioFrameAllocationSize}} is 4, then the size of this parameter is 24. Corresponds to subframeAllocation IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.SubFrameAllocations";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.";
+  }
+
+  grouping lte-ran-phy-prs-g {
+    description
+      "This object contains parameters relating to the PRS (Positioning Reference Signal) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.9}}).";
+    leaf num-prs-resource-blocks {
+      type uint64;
+      units "Resource Blocks";
+      config false;
+      description
+        "Defines the number of RBs ({{units}}) used for PRS. Corresponds to the parameter NRBPRS in {{bibref|3GPP-TS.36.211|Section 6.10.4.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRS.NumPRSResourceBlocks";
+    }
+    leaf prs-configuration-index {
+      type uint16 {
+        range "0..4095";
+      }
+      config false;
+      description
+        "Corresponds to the PRS configuration index defined as parameter IPRS in {{bibref|3GPP-TS.36.211|Section 6.10.4.3 and Table 6.10.4.3.-1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRS.PRSConfigurationIndex";
+    }
+    leaf num-consecutive-prs-subfames {
+      type uint8 {
+        range "1..2 | 4 | 6";
+      }
+      config false;
+      description
+        "Defines the number of consecutive positioning sub-frames. Corresponds to the parameter NPRS in {{bibref|3GPP-TS.36.211|Section 6.10.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRS.NumConsecutivePRSSubfames";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRS.";
+  }
+
+  grouping lte-ran-phy-tdd-frame-g {
+    description
+      "This object is applicable to TDD mode only. This object contains parameters relating to the TDD frame structure configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.10}}).";
+    leaf sub-frame-assignment {
+      type uint8 {
+        range "0..6";
+      }
+      config false;
+      description
+        "Defines the DL/UL sub-frame configuration. Corresponds to subframAssignment specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and {{bibref|3GPP-TS.36.211|Table 4.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.TDDFrame.SubFrameAssignment";
+    }
+    leaf special-subframe-patterns {
+      type uint8 {
+        range "0..8";
+      }
+      config false;
+      description
+        "Defines the configuration of the special sub-frame that contains the guard period between the downlink and uplink transmissions. Corresponds to the specialSubframePatterns specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and {{bibref|3GPP-TS.36.211|Table 4.2.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.TDDFrame.SpecialSubframePatterns";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.TDDFrame.";
+  }
+
+  grouping lte-ran-mac-g {
+    description
+      "This object contains parameters relating to the MAC (Medium Access Control) configuration.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.";
+  }
+
+  grouping lte-ran-mac-rach-g {
+    description
+      "This object contains parameters relating to the RACH (Random Access Channel) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.2.1}}).";
+    leaf-list number-of-ra-preambles {
+      type uint8 {
+        range "4..64";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a number of non-dedicated random access preambles. Only values in multiple of 4 are valid (i.e. 4, 8, 12, 16,...64); use of other values within the defined range MUST be rejected by the CPE. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter numberOfRA-Preambles specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.1}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.NumberOfRaPreambles";
+    }
+    leaf-list size-of-ra-group-a {
+      type uint8 {
+        range "4..60";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a number of non-dedicated random access preambles in Random Acces Preambles group A. Only values in multiple of 4 are valid (i.e. 4, 8, 12, 16,...60); use of other values within the defined range MUST be rejected by the CPE. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter sizeOfRA-PreamblesGroupA specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.1}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.SizeOfRaGroupA";
+    }
+    leaf-list message-size-group-a {
+      type uint16 {
+        range "56 | 144 | 208 | 256";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a threshold for preamble selection, specified in bits. In case there is more than one item in the list, the first item contains the most preferred value. Defined in {{bibref|3GPP-TS.36.321|Section 5.1.2}}. Corresponds to parameter messageSizeGroupA specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.MessageSizeGroupA";
+    }
+    leaf-list message-power-offset-group-b {
+      type int64;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a threshold for preamble selection, specified in dB. In case there is more than one item in the list, the first item contains the most preferred value. Defined in {{bibref|3GPP-TS.36.321|Section 5.1.2}}. Corresponds to parameter messagePowerOffsetGroupB specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}. Value of -1 indicates \"minusinfinity.\" If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.MessagePowerOffsetGroupB";
+    }
+    leaf-list power-ramping-step {
+      type uint8 {
+        range "0 | 2 | 4 | 6";
+      }
+      config false;
+      min-elements 1;
+      max-elements "16";
+      description
+        "{{list}} Each item is a power increase factor between subsequent random access preamble transmissions, specified in dB. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter powerRampingStep specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.PowerRampingStep";
+    }
+    leaf-list preamble-initial-received-target-power {
+      type int64;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a value used as the baseline for computation for random access transmission power, specified in dBm. Also used as a parameter in the criteria for preamble selection. Only even values are valid (i.e. -120, -118, -116,...-90); use of other values within the defined range MUST be rejected by the CPE. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter preambleInitialReceivedTargetPower specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.2}}. and section 5.1.3. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.PreambleInitialReceivedTargetPower";
+    }
+    leaf-list preamble-trans-max {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a maximum number of random access preamble transmissions, from the list of 3, 4, 5, 6, 7, 8, 10, 20, 50, 100, 200. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter preambleTransMax specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.4 and section 5.1.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.PreambleTransMax";
+    }
+    leaf-list response-window-size {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a duration of the random access response window, specified in sub-frames, with a numeric range between 2 and 10 inclusive (except value of 9). In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter ra-ResponseWindowSize specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.4}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.ResponseWindowSize";
+    }
+    leaf-list contention-resolution-timer {
+      type uint8 {
+        range "8..64";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a contention resolution timer, specified in sub-frames. Only values multiple of 8 are valid (i.e. 8, 16, 24,...64); use of other values within the defined range MUST be rejected by the CPE. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter mac-ContentionResolutionTimer specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.5}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.ContentionResolutionTimer";
+    }
+    leaf-list max-harq-msg3-tx {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a maximum number of Msg3 HARQ transmissions by RRC, with a numeric range between 1 and 8 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter maxHARQ-Msg3Tx specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.4.2.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.MaxHARQMsg3Tx";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.";
+  }
+
+  grouping lte-ran-mac-drx-g {
+    description
+      "This object contains parameters relating to the DRX (Discontinuous Reception) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.2.2}}).";
+    leaf drx-enabled {
+      type boolean;
+      config false;
+      description
+        "Specifies whether DRX operation is enabled or not. If {{true}}, DRX operation is enabled. If {{false}}, DRX operation is not enabled. Corresponds to drx-Configuration IE defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXEnabled";
+    }
+    leaf-list on-duration-timer {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is the DRX cycle during which UE actively monitors PDCCH, specified in number of PDCCH sub-frames, from the list of 1, 2, 3, 4, 5, 6, 8, 10, 20, 30, 40, 50, 60, 80, 100, 200. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter onDurationTimer specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.OnDurationTimer";
+    }
+    leaf-list drx-inactivity-timer {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item defines the number of inactive consecutive PDCCH sub-frame(s) that will activate short DRX cycle, specified in number of PDCCH sub-frames, from the list of 1, 2, 3, 4, 5, 6, 8, 10, 20, 30, 40, 50, 60, 80, 100, 200, 300, 500, 750, 1280, 1920, 2560. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter drx-InactivityTimer specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXInactivityTimer";
+    }
+    leaf-list drx-retransmission-timer {
+      type uint8 {
+        range "1 | 2 | 4 | 6 | 8 | 16 | 24 | 33";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item defines the maximum number of consecutive PDCCH sub-frame(s) UE MUST remain active expecting a DL retransmission, specified in number of PDCCH sub-frames. In case there is more than one item in the list, the first item contains the most preferred value. The timer is started when a HARQ RTT Timer expires and the data in the soft buffer of the corresponding HARQ process was not successfully decoded. There is one timer for each active HARQ process. Corresponds to parameter drx-RetransmissionTimer specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.7}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXRetransmissionTimer";
+    }
+    leaf-list long-drx-cycle {
+      type uint16 {
+        range "10 | 20 | 32 | 40 | 64 | 80 | 128 | 160 | 256 | 320 | 512 | 640 | 1024 | 1280 | 2048 | 2560";
+      }
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is long DRX Cycle value, specified in number of sub-frames. In case there is more than one item in the list, the first item contains the most preferred value. If shortDRX-Cycle is configured, this value MUST be a multiple of the {{param|ShortDRXCycle}} value. Corresponds to longDRX-Cycle parameter specified in {{bibref|3GPP-TS.36.321|Section 5.7}} and longDRX-CycleStartOffset specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.LongDRXCycle";
+    }
+    leaf-list drx-start-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item defines the starting frame of the DRX cycle within the long DRX cycle, with a numeric range between 0 and 2559 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The valid value range is dependent on {{param|LongDRXCycle}} parameter which defines the upper bound of this range, i.e., range definition is [0: ({{param|LongDRXCycle}}-1)]. Corresponds to drxStartOffset parameter specified in {{bibref|3GPP-TS.36.321|Section 5.7}}. Use of values bigger than ({{param|LongDRXCycle}}-1) MUST be rejected by the CPE. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXStartOffset";
+    }
+    leaf-list short-drx-cycle {
+      type uint16 {
+        range "2 | 5 | 8 | 10 | 16 | 20 | 32 | 40 | 64 | 80 | 128 | 160 | 256 | 320 | 512 | 640";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is the short DRX Cycle value, specified in number of sub-frames. In case there is more than one item in the list, the first item contains the most preferred value. If shortDRX-Cycle is configured, the value of {{param|LongDRXCycle}} MUST be a multiple of the {{param}} value. Corresponds to shortDRX-Cycle parameter specified in {{bibref|3GPP-TS.36.321|Section 5.7}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.ShortDRXCycle";
+    }
+    leaf-list drx-short-cycle-timer {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item defined the duration of the short DRX cycle in multiples of {{param|ShortDRXCycle}} parameter, specified in number of sub-frames, with a numeric range between 1 and 16 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Denotes the number of consecutive sub-frame(s)the UE shall follow the short DRX cycle after the DRX Inactivity Timer has expired. Corresponds to drxShortCycleTimer parameter specified in {{bibref|3GPP-TS.36.321|Section 5.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXShortCycleTimer";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.";
+  }
+
+  grouping lte-ran-mac-ulsch-g {
+    description
+      "This object contains parameters relating to the ULSCH (Uplink Shared Channel) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.2.3}}).";
+    leaf max-harq-tx {
+      type uint8 {
+        range "1..8 | 10 | 12 | 16 | 20 | 24 | 28";
+      }
+      description
+        "Maximum number of UL HARQ transmissions. Corresponds to parameter maxHARQ-Tx specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.4.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.MaxHARQTx";
+    }
+    leaf periodic-bsr-timer {
+      type uint16 {
+        range "0 | 5 | 10 | 16 | 20 | 32 | 40 | 64 | 80 | 128 | 160 | 320 | 640 | 1280 | 2560";
+      }
+      units "subframes";
+      description
+        "Timer for Periodic BSR (Buffer Status Report) reporting, specified in number of {{units}}. UE transmits periodic BSR at the expiration of this timer. Corresponds to parameter periodicBSR-Timer specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.4.5}}. Value of 0 indicates \"infinity.\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.PeriodicBSRTimer";
+    }
+    leaf retx-bsr-timer {
+      type uint16 {
+        range "320 | 640 | 1280 | 2560 | 5120 | 10240";
+      }
+      units "subframes";
+      description
+        "Timer for Regular BSR reporting, specified in number of {{units}}. UE transmits a Regular BSR at the expiration of this timer if data is available in the buffer. Corresponds to parameter retxBSR-Timer specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.RetxBSRTimer";
+    }
+    leaf tti-bundling {
+      type boolean;
+      description
+        "Enables/disables TTI bundling. If {{true}}, TTI bundling is enabled. If {{false}}, TTI bundling is disabled. Corresponds to parameter ttiBundling specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.4.2.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.TTIBundling";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.";
+  }
+
+  grouping lte-ran-rlc-g {
+    description
+      "This object contains parameters relating to the RLC (Radio Link Control) configuration.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.";
+  }
+
+  grouping lte-ran-rlc-srb1-g {
+    description
+      "This object contains parameters relating to the SRB1 (Signaling Radio Bearer 1) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.3.1}}).";
+    leaf default-configuration {
+      type boolean;
+      config false;
+      description
+        "Indicates the whether default RLC configuration for SRB1 is used or not. If {{true}}, the default RLC configuration is used as specified in {{bibref|3GPP-TS.36.331|Section 9.2.1.1}}. In this case, rest of the parameters defined under the current object are ignored by the CPE. If {{false}}, rest of the parameters defined under the current object are used by the CPE for RLC configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.DefaultConfiguration";
+    }
+    leaf-list t-poll-retransmit {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a timer between successive poll transmissions, specified in milliseconds, specified in milliseconds, with a numeric range between 5 and 500 inclusive. Only the multiple of 5 are valid in the range between 5 and 250 inclusive (i.e. 5, 10, 15, 20,... 250), and only the multiple of 50 are valid in the range between 300 and 500 inclusive (i.e., 300, 350, 400, 450, 500). If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to t-PollRetransmit IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.TPollRetransmit";
+    }
+    leaf-list poll-pdu {
+      type uint16 {
+        range "0 | 4 | 8 | 16 | 32 | 64 | 128 | 256";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a counter of PDUs between successive poll transmissions, specified in the number of PDUs. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to pollPDU IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.2.1}}. Value of 0 indicates \"infinity.\" If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.PollPDU";
+    }
+    leaf-list poll-byte {
+      type uint16 {
+        range "0 | 25 | 50 | 75 | 100 | 125 | 250 | 375 | 500 | 750 | 1000 | 1250 | 1500 | 2000 | 3000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a counter of PDU bytes transmitted between successive poll transmissions, specified in kilobytes. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to pollByte IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.2.1}}. Value of 0 indicates infinite amount of kilobytes. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.PollByte";
+    }
+    leaf-list max-retx-threshold {
+      type uint8 {
+        range "1..4 | 6 | 8 | 16 | 32";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item defines the maximum number of transmission retry used by the RLC entity to limit the number of retransmissions of an AMD PDU. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to maxRetxThreshold IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.1}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.MaxRetxThreshold";
+    }
+    leaf-list t-reordering {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item defines a timer used by the receiving side of an RLC entity in order to detect loss of RLC PDUs at lower layer, specified in milliseconds, with a numeric range between 0 and 200 inclusive. Only the multiple of 5 are valid in the range between 0 and 100 inclusive (i.e. 0, 5, 10, 15,...,100), and only the multiple of 10 are valid in the range between 110 and 200 inclusive (110, 120, 130,...,200). If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to t-Reordering IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.1.2.2. and 5.1.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.TReordering";
+    }
+    leaf-list t-status-prohibit {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item defines a timer used by the receiving side of an AM RLC entity in order to prohibit transmission of a STATUS PDU, specified in milliseconds, with a numeric range between 0 and 500 inclusive. Only the multiple of 5 are valid in the range between 0 and 250 inclusive (i.e. 0, 5, 10, 15,...,250), and only the multiple of 50 are valid in the range between 300 and 500 inclusive (i.e. 300, 350, 400, 450, 500). If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to t-StatusProhibit IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.3}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.TStatusProhibit";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.";
+  }
+
+  grouping lte-ran-rlc-srb2-g {
+    description
+      "This object contains parameters relating to the SRB2 (Signaling Radio Bearer 2) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.3.1}}).";
+    leaf default-configuration {
+      type boolean;
+      config false;
+      description
+        "Indicates the whether default RLC configuration for SRB1 is used or not. If {{true}}, the default RLC configuration is used as specified in {{bibref|3GPP-TS.36.331|Section 9.2.1.1}}. In this case, rest of the parameters defined under the current object are ignored by the CPE. If {{false}}, rest of the parameters defined under the current object are used by the CPE for RLC configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.DefaultConfiguration";
+    }
+    leaf-list t-poll-retransmit {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a timer between successive poll transmissions, specified in milliseconds, with a numeric range between 5 and 500 inclusive. Only the multiple of 5 are valid in the range between 5 and 250 inclusive (i.e. 5, 10, 15, 20,... 250), and only the multiple of 50 are valid in the range between 300 and 500 inclusive (i.e., 300, 350, 400, 450, 500). If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to t-PollRetransmit IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.TPollRetransmit";
+    }
+    leaf-list poll-pdu {
+      type uint16 {
+        range "0 | 4 | 8 | 16 | 32 | 64 | 128 | 256";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a counter of PDUs between successive poll transmissions, specified in the number of PDUs. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to pollPDU IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.2.1}}. Value of 0 indicates \"infinity.\" If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.PollPDU";
+    }
+    leaf-list poll-byte {
+      type uint16 {
+        range "0 | 25 | 50 | 75 | 100 | 125 | 250 | 375 | 500 | 750 | 1000 | 1250 | 1500 | 2000 | 3000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a counter of PDU bytes transmitted between successive poll transmissions, specified in kilobytes. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to pollByte IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.2.1}}. Value of 0 indicates infinite amount of kilobytes. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.PollByte";
+    }
+    leaf-list max-retx-threshold {
+      type uint8 {
+        range "1..4 | 6 | 8 | 16 | 32";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item defines the maximum number of transmission retry used by the RLC entity to limit the number of retransmissions of an AMD PDU. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to maxRetxThreshold IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.1}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.MaxRetxThreshold";
+    }
+    leaf-list t-reordering {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item defines a timer used by the receiving side of an RLC entity in order to detect loss of RLC PDUs at lower layer, specified in milliseconds, with a numeric range between 0 and 200 inclusive. Only the multiple of 5 are valid in the range between 0 and 100 inclusive (i.e. 0, 5, 10, 15,...,100), and only the multiple of 10 are valid in the range between 110 and 200 inclusive (110, 120, 130,...,200). If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to t-Reordering IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.1.2.2. and 5.1.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.TReordering";
+    }
+    leaf-list t-status-prohibit {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item defines a timer used by the receiving side of an AM RLC entity in order to prohibit transmission of a STATUS PDU, specified in milliseconds, with a numeric range between 0 and 500 inclusive. Only the multiple of 5 are valid in the range between 0 and 250 inclusive (i.e. 0, 5, 10, 15,...,250), and only the multiple of 50 are valid in the range between 300 and 500 inclusive (i.e. 300, 350, 400, 450, 500). If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to t-StatusProhibit IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.3}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.TStatusProhibit";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.";
+  }
+
+  grouping lte-ran-rrc-timers-g {
+    description
+      "This object contains parameters relating to the RRC timers and constants (see {{bibref|3GPP-TS.32.592|Section 6.1.6.1}}) and (see {{bibref|3GPP-TS.32.592|Section 6.1.6.2}}).";
+    leaf-list t300 {
+      type uint16 {
+        range "100 | 200 | 300 | 400 | 600 | 1000 | 1500 | 2000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is an interval, in milliseconds, between subsequent transmissions of RRCConnectionRequest. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t300 specified in UE-TimersAndConstants IE in {{bibref|3GPP-TS.36.331|Section 6.3.6}}. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T300";
+    }
+    leaf-list t301 {
+      type uint16 {
+        range "100 | 200 | 300 | 400 | 600 | 1000 | 1500 | 2000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is an interval, in milliseconds, between subsequent transmissions of RRCConnectionReestablishmentRequest. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t301 specified in UE-TimersAndConstants IE in {{bibref|3GPP-TS.36.331|Section 6.3.6}}. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T301";
+    }
+    leaf t302 {
+      type uint16 {
+        range "100 | 200 | 300 | 400 | 600 | 1000 | 1500 | 2000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Time to wait in {{units}} for cell re-selection or RRConnectionSetup after RRCConnectionReject. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T302";
+    }
+    leaf-list t304-eutra {
+      type uint16 {
+        range "50 | 100 | 150 | 200 | 500 | 1000 | 2000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a HO failure timer, in milliseconds. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to t304 defined within IE MobilityControlInfo in RRCConnectionReconfiguration message in {{bibref|3GPP-TS.36.331|Section 5.3.5.4 and Section 6.3.4}}. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T304EUTRA";
+    }
+    leaf-list t304-irat {
+      type uint16 {
+        range "100 | 200 | 500 | 1000 | 2000 | 4000 | 8000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a HO failure timer, in milliseconds. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to t304 defined within IE CellChangeOrder in MobilityFromEUTRACommand message in {{bibref|3GPP-TS.36.331|Section 6.2.2}}. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T304IRAT";
+    }
+    leaf-list t310 {
+      type uint16 {
+        range "0 | 50 | 100 | 200 | 500 | 1000 | 2000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a RLF declaration timer, in milliseconds. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t310 specified in RLF-TimersAndConstants IE in {{bibref|3GPP-TS.36.331|Section 6.3.6}}. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T310";
+    }
+    leaf-list t311 {
+      type uint16 {
+        range "1000 | 3000 | 5000 | 10000 | 15000 | 20000 | 30000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a RLF recovery timer, in milliseconds. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t311 specified in RLF-TimersAndConstants IE in {{bibref|3GPP-TS.36.331|Section 6.3.6}}. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T311";
+    }
+    leaf t320 {
+      type uint8 {
+        range "5 | 10 | 20 | 30 | 60 | 120 | 180";
+      }
+      units "minutes";
+      config false;
+      description
+        "Time in {{units}} after RRCConnection Release in which cell re-selection priority info supplied in RRCConnectionRelease MUST be observed. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. Corresponds to parameter t320 specified in RRCConnectionRelease message in {{bibref|3GPP-TS.36.331|Section 6.2.2}}. S";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T320";
+    }
+    leaf n310 {
+      type uint8 {
+        range "1..4 | 6 | 8 | 10 | 20";
+      }
+      config false;
+      description
+        "Number of consecutive \"out-of-sync\" indications received from lower layers that triggers timer T310. Corresponds to parameter n310 specified in UE-TimersAndConstants IE in {{bibref|3GPP-TS.36.331|Section 6.3.6 and Section 7.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.N310";
+    }
+    leaf n311 {
+      type uint8 {
+        range "1..6 | 8 | 10";
+      }
+      config false;
+      description
+        "Number of consecutive \"in-sync\" indications received from lower layers that stops timer T310. Corresponds to parameter n311 specified in UE-TimersAndConstants IE in {{bibref|3GPP-TS.36.331|Section 6.3.6 and Section 7.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.N311";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.";
+  }
+
+  grouping lte-ran-cell-restriction-g {
+    description
+      "This object contains parameters relating to the cell restriction configuration.";
+    leaf cell-barred {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the is barred or not. If {{true}}, the cell is barred. If {{false}}, the cell is not barred. Corresponds to parameter CellBarred specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.CellRestriction.CellBarred";
+    }
+    leaf cell-reserved-for-operator-use {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the is reserved for operator's use or not. If {{true}}, the cell is reserved for operator use. If {{false}}, the cell is not reserved for operator use. Corresponds to parameter cellReservedForOperatorUse specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.CellRestriction.CellReservedForOperatorUse";
+    }
+    leaf barring-for-emergency {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the is barred for Access Class 10 or not. If {{true}}, the cell is barred for Access Class 10. If {{false}}, the cell is not barred for Access Class 10. Corresponds to parameter ac-BarringForEmergency specified in SIB2 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.CellRestriction.BarringForEmergency";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.CellRestriction.";
+  }
+
+  grouping lte-ran-mobility-g {
+    description
+      "This object contains parameters relating to the UE's mobility configuration. It covers both idle mode and connected mode.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-g {
+    description
+      "This object contains parameters relating to the UE's mobility while it is in idle mode (cell (re-)selection). Parameters under this object determines the content in the SIB (System Information Block) that is broadcast by LTE .";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-common-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration that is common to all cell re-selection scenarios (intra/inter-freq, inter-RAT to UTRA (UMTS), GERAN (GSM) and CDMA2000) (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.1}}).";
+    leaf-list qhyst {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a hysteresis value applied to serving cell for evaluating cell ranking criteria specified in dB, with a numeric range between 0 and 24 inclusive. For the value greater than 6, only even numbers are valid. If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter q-Hyst specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.Qhyst";
+    }
+    leaf q-hyst-sf-medium {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Speed-dependent scaling factor for Qhyst in Medium-mobility state, specified in {{units}}. Corresponds to parameter q-HystSF:sf-Medium specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.QHystSFMedium";
+    }
+    leaf q-hyst-sf-high {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Speed-dependent scaling factor for Qhyst in High-mobility state, specified in {{units}}. Corresponds to parameter q-HystSF:sf-High specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.QHystSFHigh";
+    }
+    leaf t-evaluation {
+      type uint8 {
+        range "30 | 60 | 120 | 180 | 240";
+      }
+      units "seconds";
+      config false;
+      description
+        "Duration for evaluating allowed amount of cell re-selection(s) required to enter mobility states, specified in {{units}}. Corresponds to parameter t-Evaluation specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.4}} and to parameter TCRmax specified in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.TEvaluation";
+    }
+    leaf t-hyst-normal {
+      type uint8 {
+        range "30 | 60 | 120 | 180 | 240";
+      }
+      units "seconds";
+      config false;
+      description
+        "Additional duration for evaluating criteria to enter normal mobility state, specified in {{units}}. Specifies the additional time period for evaluating criteria to enter Normal-mobility state. Corresponds to parameter t-HystNormal specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.4}} and to parameter TCRmaxHyst specified in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.THystNormal";
+    }
+    leaf n-cell-change-medium {
+      type uint8 {
+        range "1..16";
+      }
+      config false;
+      description
+        "Defines the number of cell re-selections within TEvaluation to enter Medium-mobility state. Corresponds to parameter n-cellChangeMedium specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.4}} and to parameter NCR_M specified in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.NCellChangeMedium";
+    }
+    leaf n-cell-change-high {
+      type uint8 {
+        range "1..16";
+      }
+      config false;
+      description
+        "Defines the number of cell re-selections within TEvaluation to enter High-mobility state. Corresponds to parameter n-cellChangeHigh specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.4}} and to parameter NCR_H specified in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.NCellChangeHigh";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-intra-freq-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration for intra-freq re-selection scenario (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.2}}).";
+    leaf-list q-rx-lev-min-sib1 {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a required minimum received RSRP level of a E-UTRA cell for cell selection, specified in dBm, with a numeric range between -70 and -22 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter q-rxLevMin in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}} and in {{bibref|3GPP-TS.36.304|Section 5.2.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.QRxLevMinSIB1";
+    }
+    leaf-list q-rx-lev-min-sib3 {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a required minimum received RSRP level for intra-frequency E-UTRA cell re-selection, specified in dBm, with a numeric range between -70 and -22 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter q-rxLevMin in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.QRxLevMinSIB3";
+    }
+    leaf q-rx-lev-min-offset {
+      type uint8 {
+        range "1..8";
+      }
+      units "dBm";
+      config false;
+      description
+        "Defines offset with respect to QrxLevMin, specified in {{units}}. This offset is taken into account in the computation of Srxlev for cell selection evaluation of cells detected during a periodic search for a higher priority PLMN while camped normally in a VPLMN. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter q-rxLevMinOffset in SIB1 specified in {{bibref|3GPP-TS.36.331|Section 6.2.2}} and in {{bibref|3GPP-TS.36.304|Section 5.2.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.QRxLevMinOffset";
+    }
+    leaf-list s-intra-search {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a threshold for intra-frequency measurements, specified in dB, with a numeric range between 0 and 31 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter s-IntraSearch specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.SIntraSearch";
+    }
+    leaf-list t-reselection-eutra {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a cell re-selection timer for intra-frequency E-UTRA cell re-selection, specified in seconds, with a numeric range between 0 and 7 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t-ReselectionEUTRA specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.TReselectionEUTRA";
+    }
+    leaf-list s-non-intra-search {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a threshold for inter-frequency and inter-RAT measurements with lower or equal priority, specified in dB, with a numeric range between 0 and 31 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter s-NonIntraSearch specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.SNonIntraSearch";
+    }
+    leaf cell-reselection-priority {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Absolute priority of the E-UTRAN serving carrier frequency used in the inter-frequency and inter-RAT cell re-selection procedure. Corresponds to parameter CellReselectionPriority specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.CellReselectionPriority";
+    }
+    leaf p-max {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Used to limit the allowed UE uplink transmission power on the serving frequency, specified in {{units}}. It is used to calculate the parameter Pcompensation defined in {{bibref|3GPP-TS.36.304|Section 5.2.3.2}}. Corresponds to parameter p-Max specified in SIB1 and SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1 and Section 6.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.PMax";
+    }
+    leaf thresh-serving-low {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold for serving frequency used in evaluation of re-selection towards lower priority E-UTRAN frequency or inter-RAT, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshServingLow specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.ThreshServingLow";
+    }
+    leaf t-reselection-eutrasf-medium {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for intra-frequency TreselectionEUTRA in Medium-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionEUTRA-SF:sf-Medium specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.TReselectionEUTRASFMedium";
+    }
+    leaf t-reselection-eutrasf-high {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for intra-frequency TreselectionEUTRA in High-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionEUTRA-SF:sf-High specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.TReselectionEUTRASFHigh";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-inter-freq-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration for inter-freq re-selection scenario .";
+    leaf max-carrier-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.MaxCarrierEntries";
+    }
+    leaf carrier-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.CarrierNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-inter-freq-carrier-g {
+    description
+      "This object contains parameters relating to the carrier information for inter-freq re-selection scenario (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.3}}).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.Alias";
+    }
+    leaf eutra-carrier-arfcn {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Indicates the ARFCN of this frequency carrier. Corresponds to parameter dl-CarrierFreq in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.EUTRACarrierARFCN";
+    }
+    leaf-list q-rx-lev-min-sib5 {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a required minimum received RSRP level on this E-UTRA frequency carrier, spcified in dBm, with a numeric range between -70 and -22 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter q-rxLevMin in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.QRxLevMinSIB5";
+    }
+    leaf-list q-offset-freq {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is an offset applicable between serving and this frequency carrier, specified in dBm, with a numeric range between -24 and 24 inclusive. For values less than or equal to -6, or values greater than or equal to 6, only the even values are valid. If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter q-OffsetFreq in SIB5 specified in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.4.2.6}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.QOffsetFreq";
+    }
+    leaf-list t-reselection-eutra {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a cell re-selection timer for inter-frequency cell re-selection to this E-UTRA frequency carrier, specified in seconds, with a numeric range between 0 and 7 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t-ReselectionEUTRA specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.TReselectionEUTRA";
+    }
+    leaf cell-reselection-priority {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Absolute priority of this E-UTRA frequency carrier, as used by the inter-frequency cell re-selection procedure. Corresponds to parameter CellReselectionPriority specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.CellReselectionPriority";
+    }
+    leaf thresh-x-high {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting from a lower priority E-UTRAN frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-High specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.ThreshXHigh";
+    }
+    leaf thresh-x-low {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting from a higher priority E-UTRAN frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-Low specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.ThreshXLow";
+    }
+    leaf p-max {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Used to limit the allowed UE uplink transmission power on this carrier frequency, specified in {{units}}. It is used to calculate the parameter Pcompensation defined in {{bibref|3GPP-TS.36.304|Section 5.2.3.2}}. Corresponds to parameter p-Max specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.PMax";
+    }
+    leaf t-reselection-eutrasf-medium {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TreselectionEUTRA for inter-frequency re-selection to this frequency carrier in Medium-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionEUTRA-SF:sf-Medium specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.TReselectionEUTRASFMedium";
+    }
+    leaf t-reselection-eutrasf-high {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TreselectionEUTRA for inter-frequency re-selection to this frequency carrier in High-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionEUTRA-SF:sf-High specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.TReselectionEUTRASFHigh";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration for inter-RAT (Radio Access Technology) re-selection scenario.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-utra-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration for inter-RAT (Radio Access Technology) re-selection, specifically for re-selection to UTRA (UMTS) scenario (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.4}}).";
+    leaf-list t-reselection-utra {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a cell re-selection timer for re-selection to a UTRA frequency carrier, specified in seconds, with a numeric range between 0 and 7 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t-ReselectionUTRA specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.TReselectionUTRA";
+    }
+    leaf t-reselection-utrasf-medium {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TreselectionUTRA for inter-RAT re-selection to UTRA in Medium-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionUTRA-SF:sf-Medium specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.TReselectionUTRASFMedium";
+    }
+    leaf t-reselection-utrasf-high {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TreselectionEUTRA for inter-frequency re-selection to this frequency carrier in High-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionUTRA-SF:sf-High specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.TReselectionUTRASFHigh";
+    }
+    leaf max-utranfdd-freq-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.MaxUTRANFDDFreqEntries";
+    }
+    leaf utranfdd-freq-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreqNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-utra-utranfdd-freq-g {
+    description
+      "This object contains parameters relating to the channel frequncy related information of UTRA (UMTS) system (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.5, 6.1.5.1.6}}).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.Alias";
+    }
+    leaf utra-carrier-arfcn {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "Indicates the ARFCN of the frequency carrier. Corresponds to parameter CarrierFreq in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.UTRACarrierARFCN";
+    }
+    leaf-list q-rx-lev-min {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a required minimum received RSCP level on this UTRA frequency carrier, specified in dBm, with a numeric range between -60 and -13 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2 + 1) yields the actual value. Corresponds to parameter q-RxLevMin in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.25.304|Section 5.2.3.1.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.QRxLevMin";
+    }
+    leaf-list q-qual-min {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a required minimum received Ec/Io level on this UTRA FDD carrier, specified in dB, with a numeric range between -24 and 0 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter q-QualMin in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.25.304|Section 5.2.3.1.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.QQualMin";
+    }
+    leaf cell-reselection-priority {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Absolute priority of this UTRA FDD frequency carrier, as used by the inter-frequency cell re-selection procedure. Corresponds to parameter CellReselectionPriority specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.CellReselectionPriority";
+    }
+    leaf thresh-x-high {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting towards a higher priority UTRA FDD frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-High specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.ThreshXHigh";
+    }
+    leaf thresh-x-low {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting towards a lower priority UTRA FDD frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-Low specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.ThreshXLow";
+    }
+    leaf p-max-utra {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Used to limit the allowed UE uplink transmission power on this UTRA FDD carrier frequency, specified in {{units}}. It is used to calculate the parameter Pcompensation defined in {{bibref|3GPP-TS.25.304|Section 5.2.3.1.2}}. Corresponds to parameter p-MaxUTRA specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.PMaxUTRA";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-geran-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration for inter-RAT (Radio Access Technology) re-selection, specifically for re-selection to GERAN (GSM) scenario (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.6}}).";
+    leaf-list t-reselection-geran {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a cell re-selection timer for re-selection to a GERAN frequency carrier, specified in seconds, with a numeric range between 0 and 7 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t-ReselectionGERAN specified in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and to TreselectionGERA in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.TReselectionGERAN";
+    }
+    leaf t-reselection-geransf-medium {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TreselectionGERAN for inter-RAT re-selection to GERAN in Medium-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionGERAN-SF:sf-Medium specified in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.TReselectionGERANSFMedium";
+    }
+    leaf t-reselection-geransf-high {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TreselectionGERAN for inter-RAT re-selection to GERAN in High-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionGERAN-SF:sf-High specified in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.TReselectionGERANSFHigh";
+    }
+    leaf max-geran-freq-group-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.MaxGERANFreqGroupEntries";
+    }
+    leaf geran-freq-group-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroupNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-geran-geran-freq-group-g {
+    description
+      "This object contains parameters relating to the channel frequncy related information of GERAN (GSM) system (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.7}}).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.Alias";
+    }
+    leaf band-indicator {
+      type enumeration {
+        enum "gsm850" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BandIndicator - GSM850";
+        }
+        enum "gsm900" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BandIndicator - GSM900";
+        }
+        enum "dcs1800" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BandIndicator - DCS1800";
+        }
+        enum "pcs1900" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BandIndicator - PCS1900";
+        }
+      }
+      config false;
+      description
+        "Indicates how to interpret the BCCH ARFCN. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BandIndicator";
+    }
+    leaf bccharfcn {
+      type uint16 {
+        range "0..1023";
+      }
+      description
+        "ARFCN of this cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BCCHARFCN";
+    }
+    leaf-list q-rx-lev-min {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a required minimum received RSSI level on this GERAN frequency carrier for re-selection to this UTRA FDD carrier, specified in dBm, with a numeric range between 0 and 63 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2 - 115) yields the actual value. Corresponds to parameter q-rxLevMin in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and to RXLEV_ACCESS_MIN in {{bibref|3GPP-TS.45.008}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.QRxLevMin";
+    }
+    leaf cell-reselection-priority {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Absolute priority of this GERAN frequency group, as used by the inter-frequency cell re-selection procedure. Corresponds to parameter CellReselectionPriority specified in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.CellReselectionPriority";
+    }
+    leaf thresh-x-high {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting towards a higher priority GERAN frequency group than current serving E-UTRA frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-High specified in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.ThreshXHigh";
+    }
+    leaf thresh-x-low {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting towards a lower priority GERAN frequency group than current serving E-UTRA frequency, specified in {{units}} dB. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-Low specified in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.ThreshXLow";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-cdma2000-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration for inter-RAT (Radio Access Technology) re-selection, specifically for re-selection to CDMA2000 system scenario (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.8}}).";
+    leaf-list search-window-size {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a CDMA2000 parameter affecting the search for neighbouring pilots, with a numeric range between 0 and 15 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter searchWindowSize in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP2-C.S0005-A|Table 2.6.6.2.1-1}} and {{bibref|3GPP2-C.S0024-A|Table 8.7.6.2-4}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.SearchWindowSize";
+    }
+    leaf-list t-reselection-cdma2000 {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a cell re-selection timer for a CDMA2000 band, specified in seconds, with a numeric range between 0 and 7 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t-ReselectionCDMA2000 specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and to TreselectionCDMA_HRPD or TreselectionCDMA_1xRTT in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.TReselectionCDMA2000";
+    }
+    leaf t-reselection-cdma2000-sf-medium {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TReselectionCDMA2000 for inter-RAT re-selection to CDMA2000 in Medium-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionCDMA2000-SF:sf-Medium specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.TReselectionCDMA2000SFMedium";
+    }
+    leaf t-reselection-cdma2000-sf-high {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TReselectionCDMA2000 for inter-RAT re-selection to CDMA2000 in High-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionCDMA2000-SF:sf-High specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.TReselectionCDMA2000SFHigh";
+    }
+    leaf max-cdma2000-band-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.MaxCDMA2000BandEntries";
+    }
+    leaf cdma2000-band-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000BandNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-cdma2000-cdma2000-band-g {
+    description
+      "This object contains parameters relating to the channel frequncy related information of CDMA2000 system (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.8}}).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.Alias";
+    }
+    leaf band-class {
+      type uint8 {
+        range "0..17";
+      }
+      units "bandclass number";
+      description
+        "Defines the CDMA2000 band in which the CDMA2000 carrier frequency can be found, specified in {{units}}. BandClass is defined in 3GPP2 C.S0057-B Table 1.5-1. Corresponds to parameter bandClass specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.BandClass";
+    }
+    leaf cell-reselection-priority {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Absolute priority of this CDMA2000 band used by the inter-frequency cell re-selection procedure. Corresponds to parameter CellReselectionPriority specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.CellReselectionPriority";
+    }
+    leaf thresh-x-high {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting towards a higher priority CDMA2000 band than current serving E-UTRA frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-High specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.ThreshXHigh";
+    }
+    leaf thresh-x-low {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting towards a lower priority CDMA2000 band than current serving E-UTRA frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-Low specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.ThreshXLow";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.";
+  }
+
+  grouping lte-ran-mobility-conn-mode-g {
+    description
+      "This object contains parameters relating to the UE's mobility while it is in connected mode (handover). Parameters under this object determines the content in the SIB (System Information Block) that is broadcast by LTE .";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.";
+  }
+
+  grouping lte-ran-mobility-conn-mode-eutra-g {
+    description
+      "This object contains parameters relating to the connected mode mobility (handover) configuration within LTE system (see {{bibref|3GPP-TS.32.592|Section 6.1.5.2.1}}).";
+    leaf-list filter-coefficient-rsrp {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a filtering coefficient used for RSRP measurements, with a numeric range between 0 and 19 inclusive. For values greater than 9, only odd values are valid. If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to filterCoefficientRSRP parameter specified in QuantityConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.FilterCoefficientRSRP";
+    }
+    leaf-list filter-coefficient-rsrq {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a filtering coefficient used for RSRQ measurements, with a numeric range between 0 and 19 inclusive. For values greater than 9, only odd values are valid. If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to filterCoefficientRSRQ parameter specified in QuantityConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.FilterCoefficientRSRQ";
+    }
+    leaf a1-threshold-rsrp {
+      type uint8 {
+        range "0..97";
+      }
+      config false;
+      description
+        "Threshold to be used in EUTRA measurement report triggering condition for event A1. Valid only if {{param|TriggerQuantity}} is {{enum|RSRP|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133|Table 9.1.4-1}}. Corresponds to parameter a1-Threshold:threshold-RSRP specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A1ThresholdRSRP";
+    }
+    leaf a1-threshold-rsrq {
+      type uint8 {
+        range "0..34";
+      }
+      config false;
+      description
+        "Threshold to be used in EUTRA measurement report triggering condition for event A1. Valid only if {{param|TriggerQuantity}} is {{enum|RSRQ|TriggerQuantity}}. Mapping to actual values is specified in 3GPP TS 36.133}} table 9.1.7-1. Corresponds to parameter a1-Threshold:threshold-RSRQ specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A1ThresholdRSRQ";
+    }
+    leaf a2-threshold-rsrp {
+      type uint8 {
+        range "0..97";
+      }
+      config false;
+      description
+        "Threshold to be used in EUTRA measurement report triggering condition for event A2. Valid only if {{param|TriggerQuantity}} is {{enum|RSRP|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133|Table 9.1.4-1}}. Corresponds to parameter a2-Threshold:threshold-RSRP specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A2ThresholdRSRP";
+    }
+    leaf a2-threshold-rsrq {
+      type uint8 {
+        range "0..34";
+      }
+      config false;
+      description
+        "Threshold to be used in EUTRA measurement report triggering condition for event A2. Valid only if {{param|TriggerQuantity}} is {{enum|RSRQ|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133|Table 9.1.7-1}}. Corresponds to parameter a2-Threshold:threshold-RSRQ specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A2ThresholdRSRQ";
+    }
+    leaf-list a3-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is an offset to be used in evaluation of EUTRA measurement report triggering condition for event A3, with a numeric range between -30 and 30 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a3-Offset specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A3Offset";
+    }
+    leaf report-on-leave {
+      type boolean;
+      config false;
+      description
+        "Indicates whether or not the UE shall initiate the measurement reporting procedure when the leaving condition is met for event A3 for a cell in cellsTriggeredList, as specified in {{bibref|3GPP-TS.36.331|Section 5.5.4.1 and Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportOnLeave";
+    }
+    leaf a4-threshold-rsrp {
+      type uint8 {
+        range "0..97";
+      }
+      config false;
+      description
+        "Threshold to be used in EUTRA measurement report triggering condition for event A4. Valid only if {{param|TriggerQuantity}} is {{enum|RSRP|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a4-Threshold:threshold-RSRP specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A4ThresholdRSRP";
+    }
+    leaf a4-threshold-rsrq {
+      type uint8 {
+        range "0..34";
+      }
+      config false;
+      description
+        "Threshold to be used in EUTRA measurement report triggering condition for event A4. Valid only if {{param|TriggerQuantity}} is {{enum|RSRQ|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a4-Threshold:threshold-RSRQ specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A4ThresholdRSRQ";
+    }
+    leaf a5-threshold1-rsrp {
+      type uint8 {
+        range "0..97";
+      }
+      config false;
+      description
+        "Threshold1 to be used in EUTRA measurement report triggering condition for event A5. Valid only if {{param|TriggerQuantity}} is {{enum|RSRP|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a5-Threshold1:threshold-RSRP specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A5Threshold1RSRP";
+    }
+    leaf a5-threshold1-rsrq {
+      type uint8 {
+        range "0..34";
+      }
+      config false;
+      description
+        "Threshold1 to be used in EUTRA measurement report triggering condition for event A5. Valid only if {{param|TriggerQuantity}} is {{enum|RSRQ|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a5-Threshold1:threshold-RSRQ specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A5Threshold1RSRQ";
+    }
+    leaf a5-threshold2-rsrp {
+      type uint8 {
+        range "0..97";
+      }
+      config false;
+      description
+        "Threshold2 to be used in EUTRA measurement report triggering condition for event A5. Valid only if {{param|TriggerQuantity}} is {{enum|RSRP|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a5-Threshold2:threshold-RSRP specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A5Threshold2RSRP";
+    }
+    leaf a5-threshold2-rsrq {
+      type uint8 {
+        range "0..34";
+      }
+      config false;
+      description
+        "Threshold2 to be used in EUTRA measurement report triggering condition for event A5. Valid only if {{param|TriggerQuantity}} is {{enum|RSRQ|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a5-Threshold2:threshold-RSRQ specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A5Threshold2RSRQ";
+    }
+    leaf-list hysteresis {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a hysteresis value applied to entry and leave condition of a report triggering event, with a numeric range between 0 and 30 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter hysteresis specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.Hysteresis";
+    }
+    leaf-list time-to-trigger {
+      type uint16 {
+        range "0 | 40 | 64 | 80 | 100 | 128 | 160 | 256 | 320 | 480 | 512 | 640 | 1024 | 1280 | 2560 | 5120";
+      }
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a time period during which measurement report triggering condition needs to be met in order to trigger a measurement report, specified in milliseconds. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter timeToTrigger specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.TimeToTrigger";
+    }
+    leaf trigger-quantity {
+      type enumeration {
+        enum "rsrp" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.TriggerQuantity - RSRP";
+        }
+        enum "rsrq" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.TriggerQuantity - RSRQ";
+        }
+      }
+      config false;
+      description
+        "Quantities used to evaluate a measurement report triggering condition. Corresponds to parameter triggerQuantity specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.TriggerQuantity";
+    }
+    leaf report-quantity {
+      type enumeration {
+        enum "same-as-trigger-quantity" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportQuantity - SameAsTriggerQuantity";
+        }
+        enum "both" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportQuantity - Both";
+        }
+      }
+      config false;
+      description
+        "Measrument quantities to be included in the measurement report. Corresponds to parameter reportQuantity specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The value {{enum|Both}} specifies that both the RSRP and RSRQ quantities are to be included in the measurement report.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportQuantity";
+    }
+    leaf max-report-cells {
+      type uint8 {
+        range "1..8";
+      }
+      description
+        "Maximum number of cells that can be included in a measurement report. Corresponds to parameter maxReportCells specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.MaxReportCells";
+    }
+    leaf report-interval {
+      type uint32 {
+        range "120 | 240 | 480 | 640 | 1024 | 2048 | 5120 | 10240 | 60000 | 360000 | 720000 | 1800000 | 3600000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Interval between successive measurement reports, specified in {{units}}. Corresponds to parameter reportInterval specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportInterval";
+    }
+    leaf report-amount {
+      type uint8 {
+        range "0..2 | 4 | 8 | 16 | 32 | 64";
+      }
+      config false;
+      description
+        "Number of times a measurement report is sent. Corresponds to parameter reportAmount specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. Value of 0 indicates \"infinity.\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportAmount";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.";
+  }
+
+  grouping lte-ran-mobility-conn-mode-irat-g {
+    description
+      "This object contains parameters relating to the connected mode mobility (handover) configuration that is common to all inter-RAT handover scenarios (UTRA (UMTS), GERAN (GSM) and CDMA2000) (see {{bibref|3GPP-TS.32.592|Section 6.1.5.2.2}}).";
+    leaf-list qoffsett-utra {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a UTRA-specific offset to be applied when evaluating triggering conditions for measurement reporting in connected mode, with a numeric range between -15 and 15 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter offsetFreq included in the IE MeasObjectUTRA specified in {{bibref|3GPP-TS.36.331}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.QoffsettUTRA";
+    }
+    leaf-list filter-coefficient-utra {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a filtering coefficient used for UTRA measurements, with a numeric range between 0 and 19 inclusive. For values greater than 9, only odd values are valid. If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to filterCoefficient parameter specified in QuantityConfigUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.FilterCoefficientUTRA";
+    }
+    leaf meas-quantity-utrafdd {
+      type enumeration {
+        enum "cpich-rscp" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityUTRAFDD - CPICH-RSCP";
+        }
+        enum "cpich-ec-n0" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityUTRAFDD - CPICH-EcN0";
+        }
+      }
+      config false;
+      description
+        "Measurement quantity used for UTRA measurements. Corresponds to measQuantityUTRA-FDD parameter specified in QuantityConfigUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityUTRAFDD";
+    }
+    leaf b1-threshold-utrarscp {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "RSCP threshold to be used in UTRA measurement report triggering condition for event B1. Mapping to actual {{units}} values is specified in 3GPP TS 25.133}}. Corresponds to parameter b1-ThresholdUTRA:utra-RSCP specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B1ThresholdUTRARSCP";
+    }
+    leaf b1-threshold-utra-ec-n0 {
+      type uint8 {
+        range "0..49";
+      }
+      units "dBm";
+      config false;
+      description
+        "EcNo threshold to be used in UTRA measurement report triggering condition for event B1. Mapping to actual {{units}} values is specified in 3GPP TS 25.133}}. Corresponds to parameter b1-ThresholdUTRA:utra-EcNo specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B1ThresholdUTRAEcN0";
+    }
+    leaf-list qoffset-geran {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a GERAN-specific offset to be applied when evaluating triggering conditions for measurement reporting in connected mode, with a numeric range between -15 and 15 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter offsetFreq included in the IE MeasObjectGERAN specified in {{bibref|3GPP-TS.36.331}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.QoffsetGERAN";
+    }
+    leaf-list filter-coefficient-geran {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a filtering coefficient used for GERAN measurements, with a numeric range between 0 and 19 inclusive. For values greater than 9, only odd values are valid. If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to filterCoefficient parameter specified in QuantityConfigGERAN IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.FilterCoefficientGERAN";
+    }
+    leaf b1-threshold-geran {
+      type uint8 {
+        range "0..63";
+      }
+      units "dBm";
+      config false;
+      description
+        "Threshold to be used in GERAN measurement report triggering condition for event B1. Mapping to actual {{units}} values is specified in 3GPP TS 45.008}}. Corresponds to parameter b1-ThresholdGERAN specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B1ThresholdGERAN";
+    }
+    leaf-list qoffset-cdma2000 {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a CDMA2000-specific offset to be applied when evaluating triggering conditions for measurement reporting in connected mode, with a numeric range between -15 and 15 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter offsetFreq included in the IE MeasObjectCDMA2000 specified in {{bibref|3GPP-TS.36.331}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.QoffsetCDMA2000";
+    }
+    leaf meas-quantity-cdma2000 {
+      type enumeration {
+        enum "pilot-strength" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityCDMA2000 - PilotStrength";
+        }
+        enum "pilot-pn-phase-and-pilot-strength" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityCDMA2000 - PilotPnPhaseAndPilotStrength";
+        }
+      }
+      config false;
+      description
+        "Measurement quantity used for CDMA2000 measurements. Corresponds to measQuantityCDMA2000 parameter specified in QuantityConfigCDMA2000 IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityCDMA2000";
+    }
+    leaf b1-threshold-cdma2000 {
+      type uint8 {
+        range "0..63";
+      }
+      units "dBm";
+      config false;
+      description
+        "Threshold to be used in CDMA2000 measurement report triggering condition for event B1. Mapping to actual {{units}} values is specified in {{bibref|3GPP-TS.45.008}}. Corresponds to parameter b1-ThresholdCDMA2000 specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B1ThresholdCDMA2000";
+    }
+    leaf b2-threshold2-utrarscp {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "RSCP threshold to be used in UTRA measurement report triggering condition for event B2. Mapping to actual {{units}} values is specified in {{bibref|3GPP-TS.25.133}}. Corresponds to parameter b2-Threshold2UTRA:utra-RSCP specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B2Threshold2UTRARSCP";
+    }
+    leaf b2-threshold2-utra-ec-n0 {
+      type uint8 {
+        range "0..49";
+      }
+      units "dBm";
+      config false;
+      description
+        "EcNo threshold to be used in UTRA measurement report triggering condition for event B2. Mapping to actual {{units}} values is specified in 3GPP TS 25.133}}. Corresponds to parameter b2-Threshold2UTRA:utra-EcNo specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B2Threshold2UTRAEcN0";
+    }
+    leaf b2-threshold2-geran {
+      type uint8 {
+        range "0..63";
+      }
+      units "dBm";
+      config false;
+      description
+        "Threshold to be used in GERAN measurement report triggering condition for event B2. Mapping to actual {{units}} values is specified in 3GPP TS 45.008}}. Corresponds to parameter b2-Threshold2GERAN specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B2Threshold2GERAN";
+    }
+    leaf b2-threshold2-cdma2000 {
+      type uint8 {
+        range "0..63";
+      }
+      units "dBm";
+      config false;
+      description
+        "Threshold to be used in CDMA2000 measurement report triggering condition for event B2. Mapping to actual {{units}} values is specified in 3GPP TS 45.008}}. Corresponds to parameter b2-Threshold2CDMA2000 specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B2Threshold2CDMA2000";
+    }
+    leaf-list hysteresis {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a hysteresis value applied to entry and leave condition of an IRAT report triggering event, with a numeric range between 0 and 30 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter hysteresis specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.Hysteresis";
+    }
+    leaf-list time-to-trigger {
+      type uint16 {
+        range "0 | 40 | 64 | 80 | 100 | 128 | 160 | 256 | 320 | 480 | 512 | 640 | 1024 | 1280 | 2560 | 5120";
+      }
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a time period during which IRAT measurement report triggering condition needs to be met in order to trigger IRAT measurement report, specified in milliseconds. In case there is more than one item in the list, the first item contains the most preferred value.. Corresponds to parameter timeToTrigger specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.TimeToTrigger";
+    }
+    leaf max-report-cells {
+      type uint8 {
+        range "1..8";
+      }
+      description
+        "Maximum number of IRAT cells that can be included in a measurement report. Corresponds to parameter maxReportCells specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MaxReportCells";
+    }
+    leaf report-interval {
+      type uint32 {
+        range "120 | 240 | 480 | 640 | 1024 | 2048 | 5120 | 10240 | 60000 | 360000 | 720000 | 1800000 | 3600000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Interval between successive IRAT measurement reports, specified in {{units}}. Corresponds to parameter reportInterval specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.ReportInterval";
+    }
+    leaf report-amount {
+      type uint8 {
+        range "0..2 | 4 | 8 | 16 | 32 | 64";
+      }
+      config false;
+      description
+        "Number of times an IRAT measurement report is sent. Corresponds to parameter reportAmount specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. Value of 0 indicates \"infinity.\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.ReportAmount";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.";
+  }
+
+  grouping lte-ran-neighbor-list-g {
+    description
+      "This object contains parameters relating to the neighbor list.";
+    leaf max-lte-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.MaxLTECellEntries";
+    }
+    leaf lte-cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECellNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.";
+  }
+
+  grouping lte-ran-neighbor-list-lte-cell-g {
+    description
+      "Table containing the E-UTRA (i.e. intra-RAT) cell list provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.MustInclude";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.PLMNID";
+    }
+    leaf cid {
+      type uint32 {
+        range "0..268435455";
+      }
+      description
+        "Cell Identity. {{bibref|3GPP-TS.36.331|Section 6.3.4}}. Combination of {{param|PLMNID}} and {{param}} constitutes the Cell Global ID (CGI).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.CID";
+    }
+    leaf eutra-carrier-arfcn {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Indicates the ARFCN of this carrier frequency. Corresponds to parameter dl-CarrierFreq in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}, and and parameter NDL in {{bibref|3GPP-TS.36.101|Section 5.7.3}}. If the value of {{param}} is the same with the one currently being used by the, then it implies that this neighbor cell is an intra-frequency cell; otherwise, it is an inter-frequency cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.EUTRACarrierARFCN";
+    }
+    leaf phy-cell-id {
+      type uint16 {
+        range "0..503";
+      }
+      config false;
+      description
+        "Physical cell ID, as specified in {{bibref|3GPP-TS.36.211|Section 6.11}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.PhyCellID";
+    }
+    leaf q-offset {
+      type int64;
+      config false;
+      description
+        "Indicate a cell-specific offset applicable to a specific neighbouring cell. It is used for evaluating the cell as a candidate for cell re-selection in idle mode. Corresponds to parameter q-OffsetCell broadcast in SIB4 for intra-frequency cells and in SIB5 for inter-frequency cells, specified in {{bibref|3GPP-TS.36.331|Section 6.3.1}}. For the value less than or equal to -8, and bigger than or equal to 8, only even numbers are valid. If the value is other than these, the CPE MUST reject the value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.QOffset";
+    }
+    leaf cio {
+      type int64;
+      config false;
+      description
+        "Cell individual offset applicable to a specific neighbouring cell. It is used for evaluating triggering conditions for measurement reporting in connected mode. Specified by cellIndividualOffset in MeasObjectEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. For the value less than or equal to -8, and bigger than or equal to 8, only even numbers are valid. If the value is other than these, the CPE MUST reject the value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.CIO";
+    }
+    leaf rs-tx-power {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "The downlink reference-signal transmit power, specified in {{units}}. Defined as the linear average over the power contributions (in W) of all resource elements that carry cell-specific reference signals within the operating system bandwidth. Corresponds to parameter referenceSignalPower in SIB4 as a part of PDSCH-Config IE in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.RSTxPower";
+    }
+    leaf blacklisted {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this neighbor cell is allowed for UEs as handover target or not. If {{true}}, handover is prohibited towards this cell. If {{false}}, handover is allowed toward this cell. The {{param}} parameter allows this cell to be prohibited as a handover target, while still allowing this cell to be included in the BCCH SIB4 or 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.Blacklisted";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-inter-rat-cell-g {
+    description
+      "The inter-RAT cell lists separated by technology. {{bibref|3GPP-TS.36.331|Section 6.3.1 (SIB6, 7, 8)}}.";
+    leaf max-umts-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.}} table. There can be maximum of 16 UTRAN (UMTS) neighbor cells, as specified by carrierFreqListUTRA-FDD in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.MaxUMTSEntries";
+    }
+    leaf max-gsm-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.}} table. There can be maximum of 16 GERAN (GSM) neighbor cells, as specified by carrierFreqsInfoList in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.MaxGSMEntries";
+    }
+    leaf max-cdma2000-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.}} table. There can be maximum of 32 bandclasses. In each bandclass, there can be maximum of 16 CDMA2000 carrier frequencies. In each carrier, there can be maximum of 16 CDMA2000 neighbor cells (PN offset). It is specified by neighCellList in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.MaxCDMA2000Entries";
+    }
+    leaf umts-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTSNumberOfEntries";
+    }
+    leaf gsm-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSMNumberOfEntries";
+    }
+    leaf cdma2000-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000NumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.";
+  }
+
+  grouping lte-ran-neighbor-list-inter-rat-cell-umts-g {
+    description
+      "Table containing the inter-RAT cell list for UTRA (UMTS) provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.MustInclude";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.PLMNID";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "RNC-ID of an intra-RAT UMTS neighbor cell. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.RNCID";
+    }
+    leaf cid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Cell Identifier (C-id) that identifies a cell within an RNS. This Cell Identifier together with the controlling RNC (RNC-ID) constitutes the UTRAN Cell ID (UC-ID) and is used to identify a cell uniquely within UTRAN. C-ID is either 12-bit or 16-bit value. {{bibref|3GPP-TS.25.401|Section 6.1.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.CID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65533 | 65535";
+      }
+      config false;
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Routing Area Code (RAC). The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.RAC";
+    }
+    leaf ura {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "UTRAN Registration Area (URA) {{bibref|3GPP-TS.23.401}}. Indicates to the UE which {{param}} it shall use in case of overlapping URAs. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.URA";
+    }
+    leaf uarfcnul {
+      type uint16 {
+        range "0..16383";
+      }
+      config false;
+      description
+        "The UL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.UARFCNUL";
+    }
+    leaf uarfcndl {
+      type uint16 {
+        range "0..16383";
+      }
+      config false;
+      description
+        "The DL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.UARFCNDL";
+    }
+    leaf pcpich-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      config false;
+      description
+        "Primary CPICH scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.PCPICHScramblingCode";
+    }
+    leaf pcpich-tx-power {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Primary CPICH Tx power in {{units}}. Actual values of the power are -10.0 {{units}} to 50.0 {{units}} in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the power. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 2.2.33}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.PCPICHTxPower";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-inter-rat-cell-gsm-g {
+    description
+      "Table containing the inter-RAT cell list for GERAN (GSM) provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.MustInclude";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.PLMNID";
+    }
+    leaf lac {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.LAC";
+    }
+    leaf bsic {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "BSIC of the cell per {{bibref|3GPP-TS.23.003}}, consisting of: :Bit 7:6 - not used (\"00\") :Bit 5:3 - NCC (PLMN Color Code) :Bit 2:0 - BCC (BS color code) For example, if NCC is 7 and BCC is 2 you would have 00111010 (binary) or 0x3A (hex), and the value of this parameter would be 58.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BSIC";
+    }
+    leaf ci {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Cell ID of the cell per {{bibref|3GPP-TS.23.003|Section 4.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.CI";
+    }
+    leaf band-indicator {
+      type enumeration {
+        enum "gsm850" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - GSM850";
+        }
+        enum "gsm900" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - GSM900";
+        }
+        enum "dcs1800" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - DCS1800";
+        }
+        enum "pcs1900" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - PCS1900";
+        }
+      }
+      config false;
+      description
+        "Indicates how to interpret the BCCH ARFCN. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator";
+    }
+    leaf bccharfcn {
+      type uint16 {
+        range "0..1023";
+      }
+      config false;
+      description
+        "ARFCN of this cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BCCHARFCN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-inter-rat-cell-cdma2000-g {
+    description
+      "Table containing the inter-RAT cell list for CDMA2000 provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.MustInclude";
+    }
+    leaf band-class {
+      type uint8 {
+        range "0..17";
+      }
+      config false;
+      description
+        "Defines the CDMA2000 band in which the CDMA2000 frequency carrier can be found, specified in bandclass number. BandClass is defined in {{bibref|3GPP2-C.S0057-B}} Table 1.5-1. Corresponds to parameter bandClass specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.BandClass";
+    }
+    leaf arfcn {
+      type uint16 {
+        range "0..2047";
+      }
+      config false;
+      description
+        "Defines the CDMA2000 frequency carrier within a CDMA2000 band, as specified by ARFCN-ValueCDMA2000 in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}, and {{bibref|3GPP2-C.S0002-A}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.ARFCN";
+    }
+    leaf pn-offset {
+      type uint16 {
+        range "0..511";
+      }
+      config false;
+      description
+        "Defines the PN offset that represents the \"Physical cell identity\" in CDMA2000 system, as specified by PhysCellIdCDMA2000 in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.PNOffset";
+    }
+    leaf type {
+      type enumeration {
+        enum "1x-rtt" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.Type - 1xRTT";
+        }
+        enum "hrpd" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.Type - HRPD";
+        }
+      }
+      config false;
+      description
+        "Indicates the type of the cell. This parameter determines the length of the CID parameter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.Type";
+    }
+    leaf cid {
+      type string {
+        length "0..16";
+      }
+      description
+        "Defines the global cell identity of the cell. For a 1xRTT cell, the cell identity is a binary string 47 bits long. For a HRPD cell, the cell identity is a binary string 128 bits long. The value of {{param}} parameter is interpreted as 128-bit long unsigned integer. If {{param|Type}} is {{enum|1xRTT|Type}}, the first 47 bits (6 octet) is used and the rest of this {{param}} parameter MUST be ignored by the CPE. If {{param|Type}} is {{enum|HRPD|Type}}, the entire 16 octet is used as {{param}}. Corresponds to IE CellGlobalIdCDMA2000 specified in {{bibref|3GPP-TS.36.331|Section 6.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.CID";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-in-use-g {
+    description
+      "This object contains parameters relating to the neighbor list used by the FAP based on its self-configuration capability and {{object|.CellConfig.LTE.RAN.NeighborList.}} configuration of adding and excluding cells.";
+    leaf max-lte-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.MaxLTECellEntries";
+    }
+    leaf lte-cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECellNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.";
+  }
+
+  grouping lte-ran-neighbor-list-in-use-lte-cell-g {
+    description
+      "Table containing the LTE EUTRA (i.e. intra-RAT) cell list.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.PLMNID";
+    }
+    leaf cid {
+      type uint32 {
+        range "0..268435455";
+      }
+      description
+        "Cell Identity. {{bibref|3GPP-TS.36.331|Section 6.3.4}}. Combination of {{param|PLMNID}} and {{param}} constitutes the Cell Global ID (CGI).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.CID";
+    }
+    leaf eutra-carrier-arfcn {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Indicates the ARFCN of this carrier frequency. Corresponds to parameter dl-CarrierFreq in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}, and and parameter NDL in {{bibref|3GPP-TS.36.101|Section 5.7.3}}. If the value of {{param}} is the same with the one currently being used by the, then it implies that this neighbor cell is an intra-frequency cell; otherwise, it is an inter-frequency cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.EUTRACarrierARFCN";
+    }
+    leaf phy-cell-id {
+      type uint16 {
+        range "0..503";
+      }
+      description
+        "Physical cell ID, as specified in {{bibref|3GPP-TS.36.211|Section 6.11}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.PhyCellID";
+    }
+    leaf q-offset {
+      type int64;
+      description
+        "Indicate a cell-specific offset applicable to a specific neighbouring cell. It is used for evaluating the cell as a candidate for cell re-selection in idle mode. Corresponds to parameter q-OffsetCell broadcast in SIB4 for intra-frequency cells and in SIB5 for inter-frequency cells, specified in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.QOffset";
+    }
+    leaf cio {
+      type int64;
+      description
+        "Cell individual offset applicable to a specific neighbouring cell. It is used for evaluating triggering conditions for measurement reporting in connected mode. Specified by cellIndividualOffset in MeasObjectEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.CIO";
+    }
+    leaf rs-tx-power {
+      type int64;
+      units "dBm";
+      description
+        "The downlink reference-signal transmit power, specified in {{units}}. Defined as the linear average over the power contributions (in W) of all resource elements that carry cell-specific reference signals within the operating system bandwidth. Corresponds to parameter referenceSignalPower in SIB4 as a part of PDSCH-Config IE in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.RSTxPower";
+    }
+    leaf blacklisted {
+      type boolean;
+      description
+        "Indicates whether this neighbor cell is allowed for UEs as handover target or not. If {{true}}, handover is prohibited towards this cell. If {{false}}, handover is allowed toward this cell. The {{param}} parameter allows this cell to be prohibited as a handover target, while still allowing this cell to be included in the BCCH SIB4 or 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.Blacklisted";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-in-use-inter-rat-cell-g {
+    description
+      "Table containing the inter-RAT cell lists separated by technology. {{bibref|3GPP-TS.36.331|Section 6.3.1 (SIB6, 7, 8)}}.";
+    leaf max-umts-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.}} table. There can be maximum of 16 UTRAN (UMTS) neighbor cells, as specified by carrierFreqListUTRA-FDD in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.MaxUMTSEntries";
+    }
+    leaf max-gsm-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.}} table. There can be maximum of 16 GERAN (GSM) neighbor cells, as specified by carrierFreqsInfoList in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.MaxGSMEntries";
+    }
+    leaf max-cdma2000-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.}} table. There can be maximum of 32 banclasses. In each bandclass, there can be maximum of 16 CDMA2000 carrier frequencies. In each carrier, there can be maximum of 16 CDMA2000 neighbor cells (PN offset). It is specified by neighCellList in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.MaxCDMA2000Entries";
+    }
+    leaf umts-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTSNumberOfEntries";
+    }
+    leaf gsm-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSMNumberOfEntries";
+    }
+    leaf cdma2000-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000NumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.";
+  }
+
+  grouping lte-ran-neighbor-list-in-use-inter-rat-cell-umts-g {
+    description
+      "Table containing the inter-RAT cell list for UTRA (UMTS) cell.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.PLMNID";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "RNC-ID of an intra-RAT UMTS neighbor cell. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.RNCID";
+    }
+    leaf cid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Cell Identifier (C-id) that identifies a cell within an RNS. This Cell Identifier together with the controlling RNC (RNC-ID) constitutes the UTRAN Cell ID (UC-ID) and is used to identify a cell uniquely within UTRAN. C-ID is either 12-bit or 16-bit value. {{bibref|3GPP-TS.25.401|Section 6.1.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.CID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65533 | 65535";
+      }
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "Routing Area Code (RAC). The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.RAC";
+    }
+    leaf ura {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "UTRAN Registration Area (URA) {{bibref|3GPP-TS.23.401}}. Indicates to the UE which {{param}} it shall use in case of overlapping URAs. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.URA";
+    }
+    leaf uarfcnul {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "The UL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.UARFCNUL";
+    }
+    leaf uarfcndl {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "The DL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.UARFCNDL";
+    }
+    leaf pcpich-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Primary CPICH scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.PCPICHScramblingCode";
+    }
+    leaf pcpich-tx-power {
+      type int64;
+      units "dBm";
+      description
+        "Primary CPICH Tx power in {{units}}. Actual values of the power are -10.0 {{units}} to 50.0 {{units}} in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the power. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 2.2.33}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.PCPICHTxPower";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-in-use-inter-rat-cell-gsm-g {
+    description
+      "Table containing the inter-RAT cell list for GERAN (GSM) cell.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.PLMNID";
+    }
+    leaf lac {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.LAC";
+    }
+    leaf bsic {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "BSIC of the cell per {{bibref|3GPP-TS.23.003}}, consisting of: :Bit 7:6 - not used (\"00\") :Bit 5:3 - NCC (PLMN Color Code) :Bit 2:0 - BCC (BS color code) For example, if NCC is 7 and BCC is 2 you would have 00111010 (binary) or 0x3A (hex), and the value of this parameter would be 58.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BSIC";
+    }
+    leaf ci {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Cell ID of the cell per {{bibref|3GPP-TS.23.003|Section 4.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.CI";
+    }
+    leaf band-indicator {
+      type enumeration {
+        enum "gsm850" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - GSM850";
+        }
+        enum "gsm900" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - GSM900";
+        }
+        enum "dcs1800" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - DCS1800";
+        }
+        enum "pcs1900" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - PCS1900";
+        }
+      }
+      description
+        "Indicates how to interpret the BCCH ARFCN. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator";
+    }
+    leaf bccharfcn {
+      type uint16 {
+        range "0..1023";
+      }
+      description
+        "ARFCN of this cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BCCHARFCN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-in-use-inter-rat-cell-cdma2000-g {
+    description
+      "Table containing the inter-RAT cell list for CDMA2000 cell.";
+    leaf band-class {
+      type uint8 {
+        range "0..17";
+      }
+      description
+        "Defines the CDMA2000 band in which the CDMA2000 frequency carrier can be found, specified in bandclass number. BandClass is defined in {{bibref|3GPP2-C.S0057-B|Table 1.5-1}}. Corresponds to parameter bandClass specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.BandClass";
+    }
+    leaf arfcn {
+      type uint16 {
+        range "0..2047";
+      }
+      description
+        "Defines the CDMA2000 frequency carrier within a CDMA2000 band, as specified by ARFCN-ValueCDMA2000 in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}, and {{bibref|3GPP2-C.S0002-A}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.ARFCN";
+    }
+    leaf pn-offset {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Defines the PN offset that represents the \"Physical cell identity\" in CDMA2000 system, as specified by PhysCellIdCDMA2000 in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.PNOffset";
+    }
+    leaf type {
+      type enumeration {
+        enum "1x-rtt" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.Type - 1xRTT";
+        }
+        enum "hrpd" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.Type - HRPD";
+        }
+      }
+      description
+        "Indicates the type of the cell. This parameter determines the length of the CID parameter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.Type";
+    }
+    leaf cid {
+      type string {
+        length "0..16";
+      }
+      description
+        "Defines the global cell identity of the cell. For a 1xRTT cell, the cell identity is a binary string 47 bits long. For a HRPD cell, the cell identity is a binary string 128 bits long. The value of {{param}} parameter is interpreted as 128-bit long unsigned integer. If {{param|Type}} is {{enum|1xRTT|Type}}, the first 47 bits (6 octet) is used and the rest of this {{param}} parameter MUST be ignored by the CPE. If {{param|Type}} is {{enum|HRPD|Type}}, the entire 16 octet is used as {{param}}. Corresponds to IE CellGlobalIdCDMA2000 specified in {{bibref|3GPP-TS.36.331|Section 6.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.CID";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.";
+  }
+
+  grouping cdma2000-g {
+    description
+      "This object contains parameters relating to configuring the CDMA2000 FAP.";
+    leaf tunnel-instance {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "This is the reference to the IPsec tunnel instance used by the CDMA2000 FAP. For all root data models, which use the tunnel definition provided in {{bibref|TR-262}} (InternetGatewayDevice:1 {{bibref|TR-098}} and Device:1 {{bibref|TR-181i1}}) the {{param}} MUST point to a row in the 'FAP.Tunnel.IKESA.{i}.' table, defined in {{bibref|TR-262}}. If the root data model used is Device:2 {{bibref|TR-181i2}} than the {{param}} MUST point to IPsec tunnel instance defined in {{bibref|TR-181i2}}. If the referenced object is deleted, the parameter value MUST be set to an empty string. In case of a multiple-radio-technology FAP product, each radio technology can have its own tunnels or share common tunnels. In the former case, {{param}} can contain a unique instance number. In the latter case, {{param}} under all radio technologies can have the same instance number.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.TunnelInstance";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.";
+  }
+
+  grouping cdma2000-one-x-g {
+    description
+      "This object contains parameters relating to configuring the CDMA2000 1x FAP.";
+    leaf pcfpdsn-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSNNumberOfEntries";
+    }
+    leaf max-batch-pcfpdsn-entries {
+      type uint64;
+      description
+        "Maximum number of entries in the {{object|.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.MaxBatchPCFPDSNEntries";
+    }
+    leaf batch-pcfpdsn-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSNNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.";
+  }
+
+  grouping cdma2000-one-x-ran-g {
+    description
+      "This object contains parameters relating to RAN configuring the CDMA2000 1x FAP.";
+    leaf one-x-sector-nid {
+      type int64;
+      config false;
+      description
+        "SID for 1x. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.OneXSectorNID";
+    }
+    leaf one-x-sector-sid {
+      type int64;
+      config false;
+      description
+        "NID for 1x . See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.OneXSectorSID";
+    }
+    leaf one-xpzid {
+      type int64;
+      config false;
+      description
+        "packet Zone ID for 1x packet calls";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.OneXPZID";
+    }
+    leaf base-id {
+      type int64;
+      config false;
+      description
+        "Base station ID (needed in SPM). This is also the CellID. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.BaseID";
+    }
+    leaf max-neighbor-list-entries {
+      type uint64;
+      description
+        "Maximum number of entries avaiable in {{object|.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.MaxNeighborListEntries";
+    }
+    leaf neighbor-list-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborListNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.";
+  }
+
+  grouping cdma2000-one-x-ran-rf-g {
+    description
+      "This object contains parameters relating to RF configuration of the FAP.";
+    leaf-list rfcnfl {
+      type string {
+        length "0..256";
+      }
+      config false;
+      min-elements 1;
+      description
+        "{{list}} Each item is a pair of 2-digit Band class number (as defined in {{bibref|3GPP2-C.S0057}}) followed by 4-digit FL Radio Frequency Channel Number (RFCN). Self-configuration for RFCN is controlled by {{param|.FAPControl.CDMA2000.OneX.SelfConfig.RFCNFLSelfConfigEnable}}. If the FAP's self-configuration capability for RFCN is available and enabled, this parameter MAY contain more than one item and the FAP is expected to select one from the list for RFCNFLInUse. If the self-configuration capability is not available or not enabled, then this parameter SHOULD contain only a single item. An example value is \"010001, 030500\". If multiple items are specified, they are done in the order of preference.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFL";
+    }
+    leaf rfcnfl-band-in-use {
+      type string {
+        length "0..16";
+      }
+      description
+        "The FL Band being used by the FAP. Self-configuration for Band and RFCN is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.RFCNFLConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.RFCNFLSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in RFCNFL. If the self-configuration capability is not available or not enabled, then this parameter contains the first band class value in RFCNFL.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFLBandInUse";
+    }
+    leaf rfcnfl-in-use {
+      type uint64;
+      description
+        "The FL RFCN being used by the FAP. Self-configuration for RFCN is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.RFCNFLConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.RFCNFLSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in RFCNFL. If the self-configuration capability is not available or not enabled, then this parameter contains the first RFCN value in RFCNFL.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFLInUse";
+    }
+    leaf-list pilot-pn {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "{{list}} Each item is a pilot PN offset in units of 64 PN chips. Self-configuration for pilot PN is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.PilotPNConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.PilotPNSelfConfigEnable}} from an enabled perspective. If the FAP's self-configuration capability for Pilot PN Offset is available and enabled, this parameter MAY contain more than one item and the FAP is expected to select one from the list for PilotPNInUse. If the self-configuration capability is not available or not enabled, then this parameter SHOULD contain only a single item. The multiplicity of the PN offset values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. The order of the items has no significance.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.PilotPN";
+    }
+    leaf pilot-pn-in-use {
+      type uint16 {
+        range "0..511";
+      }
+      units "64 PN chips";
+      description
+        "The Pilot PN Offset being used by the FAP in {{units}}. Self-configuration for Pilot PN Offset is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.PilotPNConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.PilotPNSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in PilotPN. If the self-configuration capability is not available or not enabled, then this parameter contains the first value in PilotPN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.PilotPNInUse";
+    }
+    leaf maxfap-tx-power {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Defines the maximum transmission power allowed on the FAP. MaxFAPTxPower is expressed as a range of allowed maximum power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<Pmax_low>;..<Pmax_high>;\". {{param}} identifies the limits between which the FAP can self-configure its maximum transmit power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerSelfConfigEnable}} from an enabled perspective. <Pmax_low>; and <Pmax_high>; are measured in dBm and have a range of -40.0 to 20.0 incremented by 0.1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.MaxFAPTxPower";
+    }
+    leaf maxfap-tx-power-in-use {
+      type int64;
+      units "0.1 dBm";
+      description
+        "The maximum transmission power measured in {{units}} currently used by the FAP. Actual values of the maximum transmission power are -40.0 dBm to 20.0 dBm in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the maximum transmission power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the range provided in {{param|MaxFAPTxPower}}. If the self-configuration capability is not available or not enabled, then this parameter contains a value selected by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.MaxFAPTxPowerInUse";
+    }
+    leaf pch-pwr-percentage {
+      type uint32 {
+        range "1000..1000000";
+      }
+      units "0.001 percent";
+      config false;
+      description
+        "Percentage of Max Sector Power Used By Paging Channel (expressed in {{units}}). For example, 93333 means 93.333% of the max sector power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.PchPwrPercentage";
+    }
+    leaf pilot-pwr-percentage {
+      type uint32 {
+        range "1000..1000000";
+      }
+      units "0.001 percent";
+      config false;
+      description
+        "Percentage of Max Sector Power Used By Pilot Channel (expressed in {{units}}). For example, 19950 means 19.95% of total.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.PilotPwrPercentage";
+    }
+    leaf sync-pwr-percentage {
+      type uint32 {
+        range "1000..1000000";
+      }
+      units "0.001 percent";
+      config false;
+      description
+        "Percentage of Max Sector Power Used By Sync Channel (expressed in {{units}}). For example, 23458 means 23.4% of the max sector power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.SyncPwrPercentage";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.";
+  }
+
+  grouping cdma2000-one-x-ran-network-listen-mode-config-g {
+    description
+      "This object contains parameters relating to self-configuration of the MaxFAPTxPower of the FAP.";
+    leaf rfcnfl-margin {
+      type uint64;
+      config false;
+      description
+        "If self-configuration of RFCNFL is enabled, this value indicates the total received signal strength margin to be applied to the entries in RFCNFL when the FAP decides on the RFCNInUse in order to bias the selection of the most preferred frequency.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.RFCNFLMargin";
+    }
+    leaf fap-coverage-target {
+      type string {
+        length "0..32";
+      }
+      config false;
+      description
+        "Defines the target value measured in dB for the range of the FAP's FL coverage, in terms of RF propagation loss. This value can be used by the FAP's selfconfiguration algorithms to help derive transmit power levels in the presence of co-channel and adjacent channel interference. {{param}} is expressed as a range of the minimum coverage path loss and the maximum coverage path loss with \"..\" (two periods) between the minimum and maximum values, i.e., \"<FAPCoverageTarget_min>..<FAPCoverageTarget_max>\". These values can be used by the FAP's selfconfiguration algorithms to help derive transmit power levels in the presence of co-channel and adjacent channel interference. <FAPCoverageTarget_min> and <FAPCoverageTarget_max> are measured in dB and have a range of [50,150] incremented by 1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.FAPCoverageTarget";
+    }
+    leaf fap-beacon-coverage-target {
+      type string {
+        length "0..32";
+      }
+      config false;
+      description
+        "Defines the target value measured in dB for the range of the FAP's FL Beacon coverage, in terms of RF propagation loss. This value can be used by the FAP's selfconfiguration algorithms to help derive beacon transmit power levels. {{param}} is expressed as a range of the minimum coverage path loss and the maximum coverage path loss with \"..\" (two periods) between the minimum and maximum values, i.e., \"<BeaconCoverageTarget_min>..<BeaconCoverageTarget_max>\". These values can be used by the FAP's selfconfiguration algorithms to help derive transmit power levels for the beacon(s) in the presence of co-channel and adjacent channel interference.\" <BeaconCoverageTarget_min> and <BeaconCoverageTarget_max> are measured in dB and have a range of [50,150] incremented by 1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.FAPBeaconCoverageTarget";
+    }
+    leaf max-coverage-edge-pilot-strength {
+      type int64;
+      units "0.1 dB";
+      config false;
+      description
+        "The maximum strength of the received pilot energy per chip, Ec, to total received spectral density, Io (signal and noise) desired for FAP users at the edge of the FAP coverage target in units of {{units}}. This value can be used by the FAP's self configuration algorithms to help prevent aggressive transmit power level settings .";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.MaxCoverageEdgePilotStrength";
+    }
+    leaf max-allowable-pilot-strength-degradation {
+      type int64;
+      units "0.1 dB";
+      config false;
+      description
+        "The maximum amount in dB by which the strength of the received pilot energy per chip, Ec, to total received spectral density, Io (signal and noise) for alien users can be degraded in the presence of FAP interference at the edge of FAP coverage, in {{units}} units.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.MaxAllowablePilotStrengthDegradation";
+    }
+    leaf-list rfcnfl-to-protect {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "{{list}} Each item is a FL RFCN corresponding to a CDMA2000 carrier that is adjacent to the RFCNFLInUse to be protected from adjacent channel interference. If any of the items in the list are adjacent to the FAP's own FL channel, the FAP MUST take the PilotStrength and total received power spectral density (Io) measured on these channels into account as part of its maximum transmit power selfconfiguration. The RFCNs in the list can belong to any operator, allowing for protection of the FAP operator's own macro layer as well as that of other operators. The list should take into account the ability of the FAP to self-configure its own FL RFCN and so SHOULD include any channels (requiring protection) which can potentially be adjacent to the RFCN selected by the FAP. For example, if only adjacent operator protection is needed and the FAP has the ability to self-configure to any channel owned by its operator, this list would be populated with the RFCNs immediately above and below the range of channels owned by the FAP operator. If an empty string then it indicates that there are no channels adjacent to the FAP that require protection, or that self-configuration of the FAP transmit power is not enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.RFCNFLToProtect";
+    }
+    leaf fap-allowed-adj-chan-coverage-hole {
+      type uint8 {
+        range "30..150";
+      }
+      units "dB";
+      config false;
+      description
+        "Defines the maximum allowed coverage hole created on carriers listed in RFCNFLToProtect by the FAP transmission, measured in {{units}}, in terms of RF propagation loss such that the {{param|MaxAllowablePilotStrengthDegradation}} is maintained outside the {{param}} for MS on that {{param|RFCNFLToProtect}}. This value can be used by the FAP's self configuration algorithms to help derive transmit power levels.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.FAPAllowedAdjChanCoverageHole";
+    }
+    leaf acir {
+      type uint64;
+      units "dB";
+      config false;
+      description
+        "AdjacentChannelInterferenceRatio value in {{units}} to be used when determining the coverage hole created on adjacent channels due to leakage.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.ACIR";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.";
+  }
+
+  grouping cdma2000-one-x-ran-access-parameters-g {
+    description
+      "The object used for configuring access parameter messages for 1x. See {{bibref|3GPP2-C.S0005}}.";
+    leaf nom-pwr {
+      type int64;
+      config false;
+      description
+        "Nominal power correction factor used by the mobile in open loop power adjustment. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.NomPwr";
+    }
+    leaf init-pwr {
+      type int64;
+      config false;
+      description
+        "Initial power offset used by the mobile in open loop power adjustment. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.InitPwr";
+    }
+    leaf pwr-step-indb {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Power step increment in successive access probes. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.PwrStepIndb";
+    }
+    leaf nom-pwr-ext {
+      type uint8 {
+        range "0..1";
+      }
+      units "dBm";
+      config false;
+      description
+        "{{param}} should be zero for BC0 and BC1. For other band classes, {{param}} is 1 if Mobile's correction factor is between -24dBm and -9dBm. Otherwise {{param}} is zero. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.NomPwrExt";
+    }
+    leaf apm-auth {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Enabling/disabling global authentication. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.APMAuth";
+    }
+    leaf apm-rand-update-prd {
+      type uint16 {
+        range "16..14400";
+      }
+      units "seconds";
+      config false;
+      description
+        "The period (in {{units}}) that the BSS updates the RAND value sent via APM. Only 2 second multiples accepted.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.APMRandUpdatePrd";
+    }
+    leaf initialpwr {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Initial power offset for access. The base station shall set this field to the correction factor to be used by mobile stations in the open loop power estimate for the initial transmission on an Access Channel, expressed as a two's complement value in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Initialpwr";
+    }
+    leaf pwr-step {
+      type uint8 {
+        range "0..7";
+      }
+      units "dB";
+      config false;
+      description
+        "Power increment. The base station shall set this field to the value by which mobile stations are to increase their transmit power between successive access probes in an access probe sequence, in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.PwrStep";
+    }
+    leaf num-step {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Number of access probes. The base station shall set this field to one less than the maximum number of access probes mobile stations are to transmit in a single access probe sequence.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.NumStep";
+    }
+    leaf max-cap-size {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Maximum Access Channel message capsule size. The base station shall set this field to the value in the range 0 to 7. {{param}} is set to three less than the maximum number of Access Channel frames in an Access Channel message capsule.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.MaxCapSize";
+    }
+    leaf preamble-size {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Access Channel preamble length. The base station shall set this field to one less than the number of Access Channel frames that mobile stations are to transmit in each Access Channel preamble.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.PreambleSize";
+    }
+    leaf psist09 {
+      type uint8 {
+        range "0..63";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 0 - 9. A value of 63 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist09";
+    }
+    leaf psist10 {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 10 (test Mobile). A value of 7 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist10";
+    }
+    leaf psist11 {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 11 (emergency Mobile). A value of 7 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist11";
+    }
+    leaf psist12 {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 12. A value of 7 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist12";
+    }
+    leaf psist13 {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 13. A value of 7 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist13";
+    }
+    leaf psist14 {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 14. A value of 7 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist14";
+    }
+    leaf psist15 {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 15. A value of 7 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist15";
+    }
+    leaf msg-psist {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence modifier for access channel attempts transmitting a message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.MsgPsist";
+    }
+    leaf reg-psist {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence modifier for registration message transmission.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.RegPsist";
+    }
+    leaf probe-pn-ran {
+      type uint8 {
+        range "0..9";
+      }
+      config false;
+      description
+        "Time randomization for access channel probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.ProbePNRan";
+    }
+    leaf acc-tmo {
+      type uint8 {
+        range "0..15";
+      }
+      units "80 ms slots";
+      config false;
+      description
+        "Access transmission timeout. Two less than the time the mobile has to wait before determining that the probe is not received by the BSS. It is in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.AccTmo";
+    }
+    leaf probe-bkoff {
+      type uint8 {
+        range "0..15";
+      }
+      units "frames";
+      config false;
+      description
+        "One less than maximum number for randomized delay between successive access probes in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.ProbeBkoff";
+    }
+    leaf bkoff {
+      type uint8 {
+        range "0..15";
+      }
+      units "80 ms slots";
+      config false;
+      description
+        "One less than maximum number for randomized delay between successive access sequences in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Bkoff";
+    }
+    leaf max-req-seq {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Maximum number of access probe sequences for an access request.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.MaxReqSeq";
+    }
+    leaf max-rsp-seq {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Maximum number of access probe sequences for an access response";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.MaxRspSeq";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.";
+  }
+
+  grouping cdma2000-one-x-ran-system-parameters-g {
+    description
+      "The object used for configuring system parameter messages for 1x";
+    leaf reg-zone {
+      type uint16 {
+        range "0..4095";
+      }
+      config false;
+      description
+        "registration zone number (refer to Section 2.6.5.1.5 of {{bibref|3GPP2-C.S0005}})";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.RegZone";
+    }
+    leaf total-zones {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Total number of zones the mobile shall retain for zone based registration. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.TotalZones";
+    }
+    leaf zone-timer {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "timer value to be used by the mobile in the zone registration timer. Refer to table 3.7.2.3.2.1-1 of the standard {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.ZoneTimer";
+    }
+    leaf reg-period {
+      type uint8 {
+        range "29..85";
+      }
+      config false;
+      description
+        "Registration period for timer based registration. Registration period is calculated from the formula 2^(REG_PRD/4) x 0.08 seconds. Thus a value of 59 corresponds to 1853.6 seconds (~ 1/2 hour). See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.RegPeriod";
+    }
+    leaf srch-win-a {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Search window size to be used ny the mobile for active set and candidate set. Refer to table 2.6.6.2.1-1 of {{bibref|3GPP2-C.S0005}}. For example, 11 corresponds to 130 chips";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.SrchWinA";
+    }
+    leaf srch-win-n {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Search window size to be used by the mobile for neighbor set. Refer to table 2.6.6.2.1-1 of {{bibref|3GPP2-C.S0005}}. For example, 8 corresponds to 60 chips";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.SrchWinN";
+    }
+    leaf srch-win-r {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Search window size to be used by the mobile for remaining set. Refer to table 2.6.6.2.1-1 of {{bibref|3GPP2-C.S0005}}. For example, 8 corresponds to 60 chips";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.SrchWinR";
+    }
+    leaf nghbr-max-age {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "neighbor set maximum age beyond which the mobiles are supposed to drop a neighbor. This is the count of neighbout list updat or extended neighbor list updates a mobile shall receive before removing a neighbor from the neighbor list. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.NghbrMaxAge";
+    }
+    leaf pwr-rep-thresh {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "Power control reporting threshold. Number of bad frames a mobile should receive before sending a PMRM message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrRepThresh";
+    }
+    leaf pwr-rep-frames {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Duration (in number of frames) for measuring bad frames - given by equation 2^(PWR_REP_FRAMES/2) x 5 frames. For example, 6 corresponds to 40 frames. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrRepFrames";
+    }
+    leaf pwr-thresh-enable {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "enable/disable power measurement report message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrThreshEnable";
+    }
+    leaf pwr-period-enable {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "enable/disable periodic power measurement report message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrPeriodEnable";
+    }
+    leaf pwr-rep-delay {
+      type uint8 {
+        range "0..32";
+      }
+      config false;
+      description
+        "Delay (in unit of four frames) following a PMRM before the mobile restarts counting bad frames for power control measuremnt. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrRepDelay";
+    }
+    leaf rescan {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "If {{param}} is set to 1, the mobiles should restart and reinitialize the System Parameters message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.Rescan";
+    }
+    leaf tadd {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "Power threshold (in {{units}}) for transferring a neighbor from neighbor set or remaining set to active set. For example, a value of 26 corresponds to -13 dB. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.Tadd";
+    }
+    leaf tdrop {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "Drop threshold (in {{units}}) to start a handoff timer to drop a neighbor from active or candidate set. For example, 30 corresponds to -15dB. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.Tdrop";
+    }
+    leaf tcomp {
+      type uint8 {
+        range "0..15";
+      }
+      units "0.5 dB";
+      config false;
+      description
+        "If a pilot in condidate set exceeds the power of a pilot in active set by threshold, the mobile shall send a power strenght measurement report message. This threshold is defined in unit of {{units}}. For example, 5 corresponds to a threshold of 2.5 dB. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.Tcomp";
+    }
+    leaf t-tdrop {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Timer value for which an action is taken by the mobile for a neighbor in candidate set or in active set. Refer to Table 2.6.6.2.3-1 of the {{bibref|3GPP2-C.S0005}} for details. For example, 3 corresponds to four seconds";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.TTdrop";
+    }
+    leaf in-traffic-tadd {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "T-ADD value (in {{units}}) used for in-traffic system parameter message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.InTrafficTadd";
+    }
+    leaf in-traffic-tdrop {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "T-Drop value (in {{units}}) used in in-traffic system parameter message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.InTrafficTdrop";
+    }
+    leaf in-traffic-tcomp {
+      type uint8 {
+        range "0..15";
+      }
+      units "dB";
+      config false;
+      description
+        "T_Comp value (in {{units}}) used for in-traffic system parameter message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.InTrafficTcomp";
+    }
+    leaf in-traffic-ttdrop {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "T_Tdrop timer value value used for in-traffic system parameter message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.InTrafficTtdrop";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.";
+  }
+
+  grouping cdma2000-one-x-ran-extended-system-parameters-g {
+    description
+      "The object used for configuring extended system parameter messages for 1x";
+    leaf prev {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "protocol revision";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.Prev";
+    }
+    leaf p-min-rev {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "minimum protocol revision";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.PMinRev";
+    }
+    leaf delete-for-tmsi {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Delete Foreign TMSI. The base station shall set this field to '1' to cause the mobile station to delete its TMSI if the TMSI was assigned in a different TMSI zone from that specified by the TMSI_ZONE field of this message; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.DeleteForTMSI";
+    }
+    leaf use-tmsi {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Use TMSI indicator. The base station shall set this field to the value shown next field corresponding to the type of MSID that the mobile station is to use on the Access Channel.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.UseTMSI";
+    }
+    leaf pref-msid-type {
+      type uint8 {
+        range "0..3";
+      }
+      config false;
+      description
+        "Preferred Access Channel Mobile Station Identifier Type. F294. The base station shall set this field to the value shown as below corresponding to the type of MSDI that the mobile station is to use on the Access Channel. [useTMSI] [prefMSIDType] [description] 0 00 IMSI_S and ESN 0 10 IMSI 0 11 IMSI and ESN 1 10 TMSI; IMSI 1 11 TMSI; IMSI and ESN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.PrefMSIDType";
+    }
+    leaf mcc {
+      type uint16 {
+        range "0..1023";
+      }
+      config false;
+      description
+        "Mobile Country Code. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.MCC";
+    }
+    leaf imsi1112 {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "11th and 12th digits of IMSI. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.IMSI1112";
+    }
+    leaf tmsi-zone-len {
+      type uint8 {
+        range "1..8";
+      }
+      config false;
+      description
+        "TMSI zone length. The base station shall set this field to the number of octets included in the TMSI_ZONE. The base station shall set this field to a value in the range 1 to 8 inclusive.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.TMSIZoneLen";
+    }
+    leaf tmsi-zone {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "TMSI zone. The base station shall set this field to the TMSI zone number as specified in {{bibref|3GPP2-N.S0010}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.TMSIZone";
+    }
+    leaf bcast-index {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Broadcast slot cycle index. To enable periodic broadcast paging, the base station shall set this field to and unsigned 3-bit number in the range 1-7, equal to the broadcast slot cycle index. To disable periodic broadcast paging, the base station shall set this field to '000'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.BcastIndex";
+    }
+    leaf imsit-supported {
+      type int64;
+      config false;
+      description
+        "1: IMISI_T is supported, 0: IMSI_T is not supported. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.IMSITSupported";
+    }
+    leaf soft-slope {
+      type uint8 {
+        range "0..63";
+      }
+      config false;
+      description
+        "The slope in the inequality criterion for adding a pilot to the Active Set, or dropping a pilot from the Active Set. The base station shall set this field as an unsigned binary number.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.SoftSlope";
+    }
+    leaf add-intercept {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "The intercept in the inequality criterion for adding a pilot to the Active Set. The base station shall set this field as a two's complement signed binary number, in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AddIntercept";
+    }
+    leaf drop-intercept {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "The intercept in the inequality criterion for dropping a pilot from the Active Set. The base station shall set this field as a two's complement signed binary number, in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.DropIntercept";
+    }
+    leaf max-num-alt-so {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Maximum number of alternative service options. The base station shall set this field to the maximum number of alternative service option numbers that the mobile station is allowed to include in the Origination Message or the Page Response Message. For mobile stations with MOB_P_REVs less than seven, the alternative service options are those service options defined in TSB-58B and related to SERVICE_OPTION in Origination Message and the Page Response Message. For mobile stations with MOB_P_REVs equal to or greater than seven, the alternative service options are those service options defined in TSB-58B without service group number assigned and related to SERVICE_OPTION in Origination Message and the Page Response Message. The base station sets this field to a value greater than zero, in addition, the base station shall allow the mobile station with MOB_P_REVs equal to or greater than 7 to include - a 4 or 8-bit service option bitmap in the Origination Message and the Page Response Message; - alternative service option numbers, not limited to MAX_ALT_SO_NUM, in the Enhanced Origination Message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.MaxNumAltSo";
+    }
+    leaf reselected-included {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "System reselection parameters included. If the base station is including system reselection parameters, the base station shall set this field to '1'; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.ReselectedIncluded";
+    }
+    leaf ec-thresh {
+      type uint64;
+      units "dBm";
+      config false;
+      description
+        "Pilot power threshold. If RESELECTINCLUDED is set to '1', the base station shall include the field EC_THRESH and set this field to: [ (pilot_power_threshold + 115 ) ] where pilot_power_threshold is the pilot power, Ec, in {{units}}/1.23 MHz, below which the mobile station is to perform system reselection; otherwise, the base station shall omit this field.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.EcThresh";
+    }
+    leaf ec-io-thresh {
+      type uint64;
+      config false;
+      description
+        "Pilot Ec / Io threshold. If RESELECTINCLUDED is set to '1', the base station shall include the field EC_I0_THRESH and set this field to: [ - 20 x log10 (pilot_threshold) ] where pilot_threshold is the pilot Ec/Io below which the mobile station is to perform system reselection; otherwise, the base station shall omit this field.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.EcIoThresh";
+    }
+    leaf pilot-report {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Pilot reporting indicator. The base station shall set this field to '1' if the mobile station is to report the additional pilots which have pilot strength exceeding T_ADD in all Access Channel messages. The base station shall set this field to '0' if the mobile station is to report the additional pilots which have pilot strengths exceeding T_ADD only in the Origination Message and the Page Response Message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.PilotReport";
+    }
+    leaf nghbr-set-entry-info {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Neighbor Set access entry handoff information included indicator. If the base station is including information on the Neighbor Set access entry handoff, the base station shall set this field to '1'; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.NghbrSetEntryInfo";
+    }
+    leaf access-ho-order {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Access entry handoff permitted indicator. If NghbrSetEntryInfo is set to '1', the base station shall set this field to '1' if the mobile station is permitted to perform an access entry handoff after receiving a message while performing the Mobile Station Order and Message Processing Operation in the Mobile Station Idle State; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccessHOOrder";
+    }
+    leaf nghbr-set-access-info {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Neighbor Set access handoff included indicator. If the base station is including information on the Neighbor Set access handoff or access probe handoff, the base station shall set this field to '1', otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.NghbrSetAccessInfo";
+    }
+    leaf access-ho {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Access handoff permitted indicator. If NghbrSetEntryInfo is set to '1', the base station shall set this field to '1' if the mobile station is permitted to perform an access handoff; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccessHO";
+    }
+    leaf access-ho-msg-rsp {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Access handoff permitted for message response indicator. If AccessHO is set to '1', the base station shall include this field and set it as described below; otherwise, the base station shall omit this field. The base station shall set this field to '1' if the mobile station is permitted to perform an access handoff after receiving a message and before responding to that message in the System Access State; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccessHOMsgRsp";
+    }
+    leaf access-probe-ho {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Access probe handoff permitted indicator. If NghbrSetEntryInfo is set to '1', the base station shall set this field to '1' if the base station is permitted to perform an access probe handoff; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccessProbeHO";
+    }
+    leaf acc-ho-list-upd {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Access handoff list update permitted indicator. If AccessProbeHO is included and is set to '1', the base station shall set this field to '1' if the mobile station is permitted to update the access handoff list during an access attempt; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccHOListUpd";
+    }
+    leaf acc-probe-ho-other-msg {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Access probe handoff permitted for messages other than the Origination Message and the Page Response Message. If AccessProbeHO is set to '1', the base station shall set this field to '1' if the mobile station is permitted to perform an access probe handoff for messages other than the Origination Message and the Page Response. The base station shall set this field to '0' if the mobile station is permitted to perform an access probe handoff only for the Origination Message and the Page Response Message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccProbeHOOtherMsg";
+    }
+    leaf max-num-probe-ho {
+      type uint8 {
+        range "0..3";
+      }
+      config false;
+      description
+        "Maximum number of times that mobile station is permitted to perform an access probe handoff. If AccessProbeHO is set to '1', the base station shall set this field to the maximum number of times the mobile station is allowed to perform an access probe handoff within an access attempt minus one.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.MaxNumProbeHO";
+    }
+    leaf brdcast-gps-assit {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "If {{param}} is set to 1, then Braodcast GPS assist is supported. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.BrdcastGPSAssit";
+    }
+    leaf qpch-supported {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Quick Paging Channel Supported Indication. If the base station supports Quick Paging Channel operation, the base station shall set this field to '1'; otherwise the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHSupported";
+    }
+    leaf num-qpch {
+      type uint8 {
+        range "1..3";
+      }
+      config false;
+      description
+        "Number of Quick Paging Channels. If the base station sets QPCHSUPPORTED to '1', the base station shall include this field and set it as described below; otherwise, the base station shall omit this field. The base station shall set this field to the number of Quick Paging Channels on this CDMA Channel. The base station shall not set this field to '00'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.NumQPCH";
+    }
+    leaf qpch-rate {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Quick Paging Channel indicator rate. See {{bibref|3GPP2-C.S0005}}. {{param}} is set as follows: 0: 4800bps; 1: 9600bps.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHRate";
+    }
+    leaf qpch-pwr-level-page {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Quick Paging Channel paging indicator transmit power level. {{param}} is set as follows: 0: 5 dB below; 1: 4 dB below; 2: 3 dB below; 3: 2 dB below; 4: 1 dB below; 5: Same; 6: 1 dB above; 7: 2dB above.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHPwrLevelPage";
+    }
+    leaf qpc-hcci-supported {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Quick Paging Channel configuration change indicator supported. {{param}} is set as follows: if the base station is to support configuration change indicators on the Quick Paging Channel, {{param}} to '1'; otherwise {{param}} is set to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHcciSupported";
+    }
+    leaf qpch-pwr-level-config {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Quick Paging Channel configuration change indicator CONFIG transmit power level. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHPwrLevelConfig";
+    }
+    leaf sdb-supported {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Short Data Burst supported indicator. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.SDBSupported";
+    }
+    leaf r-lgain-traffic-pilot {
+      type uint8 {
+        range "0..63";
+      }
+      units "0.125 dB";
+      config false;
+      description
+        "Gain adjustment of the Reverse Traffic Channel relative to the Reverse Pilot Channel for Radio Configurations greater than 2. {{param}} is set to the correction factor to be used by mobile stations in setting the power of a reverse traffic channel, expressed as a two's complement value in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.RLgainTrafficPilot";
+    }
+    leaf rvs-pwr-ctrl-delay-incl {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Reverse Power Control Delay included indicator. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.RvsPwrCtrlDelayIncl";
+    }
+    leaf rvs-pwr-ctrl-delay {
+      type uint8 {
+        range "0..3";
+      }
+      units "1.25 ms";
+      config false;
+      description
+        "The reverse power control delay. {{param}} is setto the closed-loop reverse power control delay minus one (the closed-loop reverse power control delay is the time between the end of a gated-on reverse PCG and the beginning of the Forward Power Control Subchannel in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.RvsPwrCtrlDelay";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.";
+  }
+
+  grouping cdma2000-one-x-ran-forward-pwr-ctr-g {
+    description
+      "The object used for configuring extended channel assignment messages for 1x";
+    leaf fpcfch-init-setpt {
+      type int64;
+      units "0.125 dB";
+      config false;
+      description
+        "Initial Fundamental Channel outer loop Eb/Nt setpoint in {{units}}. For example, 56 corresponds to 7 dB. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCFCHInitSetpt";
+    }
+    leaf fpc-subchan-gain {
+      type int64;
+      units "0.25 dB";
+      config false;
+      description
+        "Forward power control subchannel relative to fwd traffic channel in {{units}}. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCSubchanGain";
+    }
+    leaf rl-gain-adj {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Reverse Traffic Channel power relative to access power in {{units}}. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.RLGainAdj";
+    }
+    leaf fpcfchfer {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "Fundamental Channel target frame error rate. Refer to table 3.7.3.3.2.25-2 of {{bibref|3GPP2-C.S0005}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCFCHFER";
+    }
+    leaf fpcfch-min-setpt {
+      type int64;
+      units "0.125 dB";
+      config false;
+      description
+        "Minimum Fundamental Channel Outer Loop Eb/Nt setpoint in {{units}}. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCFCHMinSetpt";
+    }
+    leaf fpcfch-max-setpt {
+      type int64;
+      units "0.125 dB";
+      config false;
+      description
+        "Maximum Fundamental Channel Outer Loop Eb/Nt setpoint in {{units}}. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCFCHMaxSetpt";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.";
+  }
+
+  grouping cdma2000-one-x-ran-hard-handoff-g {
+    description
+      "This object provides configurable parameters for 1x Handout";
+    leaf handout-enable {
+      type boolean;
+      config false;
+      description
+        "Enabling handout operation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.HandoutEnable";
+    }
+    leaf ho-pilot-power-thresh {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Pilot power threshold (in {{units}} relative to the FAP pilot power) for handout declaration";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.HOPilotPowerThresh";
+    }
+    leaf ho-pilot-duration {
+      type uint8 {
+        range "20..50";
+      }
+      units "100ms";
+      config false;
+      description
+        "Timethreshold for handout declaration (in {{units}})";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.HOPilotDuration";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.";
+  }
+
+  grouping cdma2000-one-x-ran-hard-handoff-stats-g {
+    description
+      "This object contains statistics for all Handouts of the 1x FAP.";
+    leaf tx-ho-required {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of Handout Required messages sent to the MSC";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.TxHORequired";
+    }
+    leaf rx-ho-command {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of Handout Command messegaes received from the MSC";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.RxHOCommand";
+    }
+    leaf ho-required-rejected {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of HO required requests rejected by the MSC";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.HORequiredRejected";
+    }
+    leaf ho-required-unanswered {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of HO required requests for which no response received from the MSC";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.HORequiredUnanswered";
+    }
+    leaf tx-uhdm {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number UHDMs sent to mobiles";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.TxUHDM";
+    }
+    leaf rx-ns-ack {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of MSAcks received from the mobile in response to UHDM";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.RxNSAck";
+    }
+    leaf ho-failure-count {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of Handout attempts declared as failure";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.HOFailureCount";
+    }
+    leaf call-drop-count {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total numer of call drops after a HO attempt. RTC lost without MSack";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.CallDropCount";
+    }
+    leaf tx-ho-commence {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Number of Handout Commenced messages sent to MSC";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.TxHOCommence";
+    }
+    leaf rx-ho-session-clear {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Number of session clear commands received form the core";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.RxHOSessionClear";
+    }
+    leaf return-on-failure-count {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of times a Return On Handoff failure was declared";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.ReturnOnFailureCount";
+    }
+    leaf one-pilot-report-count {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Number of times only one pilot was reported in HO Required message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.OnePilotReportCount";
+    }
+    leaf two-pilot-report-count {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Number of times only two pilot was reported in HO Required message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.TwoPilotReportCount";
+    }
+    leaf three-pilot-report-count {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Number of times only three pilot was reported in HO Required message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.ThreePilotReportCount";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.";
+  }
+
+  grouping cdma2000-one-x-ran-power-control-g {
+    description
+      "Configuration Managed Object for OTA power control attribute.";
+    leaf one-xpcfpc-incl {
+      type int64;
+      config false;
+      description
+        "Whether Forward power control information included in Power Control message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCFPCIncl";
+    }
+    leaf one-xpcfpcfch-min-setpt {
+      type int64;
+      units "0.125 dB";
+      config false;
+      description
+        "The value for the minimum Fundamental Channel Outer Loop Eb/Nt setpoint, in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCFPCFCHMinSetpt";
+    }
+    leaf one-xpcfpcfch-max-setpt {
+      type int64;
+      units "0.125 dB";
+      config false;
+      description
+        "The value for the maximum Fundamental Channel Outer Loop Eb/Nt setpoint, in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCFPCFCHMaxSetpt";
+    }
+    leaf one-xpcrpc-incl {
+      type int64;
+      config false;
+      description
+        "Whether reverse Power control information included in the Power Control Message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCRPCIncl";
+    }
+    leaf one-xpcfch-chan-adj-gain {
+      type int64;
+      units "0.125 dB";
+      config false;
+      description
+        "Channel adjustment gain (in {{units}}) for Reverse Fundamental Channel.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCFCHChanAdjGain";
+    }
+    leaf one-xpc-pwr-rep-thresh {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "The number of bad frames to be received in a measurement period on the channel which carries the Power Control Subchannel before mobile stations are to generate a Power easurement Report Message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCPwrRepThresh";
+    }
+    leaf one-xpc-pwr-rep-frames {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Power control reporting frame count. Number of frames over which the mobile station measures frame errors. For example, 7 corresponds to 55 frames. Refer to {{bibref|3GPP2-C.S0005}} for mapping between this value and the actual frame count.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCPwrRepFrames";
+    }
+    leaf one-x-pwr-thresh-enable {
+      type int64;
+      config false;
+      description
+        "Threshold report mode indicator. If the mobile station is to generate threshold Power Measurement Report Messages, the base station shall set this field to '1'. If the mobile station is not to generate threshold Power Measurement Report Messages, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPwrThreshEnable";
+    }
+    leaf one-xpc-pwr-period-enable {
+      type int64;
+      config false;
+      description
+        "Periodic report mode indicator. If the mobile station is to generate periodic Power Measurement Report Messages, the base station shall set this field to '1'. If the mobile station is not to generate periodic Power Measurement Report Messages, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCPwrPeriodEnable";
+    }
+    leaf one-xpc-pwr-rep-delay {
+      type uint8 {
+        range "0..31";
+      }
+      units "4 frames";
+      config false;
+      description
+        "Power report delay. The period that the mobile station waits following a Power Measurement Report Message before restarting frame counting for power control purposes. The base station shall set this field to the power report delay values in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCPwrRepDelay";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.";
+  }
+
+  grouping cdma2000-one-x-ran-neighbor-list-g {
+    description
+      "This object contains information common to all neighbors of a sector. This object has only one instance.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.Alias";
+    }
+    leaf pilot-inc {
+      type int64;
+      config false;
+      description
+        "pilot increment policy for this network. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.PilotInc";
+    }
+    leaf one-x-neighbor-index {
+      type int64;
+      description
+        "Macro neighbour index. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborIndex";
+    }
+    leaf neighbor-config {
+      type enumeration {
+        enum "same-config" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborConfig - SameConfig";
+        }
+        enum "same-paging" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborConfig - SamePaging";
+        }
+        enum "diff-paging" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborConfig - DiffPaging";
+        }
+        enum "unknown" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborConfig - Unknown";
+        }
+      }
+      config false;
+      description
+        "Neighbor configuration in terms of number of frequencies having paging channels as defined in Section 3.7.2.3.2 of the {{bibref|3GPP2-C.S0005}} standard";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborConfig";
+    }
+    leaf neighbor-pn {
+      type int64;
+      description
+        "PN offset of the neighbor. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborPN";
+    }
+    leaf search-priority {
+      type enumeration {
+        enum "low" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.SearchPriority - Low";
+        }
+        enum "medium" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.SearchPriority - Medium";
+        }
+        enum "high" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.SearchPriority - High";
+        }
+        enum "very-high" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.SearchPriority - VeryHigh";
+        }
+      }
+      config false;
+      description
+        "priority level for serching this neighbor. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.SearchPriority";
+    }
+    leaf neighbor-band {
+      type enumeration {
+        enum "0" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 0";
+        }
+        enum "1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 1";
+        }
+        enum "2" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 2";
+        }
+        enum "3" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 3";
+        }
+        enum "4" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 4";
+        }
+        enum "5" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 5";
+        }
+        enum "6" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 6";
+        }
+      }
+      config false;
+      description
+        "Neighbor band class. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand";
+    }
+    leaf neighbor-frequency {
+      type int64;
+      config false;
+      description
+        "frequency of neighbor. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborFrequency";
+    }
+    leaf frequency-included {
+      type int64;
+      config false;
+      description
+        "Flag to indicate if the channel id included. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.FrequencyIncluded";
+    }
+    leaf in-traffic {
+      type int64;
+      config false;
+      description
+        "whether this neighbor can be used for in-traffic neighborlist message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.InTraffic";
+    }
+    leaf overhead-msg {
+      type int64;
+      config false;
+      description
+        "whether this neighbor can be used for overhead neighborlist message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OverheadMsg";
+    }
+    leaf base-identifier {
+      type int64;
+      config false;
+      description
+        "unique identifire of the neighboring cell (optional)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.BaseIdentifier";
+    }
+    leaf air-interface {
+      type enumeration {
+        enum "one-x" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.AirInterface - OneX";
+        }
+        enum "is95" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.AirInterface - IS95";
+        }
+        enum "hrpd" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.AirInterface - HRPD";
+        }
+        enum "other" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.AirInterface - Other";
+        }
+      }
+      config false;
+      description
+        "Air interface technology of the neighbor.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.AirInterface";
+    }
+    leaf hand-out-capable {
+      type int64;
+      config false;
+      description
+        "Flag to indicate if the handOutCapability is possible.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.HandOutCapable";
+    }
+    leaf one-x-neighbor-longitude {
+      type string {
+        length "0..16";
+      }
+      config false;
+      description
+        "Longitude for this neighbor. Parameter is a string representing a floating point real number (+/- XXX.YY). Where + for East, - for West, XXX.Y ranges between 0.0 and 180.0 .";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborLongitude";
+    }
+    leaf one-x-neighbor-latitude {
+      type string {
+        length "0..16";
+      }
+      config false;
+      description
+        "Lattitude for this neighbor. Parameter is a string representing a floating point number (+/-XX.Y). + for North, - for South, XX.Y ranges between 0.0 and 90.0.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborLatitude";
+    }
+    leaf one-x-neighbor-msc-id {
+      type uint32 {
+        range "0..16777215";
+      }
+      config false;
+      description
+        "IOS MSCID of the neighbors. See {{bibref|3GPP2-A.S0014}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborMSCId";
+    }
+    leaf one-x-neighbor-ios-cell-id {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Cell Identifier of the neighbor (formatted according to Cell Identification Discriminator = '0000 0010', i.e., 12-bit cell value and 4-bit sector value). See {{bibref|3GPP2-A.S0014}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborIOSCellId";
+    }
+    leaf force-in-overhead {
+      type boolean;
+      config false;
+      description
+        "If {{param}} is set to {{true}}, the FAP SHOULD include this Neighbor List entry in the Neighbor List overhead messages (see {{bibref|3GPP2-C.S0005}}. Otherwise, {{param}} is set to {{false}}, in which case the FAP MAY include this Neighbor List entry in the Neighbor List overhead messages.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.ForceInOverhead";
+    }
+    leaf included-in-overhead {
+      type boolean;
+      description
+        "If {{param}} is set to {{true}}, the FAP is currently including this Neighbor List entry in the Neighbor List overhead messages (see {{bibref|3GPP2-C.S0005}}. Otherwise, {{param}} is set to {{false}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.IncludedInOverhead";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.";
+  }
+
+  grouping cdma2000-one-x-ran-apidm-g {
+    description
+      "This object can be configured only if {{param|.Capabilities.CDMA2000.OneX.FemtoOverheadMessagesCapable}} is set to {{true}}.";
+    leaf association-type {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "The FAP shall set this field to the value shown in {{bibref|3GPP2-C.S0005}} corresponding to the configuration of the base station.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.AssociationType";
+    }
+    leaf apidlen {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "The FAP shall set this field to the length of the access point identification in units of 16 bits. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.APIDLEN";
+    }
+    leaf apid {
+      type binary {
+        length "0..16";
+      }
+      config false;
+      description
+        "Access Point Identification. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.APID";
+    }
+    leaf apidmask {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Access Point identification Mask. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.APIDMASK";
+    }
+    leaf iosmscid {
+      type uint32 {
+        range "0..16777215";
+      }
+      config false;
+      description
+        "MSC_ID of the base station. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.IOSMSCID";
+    }
+    leaf ioscellid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "CELL_ID of the base station. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.IOSCELLID";
+    }
+    leaf intrafreqhohysincl {
+      type boolean;
+      config false;
+      description
+        "This field indicates whether the INTRAFREQHOHYS field is valid and included in Access Point Identification message. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTRAFREQHOHYSINCL";
+    }
+    leaf intrafreqhohys {
+      type uint8 {
+        range "0..127";
+      }
+      config false;
+      description
+        "Intra Frequency Handoff Hysteresis. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTRAFREQHOHYS";
+    }
+    leaf intrafreqhoslopeincl {
+      type boolean;
+      config false;
+      description
+        "This field indicates whether the INTRAFREQHOSLOPE field is valid and included in Access Point Identification message. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTRAFREQHOSLOPEINCL";
+    }
+    leaf intrafreqhoslope {
+      type uint8 {
+        range "0..63";
+      }
+      config false;
+      description
+        "Intra Frequency Handoff Slope. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTRAFREQHOSLOPE";
+    }
+    leaf interfreqhohysincl {
+      type boolean;
+      config false;
+      description
+        "This field indicates whether the INTERFREQHOHYS field is valid and included in Access Point Identification message. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQHOHYSINCL";
+    }
+    leaf interfreqhohys {
+      type uint8 {
+        range "0..127";
+      }
+      config false;
+      description
+        "Inter frequency handoff hysteresis. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQHOHYS";
+    }
+    leaf interfreqhoslopeincl {
+      type boolean;
+      config false;
+      description
+        "This field indicates whether the INTERFREQHOSLOPE field is valid and included in Access Point Identification message. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQHOSLOPEINCL";
+    }
+    leaf interfreqhoslope {
+      type uint8 {
+        range "0..63";
+      }
+      config false;
+      description
+        "Inter frequency handoff slope. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQHOSLOPE";
+    }
+    leaf interfreqsrchthincl {
+      type boolean;
+      config false;
+      description
+        "This field indicates whether the INTERFREQSRCHTH field is valid and included in Access Point Identification message. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQSRCHTHINCL";
+    }
+    leaf interfreqsrchth {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "Inter-frequency search threshold. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQSRCHTH";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.";
+  }
+
+  grouping cdma2000-one-x-ran-apidtm-g {
+    description
+      "This object can be configured only if {{param|.Capabilities.CDMA2000.OneX.FemtoOverheadMessagesCapable}} is set to {{true}}.";
+    leaf apidtextcha-ri-len {
+      type uint16 {
+        range "0..256";
+      }
+      config false;
+      description
+        "Access Point identification Text CHARi field Length ({{param|APIDTEXTCHARi}}). Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDTM.APIDTEXTCHARiLEN";
+    }
+    leaf apidtextmsgencoding {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "Access Point identification Text message encoding. Refer {{bibref|3GPP2-C.S0005}} and {{bibref|3GPP2-C.R1001}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDTM.APIDTEXTMSGENCODING";
+    }
+    leaf apidtextcha-ri {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "Access Point Identification Text. Refer {{bibref|3GPP2-C.S0005}} and {{bibref|3GPP2-C.R1001}} for definitions.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDTM.APIDTEXTCHARi";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDTM.";
+  }
+
+  grouping cdma2000-one-x-ran-appim-g {
+    description
+      "This object can be configured only if {{param|.Capabilities.CDMA2000.OneX.FemtoOverheadMessagesCapable}} is set to {{true}}.";
+    leaf lifetime {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Lifetime of the information in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.LIFETIME";
+    }
+    leaf numappirec {
+      type uint16 {
+        range "0..511";
+      }
+      config false;
+      description
+        "The number of entries for {{object|.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.NUMAPPIREC";
+    }
+    leaf appirec-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIRECNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.";
+  }
+
+  grouping cdma2000-one-x-ran-appim-appirec-g {
+    description
+      "This object can be configured only if {{param|.Capabilities.CDMA2000.OneX.FemtoOverheadMessagesCapable}} is set to {{true}}.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.Alias";
+    }
+    leaf apassntype {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Access point association type the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APASSNTYPE";
+    }
+    leaf apsidsameasprevious {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "SID same as previous indicator in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APSIDSAMEASPREVIOUS";
+    }
+    leaf apnidsameasprevious {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "NID same as previous indicator in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APNIDSAMEASPREVIOUS";
+    }
+    leaf apbandsameasprevious {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Bandclass same as previous indicator in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APBANDSAMEASPREVIOUS";
+    }
+    leaf apfreqsameasprevious {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Frequency same as previous indicator in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APFREQSAMEASPREVIOUS";
+    }
+    leaf appnrecsameasprevious {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "PN offset same as previous indicator in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APPNRECSAMEASPREVIOUS";
+    }
+    leaf apsid {
+      type uint16 {
+        range "0..32767";
+      }
+      description
+        "Access point SID in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APSID";
+    }
+    leaf apnid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Access point NID in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APNID";
+    }
+    leaf apband {
+      type uint8 {
+        range "0..31";
+      }
+      description
+        "Access point bandclass in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APBAND";
+    }
+    leaf apfreq {
+      type uint16 {
+        range "0..2047";
+      }
+      description
+        "Access point frequency in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APFREQ";
+    }
+    leaf appnrectype {
+      type uint8 {
+        range "0..7";
+      }
+      description
+        "Access point PN offset in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APPNRECTYPE";
+    }
+    leaf appnreclen {
+      type uint8 {
+        range "0..31";
+      }
+      description
+        "Length in octets of the access point PN record ({{param|APPNREC}}) in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APPNRECLEN";
+    }
+    leaf appnrec {
+      type binary {
+        length "0..31";
+      }
+      description
+        "Access point PN Record in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APPNREC";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.";
+  }
+
+  grouping cdma2000-one-x-pcf-config-g {
+    description
+      "CDMA2000 1x PCF configuration information.";
+    leaf pcfpdsn-health-monitor-interval {
+      type uint8 {
+        range "0..180";
+      }
+      units "seconds";
+      config false;
+      description
+        "PDSN health check monitor interval in {{units}}. Setting the value to 0 disables the PDSN Health Monitoring Feature. Setting any non-zero value enables the PDSN Health Monitoring Feature and sets that non-zero value as the timer interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPDSNHealthMonitorInterval";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.";
+  }
+
+  grouping cdma2000-one-x-pcf-config-pcf-performance-stats-g {
+    description
+      "This object is used in obtaining the PCF stats";
+    leaf a10-setup-failure-no-reason {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with an unspecified reason (A11 error code : 0x80)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureNoReason";
+    }
+    leaf a10-setup-failure-admin-prohibit {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Admin Prohibited\" (A11 error code : 0x81).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureAdminProhibit";
+    }
+    leaf a10-setup-failure-insuff-resources {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Insufficient Resources\" (A11 error code: 0x82).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureInsuffResources";
+    }
+    leaf a10-setup-failure-failed-auth {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Mobile Node Authentication Failure\" (A11 error code: 0x83).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureFailedAuth";
+    }
+    leaf a10-setup-failure-id-mismatch {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Id Mismatch\" (A11 error code: 0x85)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureIdMismatch";
+    }
+    leaf a10-setup-failure-malformed-req {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Malformed Request\" (A11 error code: 0x86)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureMalformedReq";
+    }
+    leaf a10-setup-failure-unknown-pdsn {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Unknown PDSN\" (A11 error code: 0x88)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureUnknownPDSN";
+    }
+    leaf a10-setup-failure-unsupp-vend-id {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Unsupported Vendor Id\" (A11 error code: 0x89)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureUnsuppVendId";
+    }
+    leaf total-a10-closed-by-rnc {
+      type uint64;
+      description
+        "Number of A10 closed by the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10ClosedByRnc";
+    }
+    leaf total-a10-closed-by-pdsn {
+      type uint64;
+      description
+        "Number of A10 closed by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10ClosedByPDSN";
+    }
+    leaf total-a10-success-pages {
+      type uint64;
+      description
+        "Numebr of A10 Pages initiated by PCFsucceeded.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10SuccessPages";
+    }
+    leaf total-a10-failed-pages {
+      type uint64;
+      description
+        "Numebr of A10 Pages initiated by PCF failed.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10FailedPages";
+    }
+    leaf total-a10-ingress-bytes {
+      type uint64;
+      units "bytes";
+      description
+        "Number of {{units}} received from the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10IngressBytes";
+    }
+    leaf total-a10-egress-bytes {
+      type uint64;
+      units "bytes";
+      description
+        "Number of {{units}} transmitted to the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10EgressBytes";
+    }
+    leaf a10-reg-update-received {
+      type uint64;
+      description
+        "Number of A10 Registration updates received by the FAP PCF";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10RegUpdateReceived";
+    }
+    leaf total-a10-dropped-pages {
+      type uint64;
+      description
+        "Number of A10 Pages initiated by PCF dropped";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10DroppedPages";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.";
+  }
+
+  grouping cdma2000-one-x-batch-pcfpdsn-g {
+    description
+      "The Batch configuration Object used to configure PDSN table using a start and end IP address. The order of the address is used as part of PDSN selection algorithm, e.g., the first element is considered PDSN number 0. (Refer to {{bibref|3GPP2-A.S0013}}). To get individual PDSN entries use the {{object|.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.}}.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.Alias";
+    }
+    leaf batch-table-number {
+      type int64;
+      description
+        "The BatchTable Number should be given only once during the creation of a Batch Table. This is the Key Attribute that uniquely identifies a BatchTable entry. This number indicates the index of this batch to determine the PDSN number in the PDSN selection algorithm ({{bibref|3GPP2-A.S0013}}).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableNumber";
+    }
+    leaf batch-table-start-ip-address {
+      type inet:ip-address;
+      config false;
+      description
+        "Start IP address of the range of PDSNs.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableStartIPAddress";
+    }
+    leaf batch-table-end-ip-address {
+      type inet:ip-address;
+      config false;
+      description
+        "End IP address of the range of PDSNs.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableEndIPAddress";
+    }
+    leaf batch-table-security-parameter-index {
+      type uint32 {
+        range "0 | 256..4294967295";
+      }
+      config false;
+      description
+        "Security Parameter Index to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableSecurityParameterIndex";
+    }
+    leaf batch-table-secret-key {
+      type binary {
+        length "0..16";
+      }
+      config false;
+      description
+        "Secret key in 32-digit hexidecimal representation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableSecretKey";
+    }
+    leaf batch-table-ios-version {
+      type enumeration {
+        enum "tia-878-ballot" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-ballot";
+        }
+        enum "tia-878-1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-1";
+        }
+        enum "tia-878-a" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-a";
+        }
+        enum "tia-878-legacy" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-legacy";
+        }
+      }
+      config false;
+      description
+        "IOS Version of this PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableIOSVersion";
+    }
+    leaf batch-table-pdsn-admin-status {
+      type int64;
+      config false;
+      description
+        "Administrative status of this PDSN. 0- UP 1-DOWN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTablePDSNAdminStatus";
+    }
+    leaf pdsn-type {
+      type enumeration {
+        enum "one-x" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.PDSNType - OneX";
+        }
+        enum "hrpd-rev0" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.PDSNType - HRPDRev0";
+        }
+        enum "hrpd-rev-a" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.PDSNType - HRPDRevA";
+        }
+      }
+      config false;
+      description
+        "Indicates the PDSN type for this batch.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.PDSNType";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.";
+  }
+
+  grouping cdma2000-one-x-pcfpdsn-g {
+    description
+      "PCFPDSN Object configured for 1x. {{object|.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.}} table should be used to configure PDSN details.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.Alias";
+    }
+    leaf pdsn-number {
+      type int64;
+      description
+        "Index of this PDSN object in the PCFPDSNCollection array. The index is used as PDSN number in PDSN selection algorithm. ({{bibref|3GPP2-A.S0013}})";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PDSNNumber";
+    }
+    leaf security-parameter-index {
+      type uint32 {
+        range "0 | 256..4294967295";
+      }
+      description
+        "Security Parameter Index used";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.SecurityParameterIndex";
+    }
+    leaf security-key {
+      type binary {
+        length "0..16";
+      }
+      description
+        "Secret key in 32-digit hexidecimal representation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.SecurityKey";
+    }
+    leaf ios-version {
+      type enumeration {
+        enum "tia-878-ballot" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.IOSVersion - TIA-878-ballot";
+        }
+        enum "tia-878-1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.IOSVersion - TIA-878-1";
+        }
+        enum "tia-878-a" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.IOSVersion - TIA-878-a";
+        }
+        enum "tia-878-legacy" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.IOSVersion - TIA-878-legacy";
+        }
+      }
+      config false;
+      description
+        "HRPD IOS Version of this PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.IOSVersion";
+    }
+    leaf pds-nadmin-status {
+      type int64;
+      config false;
+      description
+        "Administrative status of this PDSN. 0- UP 1-DOWN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PDSNadminStatus";
+    }
+    leaf pdsn-health-status {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Reachability status of this PDSN. 0-unreachable, 1-reachable.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PDSNHealthStatus";
+    }
+    leaf pdsnip-address {
+      type inet:ip-address;
+      config false;
+      description
+        "IP address of the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PDSNIPAddress";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.";
+  }
+
+  grouping cdma2000-one-x-pcfpdsn-a11-reg-update-stats-g {
+    description
+      "This object is used in obtaining the A11 Registration Update stats for each PDSN";
+    leaf pdsn-number-reg-update-perf {
+      type int64;
+      description
+        "The PDSN Number";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.PDSNNumberRegUpdatePerf";
+    }
+    leaf pdsnip-address-reg-update-perf {
+      type inet:ip-address;
+      description
+        "The IP Address of the PDSN for which the A11 Reg Update stats is obtained";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.PDSNIPAddressRegUpdatePerf";
+    }
+    leaf a11-reg-update-received-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-update messages receieved from a PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateReceivedPDSN";
+    }
+    leaf a11-reg-update-id-check-fail-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages receieved from a PDSN that failed ID validation";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateIDCheckFailPDSN";
+    }
+    leaf a11-reg-update-auth-check-fail-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN that failed Authentication";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateAuthCheckFailPDSN";
+    }
+    leaf a11-reg-update-for-unknown-psipdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with unknown PSI";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateForUnknownPSIPDSN";
+    }
+    leaf a11-reg-update-unspecified-reason-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with unspecified reason code";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUnspecifiedReasonPDSN";
+    }
+    leaf a11-reg-update-ppp-timeout-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"PPP Timeout\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePppTimeoutPDSN";
+    }
+    leaf a11-reg-update-registration-timeout-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Registration Timeout\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateRegistrationTimeoutPDSN";
+    }
+    leaf a11-reg-update-pdsn-error-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"PDSN Error\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePDSNErrorPDSN";
+    }
+    leaf a11-reg-update-inter-pcf-handoff-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Inter PCF Handoff\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateInterPCFHandoffPDSN";
+    }
+    leaf a11-reg-update-inter-pdsn-handoff-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Inter PDSN Handoff\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateInterPDSNHandoffPDSN";
+    }
+    leaf a11-reg-update-pdsnoamp-intervention-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"PDSN OAMP Intervention\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePDSNOAMPInterventionPDSN";
+    }
+    leaf a11-reg-update-accounting-error-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Accounting Error\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateAccountingErrorPDSN";
+    }
+    leaf a11-reg-update-user-failed-authentication-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"User Failed Authentication\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUserFailedAuthenticationPDSN";
+    }
+    leaf a11-reg-update-unknown-cause-code-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with Unknown Cause Code";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUnknownCauseCodePDSN";
+    }
+    leaf a11-reg-update-without-reason-code-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with PDSN Code Not Included";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateWithoutReasonCodePDSN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.";
+  }
+
+  grouping cdma2000-one-x-pcfpdsn-pcfpdsn-stats-g {
+    description
+      "This object is used in obtaining the PCF PDSN stats for each PDSN";
+    leaf a10-setup-attempts-pdsn {
+      type uint64;
+      description
+        "Number of attempts the PCF made to establish an A10 connection with PDSN. If PCF fails establishing such a connection on this PDSN and goes on to use another PDSN for that connection, it will be counted as two setup attempts.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10SetupAttemptsPDSN";
+    }
+    leaf a10-setup-successes-pdsn {
+      type uint64;
+      description
+        "Number of times PCF succeeded in establishing an A10 connection with this PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10SetupSuccessesPDSN";
+    }
+    leaf a10-setup-blocks-pdsn {
+      type uint64;
+      description
+        "Number of times PCF was blocked in establishing an A10 connection with this PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10SetupBlocksPDSN";
+    }
+    leaf a11-reg-req-denied-id-mismatch-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Id Mismatch\" (A11 error code: 0x85) by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedIdMismatchPDSN";
+    }
+    leaf a11-reg-req-denied-unknown-pdsnpdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Unknown PDSN\" (A11 error code: 0x88)by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnknownPDSNPDSN";
+    }
+    leaf a11-reg-req-denied-no-reason-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with no reason code by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedNoReasonPDSN";
+    }
+    leaf a11-reg-req-denied-admin-prohibit-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Admin Prohibited\" (A11 error code : 0x81) by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedAdminProhibitPDSN";
+    }
+    leaf a11-reg-req-denied-insuff-resources-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Insufficient Resources\" (A11 error code: 0x82) by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedInsuffResourcesPDSN";
+    }
+    leaf a11-reg-req-denied-failed-auth-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Mobile Node Authentication Failure\" (A11 error code: 0x83) by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedFailedAuthPDSN";
+    }
+    leaf a11-reg-req-denied-malformed-req-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Malformed Request\" (A11 error code: 0x86) by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedMalformedReqPDSN";
+    }
+    leaf a11-reg-req-denied-unsupp-vend-id-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Unsupported Vendor Id\" (A11 error code: 0x8D)by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnsuppVendIdPDSN";
+    }
+    leaf a11-reg-req-denied-reverse-tunnel-unavailable-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Reverse Tunnel Unavailable\" (A11 error code: 0x89)by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedReverseTunnelUnavailablePDSN";
+    }
+    leaf a11-reg-req-denied-reverse-tunnel-tbit-not-set-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Reverse Tunnel Tbit Not Set\" (A11 error code: 0x8A)by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedReverseTunnelTbitNotSetPDSN";
+    }
+    leaf a11-reg-req-denied-unknown-error-code-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with an unspecified reason (A11 error code : 0x80) by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnknownErrorCodePDSN";
+    }
+    leaf a10-reg-req-for-registration-retransmissions-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Requests retransmitted during A10 setup";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForRegistrationRetransmissionsPDSN";
+    }
+    leaf a10-reg-req-for-re-registration-retransmissions-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Requests retransmitted during A10 reregistration";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForReRegistrationRetransmissionsPDSN";
+    }
+    leaf a10-reg-req-for-release-retransmissions-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Requests retransmitted during A10 realease";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForReleaseRetransmissionsPDSN";
+    }
+    leaf pdsn-number-pdsn-perf {
+      type int64;
+      description
+        "The PDSN Number";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.PDSNNumberPDSNPerf";
+    }
+    leaf pds-nip-address-pdsn-perf {
+      type inet:ip-address;
+      description
+        "The IP Address of the PDSN for which the PCF PDSN stats is obtained";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.PDSNipAddressPDSNPerf";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.";
+  }
+
+  grouping cdma2000-one-x-stats-g {
+    description
+      "This object contains 1x FAP statistics aggregated over all connections of all users over all sectors.";
+    leaf registration-attempts {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of registration attempts";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RegistrationAttempts";
+    }
+    leaf registration-fails {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of registrations failed";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RegistrationFails";
+    }
+    leaf registrations-blocked {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Unauthorized registrations blocked by admission control";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RegistrationsBlocked";
+    }
+    leaf page-attempts {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of attemots to page requests received from the core";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.PageAttempts";
+    }
+    leaf page-fails {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of page requests rejected or not responded";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.PageFails";
+    }
+    leaf voice-call-attempts {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of voice call attempts";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.VoiceCallAttempts";
+    }
+    leaf voice-call-failures {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of voice call attempts which failed for various reasons";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.VoiceCallFailures";
+    }
+    leaf voice-calls-blocked {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of voice calls blocked due to lack of authorization";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.VoiceCallsBlocked";
+    }
+    leaf voice-calls-dropped {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Number of voice calls dropped due to various reasons other than a normal call release";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.VoiceCallsDropped";
+    }
+    leaf data-call-attempts {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of data call attempts";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.DataCallAttempts";
+    }
+    leaf data-call-failures {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of data call attemots failed for various reasons";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.DataCallFailures";
+    }
+    leaf data-calls-blocked {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of data calls failed due to lack of authorization";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.DataCallsBlocked";
+    }
+    leaf data-calls-dropped {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of data calls dropped due to reasons other than a normal release.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.DataCallsDropped";
+    }
+    leaf average-voice-call {
+      type uint32 {
+        range "0..4294967295";
+      }
+      units "milliseconds";
+      description
+        "Average voice call duration in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.AverageVoiceCall";
+    }
+    leaf average-data-call {
+      type uint32 {
+        range "0..4294967295";
+      }
+      units "milliseconds";
+      description
+        "Average data call duration in {{units}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.AverageDataCall";
+    }
+    leaf average-session-in-sec {
+      type uint32 {
+        range "0..4294967295";
+      }
+      units "seconds";
+      description
+        "Average session duration in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.AverageSessionInSec";
+    }
+    leaf total-voice-calls {
+      type uint32 {
+        range "0..4294967295";
+      }
+      units "seconds";
+      description
+        "Total number of successful voice calls";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.TotalVoiceCalls";
+    }
+    leaf total-data-calls {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of successful data calls";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.TotalDataCalls";
+    }
+    leaf fwd-voice-packet-drop-percentage {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Percentage of voice packets dropped in MAC due to signaling";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.FwdVoicePacketDropPercentage";
+    }
+    leaf rev-voice-packet-drop-percentage {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Percentage of voice packets received with bad FQI";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RevVoicePacketDropPercentage";
+    }
+    leaf fwd-avg-data-rate {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Average data rate of the scheduler on the forward link";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.FwdAvgDataRate";
+    }
+    leaf rev-avg-data-rate {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Average data rate of the scheduler on reverse link";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RevAvgDataRate";
+    }
+    leaf bc-index-zero-to-one-transitions {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Num of times the bcIndex was changed from 0 to 1 in the Extended System Parameters Message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.BcIndexZeroToOneTransitions";
+    }
+    leaf bc-index-one-to-zero-transitions {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Num of times the bcIndex was changed from 0 to 1 in the Extended System Parameters Message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.BcIndexOneToZeroTransitions";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.";
+  }
+
+  grouping cdma2000-one-x-redirect-g {
+    description
+      "CDMA2000 1x service redirection parameters.";
+    leaf redirect-channel-number {
+      type uint16 {
+        range "0..2047";
+      }
+      config false;
+      description
+        "The channel number set from ACS that the FAP uses to redirect the MS in case of closed access or when exceeding session capacity. The ACS shall push this if the the operator has provided this information in a configuration file. If this is not configured, the FAP rejects the AT. The supported range is 0..2047.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Redirect.RedirectChannelNumber";
+    }
+    leaf redirect-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "The bandclass set from ACS that the FAP uses to redirect the MS incase of closed access or when exceeding session capacity. The ACS shall push this if the the operator has provided this information in a configuration file. If this is not configured, the FAP rejects the MS. The supported range is 0..9.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Redirect.RedirectBandClass";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Redirect.";
+  }
+
+  grouping cdma2000-hrpd-g {
+    description
+      "The object contains attributes related to HRPD.";
+    leaf pcfpdsn-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSNNumberOfEntries";
+    }
+    leaf max-batch-pcfpdsn-entries {
+      type uint64;
+      description
+        "Maximum number of entries in the {{object|.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.MaxBatchPCFPDSNEntries";
+    }
+    leaf batch-pcfpdsn-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSNNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.";
+  }
+
+  grouping cdma2000-hrpd-ran-g {
+    description
+      "The object contains attributes related to HRPD RAN.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.";
+  }
+
+  grouping cdma2000-hrpd-ran-rf-g {
+    description
+      "Contains the details related to HRPD RF";
+    leaf hrpd-car-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "The Band Class this HRPD Carrier object is to operate on. Reference - {{bibref|3GPP2-C.S0057}}, Band Class Specification for CDMA2000 Spread Spectrum Systems.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.HRPDCarBandClass";
+    }
+    leaf-list rfcnfl {
+      type string {
+        length "0..64";
+      }
+      config false;
+      min-elements 1;
+      description
+        "{{list}} Each item is a FL Radio Frequency Channel Number (RFCN). Self-configuration for RFCNFL is controlled by {{param|.Capabilities.CDMA2000.HRPD.SelfConfig.RFCNFLConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.HRPD.SelfConfig.RFCNFLSelfConfigEnable}} from an enabled perspective. If the FAP's self-configuration capability for RFCNFL is available and enabled, this parameter MAY contain more than one item and the FAP is expected to select one from the list for {{param|RFCNFLInUse}}. If the self-configuration capability is not available or not enabled, then this parameter SHOULD contain only a single item. If multiple items are specified, they are done in the order of preference.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RFCNFL";
+    }
+    leaf rfcnfl-in-use {
+      type uint64;
+      description
+        "The FL RFCN being used by the FAP. Self-configuration for RFCNFL is controlled by {{param|.Capabilities.CDMA2000.HRPD.SelfConfig.RFCNFLConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.HRPD.SelfConfig.RFCNFLSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|RFCNFL}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first value in {{param|RFCNFL}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RFCNFLInUse";
+    }
+    leaf-list pilot-pn {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "{{list}} (maximum length 32) (minimum 1 items) of strings. Each item is a pilot PN offset in units of 64 PN chips. Self-configuration for pilot PN is controlled by {{param|.Capabilities.CDMA2000.HRPD.SelfConfig.PilotPNConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.HRPD.SelfConfig.PilotPNSelfConfigEnable}} from an enabled perspective. If the FAP's self-configuration capability for Pilot PN Offset is available and enabled, this parameter MAY contain more than one item and the FAP is expected to select one from the list for {{param|PilotPNInUse}}. If the self-configuration capability is not available or not enabled, then this parameter SHOULD contain only a single item. The multiplicity of the PN offsets values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. The order of the items has no significance.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.PilotPN";
+    }
+    leaf pilot-pn-in-use {
+      type uint64;
+      config false;
+      description
+        "The Pilot PN Offset being used by the FAP. Self-configuration for Pilot PN Offset is controlled by {{param|.Capabilities.CDMA2000.HRPD.SelfConfig.PilotPNConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.HRPD.SelfConfig.PilotPNSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|PilotPN}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first value in {{param|PilotPN}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.PilotPNInUse";
+    }
+    leaf maxfap-tx-power {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Defines the maximum transmission power allowed on the FAP. {{param}} is expressed as a range of allowed maximum power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<;Pmax_low>..<;Pmax_high>\". {{param}} identifies the limits between which the FAP can self-configure its maximum transmit power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerSelfConfigEnable}} from an enabled perspective. <;Pmax_low> and <;Pmax_high> are measured in dBm and have a range of -40.0 to 20.0 incremented by 0.1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.MaxFAPTxPower";
+    }
+    leaf maxfap-tx-power-in-use {
+      type int64;
+      units "0.1 dBm";
+      config false;
+      description
+        "The maximum transmission power measured in {{units}} currently used by the FAP. Actual values of the maximum transmission power are -40.0 dBm to 20.0 dBm in steps of {{units}}. The value of {{param}} divided by 10 yields the actual value of the maximum transmission power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the range provided in {{param|MaxFAPTxPower}}. If the self-configuration capability is not available or not enabled, then this parameter contains a value selected by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.MaxFAPTxPowerInUse";
+    }
+    leaf control-channel-rate {
+      type int64;
+      config false;
+      description
+        "The data rate of the Control Channel of this HRPD SectorElement object. Reference - {{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification, section-10.4.1.3.2.4";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ControlChannelRate";
+    }
+    leaf sync-capsule-offset {
+      type int64;
+      config false;
+      description
+        "The offset from the control channel cycle boundary at which the synchronous capsules are to be transmitted for this HRPD SectorElement object. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification, section-9.2.6.1.4.1.2";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.SyncCapsuleOffset";
+    }
+    leaf rab-length {
+      type int64;
+      config false;
+      description
+        "The Reverse Activity Bit (RAB) length measured in slots for this HRPD SectorElement object. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification, section-7.8.6.2.2, Table 9.7.6.2-2.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RabLength";
+    }
+    leaf rab-offset {
+      type int64;
+      config false;
+      description
+        "The Reverse Activity Bit (RAB) offset for this HRPD SectorElement object. Reference - {{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification, section-7.8.6.2.2.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RabOffset";
+    }
+    leaf sector-id {
+      type binary {
+        length "16";
+      }
+      config false;
+      description
+        "The 128 bit Sector ID for this HRPD SectorElement object. The Sector ID is used in the computation of the long code mask. See {{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.SectorID";
+    }
+    leaf color-code {
+      type int64;
+      config false;
+      description
+        "The HRPD color code associated with this sector-element. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ColorCode";
+    }
+    leaf subnet-mask-length {
+      type int64;
+      units "bits";
+      config false;
+      description
+        "{{param}} is the length of the HRPD SubnetMask in {{units}}. See {{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.SubnetMaskLength";
+    }
+    leaf hrpd-sec-el-reverse-link-silence-duration {
+      type int64;
+      units "frames";
+      config false;
+      description
+        "Duration of the Reverse Link Silence Interval in units of {{units}}. The duration of the silence interval to be maintained on the reverse link. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.1.4.1.1.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.HRPDSecElReverseLinkSilenceDuration";
+    }
+    leaf hrpd-sec-el-reverse-link-silence-period {
+      type int64;
+      units "frames";
+      config false;
+      description
+        "The Reverse Link Silence Interval is defined as the time interval of duration ReverseLinkSilenceDuration frames that starts at times T where T is the CDMA System Time in units of {{units}} and it satisfies the following equation: T mod (2048 x 2^(ReverseLinkSilencePeriod) - 1) = 0. The period in the access cycle duration for which the silence interval shall be maintained on the reverse link. {{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.1.4.1.1.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.HRPDSecElReverseLinkSilencePeriod";
+    }
+    leaf open-loop-adjust {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "The open loop adjustment (in {{units}}) for the access parameters of this sector-element. FAP sets this field to the negative of the nominal power to be used by ATs in the open loop power estimate, expressed as an unsigned value in units of 1 dB. The value used by the AT is -1 times the value of this field. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.2.6";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.OpenLoopAdjust";
+    }
+    leaf probe-initial-adjust {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "The probe initial adjustment (in {{units}}) for the access parameters of this sector-element. FAP sets this field to the correction factor to be used by ATs in the open loop power estimate for the initial transmission on the Access Channel, expressed as a two's complement value in units of 1 dB. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.2.6";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ProbeInitialAdjust";
+    }
+    leaf probe-num-steps {
+      type int64;
+      config false;
+      description
+        "The number of power level steps for access probes for the access parameters of this sector-element. FAP sets this field to the maximum number of access probes ATs are to transmit in a single access probe sequence. The access network shall set this field to a value in the range [1 ... 15]. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.2.6";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ProbeNumSteps";
+    }
+    leaf probe-power-step {
+      type int64;
+      units "0.5 dB";
+      config false;
+      description
+        "The power step size (in {{units}}) applied to successive probes on the access channel associated with this sector-element. Probe power increase step. FAPsets this field to the increase in power between probes, in resolution of 0.5 dB. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.2.6";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ProbePowerStep";
+    }
+    leaf a-persistence {
+      type string {
+        length "0..16";
+      }
+      config false;
+      description
+        "The A-Persistence vector, as per HRPD specification, for controlling contention access on the access channel associated with this sector-element. Reference - {{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.2.6. Format is \"0xAABBCCDD\", where AA, BB, CC, DD are in the range \"01\" through \"3F\" hex.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.APersistence";
+    }
+    leaf rssirab-threshold {
+      type int64;
+      units "0.125 dBm";
+      config false;
+      description
+        "RAB threshold for RSSI based RAB algorithm.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RSSIRABThreshold";
+    }
+    leaf load-rab-threshold {
+      type uint16 {
+        range "0..480";
+      }
+      units "0.125 dB";
+      config false;
+      description
+        "RAB threshold for Load based RAB algorithm in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.LoadRABThreshold";
+    }
+    leaf connection-rate-limit {
+      type uint8 {
+        range "0..3";
+      }
+      config false;
+      description
+        "4 different configurations.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ConnectionRateLimit";
+    }
+    leaf rfe-rl-balance-ratio {
+      type uint8 {
+        range "1..20";
+      }
+      config false;
+      description
+        "Config Parameter for DRC based rate control";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RfeRLBalanceRatio";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.";
+  }
+
+  grouping cdma2000-hrpd-pcf-config-g {
+    description
+      "CDMA2000 HRPD PCF configuration parameters.";
+    leaf pcfpdsn-health-monitor-interval {
+      type uint8 {
+        range "0..180";
+      }
+      units "seconds";
+      config false;
+      description
+        "PDSN health check monitor interval in {{units}}. Setting the value to 0 disables the PDSN Health Monitoring Feature. Setting any non-zero value enables the PDSN Health Monitoring Feature and sets that non-zero value as the timer interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPDSNHealthMonitorInterval";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.";
+  }
+
+  grouping cdma2000-hrpd-pcf-config-pcf-performance-stats-g {
+    description
+      "This object is used in obtaining the PCF stats";
+    leaf a10-setup-failure-no-reason {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with an unspecified reason (A11 error code : 0x80)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureNoReason";
+    }
+    leaf a10-setup-failure-admin-prohibit {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Admin Prohibited\" (A11 error code : 0x81).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureAdminProhibit";
+    }
+    leaf a10-setup-failure-insuff-resources {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Insufficient Resources\" (A11 error code: 0x82).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureInsuffResources";
+    }
+    leaf a10-setup-failure-failed-auth {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Mobile Node Authentication Failure\" (A11 error code: 0x83).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureFailedAuth";
+    }
+    leaf a10-setup-failure-id-mismatch {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Id Mismatch\" (A11 error code: 0x85)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureIdMismatch";
+    }
+    leaf a10-setup-failure-malformed-req {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Malformed Request\" (A11 error code: 0x86)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureMalformedReq";
+    }
+    leaf a10-setup-failure-unknown-pdsn {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Unknown PDSN\" (A11 error code: 0x88)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureUnknownPDSN";
+    }
+    leaf a10-setup-failure-unsupp-vend-id {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Unsupported Vendor Id\" (A11 error code: 0x89)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureUnsuppVendId";
+    }
+    leaf total-a10-closed-by-rnc {
+      type uint64;
+      description
+        "Number of A10 closed by the FAP RNC";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10ClosedByRnc";
+    }
+    leaf total-a10-closed-by-pdsn {
+      type uint64;
+      description
+        "Number of A10 closed by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10ClosedByPDSN";
+    }
+    leaf total-a10-success-pages {
+      type uint64;
+      description
+        "Numebr of A10 Pages initiated by PCFsucceeded";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10SuccessPages";
+    }
+    leaf total-a10-failed-pages {
+      type uint64;
+      description
+        "Numebr of A10 Pages initiated by PCF failed";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10FailedPages";
+    }
+    leaf total-a10-ingress-bytes {
+      type uint64;
+      units "bytes";
+      description
+        "Number of {{units}} received from the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10IngressBytes";
+    }
+    leaf total-a10-egress-bytes {
+      type uint64;
+      units "bytes";
+      description
+        "Number of {{units}} transmitted to the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10EgressBytes";
+    }
+    leaf a10-reg-update-received {
+      type uint64;
+      description
+        "Number of A10 Registration updates received by the FAP PCF";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10RegUpdateReceived";
+    }
+    leaf total-a10-dropped-pages {
+      type uint64;
+      description
+        "Number of A10 Pages initiated by PCF dropped";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10DroppedPages";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.";
+  }
+
+  grouping cdma2000-hrpd-batch-pcfpdsn-g {
+    description
+      "The Batch configuration Object used to configure PDSN table using a start and end IP address. The order of the address is used as part of PDSN selection algorithm, e.g., the first element is considered PDSN number 0 (refer to {{bibref|3GPP2-A.S0008}} and {{bibref|3GPP2-A.S0009}}). To get individual PDSN entries use the {{object|.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.}}.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.Alias";
+    }
+    leaf batch-table-number {
+      type int64;
+      description
+        "The BatchTable Number should be given only once during the creation of a Batch Table. This is the Key Attribute that uniquely identifies a BatchTable entry";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableNumber";
+    }
+    leaf batch-table-start-ip-address {
+      type inet:ip-address;
+      config false;
+      description
+        "Start IP address of the range of PDSNs";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableStartIPAddress";
+    }
+    leaf batch-table-end-ip-address {
+      type inet:ip-address;
+      config false;
+      description
+        "End IP address of the range of PDSNs";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableEndIPAddress";
+    }
+    leaf batch-table-security-parameter-index {
+      type uint32 {
+        range "0 | 256..4294967295";
+      }
+      description
+        "Security Parameter Index to be used";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableSecurityParameterIndex";
+    }
+    leaf batch-table-secret-key {
+      type binary {
+        length "0..16";
+      }
+      description
+        "Secret key in 32-digit hexidecimal representation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableSecretKey";
+    }
+    leaf batch-table-ios-version {
+      type enumeration {
+        enum "tia-878-ballot" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-ballot";
+        }
+        enum "tia-878-1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-1";
+        }
+        enum "tia-878-a" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-a";
+        }
+        enum "tia-878-legacy" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-legacy";
+        }
+      }
+      config false;
+      description
+        "HRPD IOS Version of this PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableIOSVersion";
+    }
+    leaf batch-table-pdsn-admin-status {
+      type int64;
+      config false;
+      description
+        "Administrative status of this PDSN. 0- UP 1-DOWN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTablePDSNAdminStatus";
+    }
+    leaf pdsn-type {
+      type string {
+        length "0..32";
+      }
+      config false;
+      description
+        "Indicates the PDSN type for this batch.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.PDSNType";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.";
+  }
+
+  grouping cdma2000-hrpd-pcfpdsn-g {
+    description
+      "PCFPDSN Object configured for HRPD. {{object|.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.}} table should be used to configure PDSN details.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.Alias";
+    }
+    leaf pdsn-number {
+      type int64;
+      description
+        "Index of this PDSN object in the PCFPDSNCollection array. The index is used as PDSN number in PDSN selection algorithm (refer to {{bibref|3GPP2-A.S0008}} and {{bibref|3GPP2-A.S0009}})";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PDSNNumber";
+    }
+    leaf security-parameter-index {
+      type uint32 {
+        range "256..4294967295";
+      }
+      description
+        "Security Parameter Index used";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.SecurityParameterIndex";
+    }
+    leaf security-key {
+      type binary {
+        length "0..16";
+      }
+      description
+        "Secret key in 32-digit hexidecimal representation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.SecurityKey";
+    }
+    leaf ios-version {
+      type enumeration {
+        enum "tia-878-ballot" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.IOSVersion - TIA-878-ballot";
+        }
+        enum "tia-878-1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.IOSVersion - TIA-878-1";
+        }
+        enum "tia-878-a" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.IOSVersion - TIA-878-a";
+        }
+        enum "tia-878-legacy" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.IOSVersion - TIA-878-legacy";
+        }
+      }
+      config false;
+      description
+        "HRPD IOS Version of this PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.IOSVersion";
+    }
+    leaf pds-nadmin-status {
+      type int64;
+      config false;
+      description
+        "Administrative status of this PDSN. 0- UP 1-DOWN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PDSNadminStatus";
+    }
+    leaf pdsn-health-status {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Reachability status of this PDSN. 0-unreachable, 1-reachable.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PDSNHealthStatus";
+    }
+    leaf pdsnip-address {
+      type inet:ip-address;
+      config false;
+      description
+        "IP address of the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PDSNIPAddress";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.";
+  }
+
+  grouping cdma2000-hrpd-pcfpdsn-a11-session-update-stats-g {
+    description
+      "This object is used in obtaining the A11 Session Update stats for each PDSN";
+    leaf pdsn-number-session-update-perf {
+      type int64;
+      description
+        "The PDSN Number";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.PDSNNumberSessionUpdatePerf";
+    }
+    leaf pdsnip-address-session-update-perf {
+      type inet:ip-address;
+      description
+        "The IP Address of the PDSN for which the A11 Session Update stats is obtained";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.PDSNIPAddressSessionUpdatePerf";
+    }
+    leaf a11-session-update-received-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from a PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateReceivedPDSN";
+    }
+    leaf a11-session-update-accepted-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates accepted for a PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateAcceptedPDSN";
+    }
+    leaf a11-session-update-extended-apipdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN that contained extended API";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateExtendedAPIPDSN";
+    }
+    leaf a11-session-update-for-unknown-psipdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN that conatained unknown PSI";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateForUnknownPSIPDSN";
+    }
+    leaf a11-session-update-denied-id-check-fail-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code \"ID Check Failed \"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedIDCheckFailPDSN";
+    }
+    leaf a11-session-update-denied-auth-check-fail-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code\"Auth Check Failed\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedAuthCheckFailPDSN";
+    }
+    leaf a11-session-update-denied-reason-unspecified-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code \"Unspecified Reason\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedReasonUnspecifiedPDSN";
+    }
+    leaf a11-session-update-denied-poorly-formed-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code \"Poorly Formed\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedPoorlyFormedPDSN";
+    }
+    leaf a11-session-update-denied-session-params-not-updated-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code \"Parameters Not Updated\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedSessionParamsNotUpdatedPDSN";
+    }
+    leaf a11-session-update-denied-qo-s-profile-id-not-supported-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code \"QoS Profile Id Not Updated\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedQoSProfileIdNotSupportedPDSN";
+    }
+    leaf a11-session-update-denied-insufficient-resources-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code \"Insufficient Resources\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedInsufficientResourcesPDSN";
+    }
+    leaf a11-session-update-denied-handoff-in-progress-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code\"Handoff In Progress\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedHandoffInProgressPDSN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.";
+  }
+
+  grouping cdma2000-hrpd-pcfpdsn-a11-reg-update-stats-g {
+    description
+      "This object is used in obtaining the A11 Registration Update stats for each PDSN.";
+    leaf pdsn-number-reg-update-perf {
+      type int64;
+      description
+        "The PDSN Number";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.PDSNNumberRegUpdatePerf";
+    }
+    leaf pdsnip-address-reg-update-perf {
+      type inet:ip-address;
+      description
+        "The IP Address of the PDSN for which the A11 Reg Update stats is obtained";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.PDSNIPAddressRegUpdatePerf";
+    }
+    leaf a11-reg-update-received-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-update messages receieved from a PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateReceivedPDSN";
+    }
+    leaf a11-reg-update-id-check-fail-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages receieved from a PDSN that failed ID validation";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateIDCheckFailPDSN";
+    }
+    leaf a11-reg-update-auth-check-fail-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN that failed Authentication";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateAuthCheckFailPDSN";
+    }
+    leaf a11-reg-update-for-unknown-psipdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with unknown PSI";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateForUnknownPSIPDSN";
+    }
+    leaf a11-reg-update-unspecified-reason-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with unspecified reason code";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUnspecifiedReasonPDSN";
+    }
+    leaf a11-reg-update-ppp-timeout-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"PPP Timeout\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePppTimeoutPDSN";
+    }
+    leaf a11-reg-update-registration-timeout-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Registration Timeout\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateRegistrationTimeoutPDSN";
+    }
+    leaf a11-reg-update-pdsn-error-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"PDSN Error\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePDSNErrorPDSN";
+    }
+    leaf a11-reg-update-inter-pcf-handoff-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Inter PCF Handoff\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateInterPCFHandoffPDSN";
+    }
+    leaf a11-reg-update-inter-pdsn-handoff-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Inter PDSN Handoff\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateInterPDSNHandoffPDSN";
+    }
+    leaf a11-reg-update-pdsnoamp-intervention-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"PDSN OAMP Intervention\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePDSNOAMPInterventionPDSN";
+    }
+    leaf a11-reg-update-accounting-error-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Accounting Error\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateAccountingErrorPDSN";
+    }
+    leaf a11-reg-update-user-failed-authentication-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"User Failed Authentication\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUserFailedAuthenticationPDSN";
+    }
+    leaf a11-reg-update-unknown-cause-code-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with Unknown Cause Code";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUnknownCauseCodePDSN";
+    }
+    leaf a11-reg-update-without-reason-code-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with PDSN Code Not Included";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateWithoutReasonCodePDSN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.";
+  }
+
+  grouping cdma2000-hrpd-pcfpdsn-aux-a10-stats-g {
+    description
+      "This object is used in obtaining the Auxillary A10 Connection stats for each PDSN";
+    leaf pdsn-number-aux-a10-perf {
+      type int64;
+      description
+        "The PDSN Number";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.PDSNNumberAuxA10Perf";
+    }
+    leaf pdsnip-address-aux-a10-perf {
+      type inet:ip-address;
+      description
+        "The IP Address of the PDSN for which the PCF PDSN stats is obtained";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.PDSNIPAddressAuxA10Perf";
+    }
+    leaf aux-a10-connections-created-in-first-reg-req-pdsn {
+      type uint64;
+      description
+        "Number of Auxillary A10 Connections Created in the First Registration Request Message to the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10ConnectionsCreatedInFirstRegReqPDSN";
+    }
+    leaf aux-a10-connections-created-in-subsequent-reg-req-pdsn {
+      type uint64;
+      description
+        "Number of Auxillary A10 Connections Created in Subsequent Registration Request Messages to the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10ConnectionsCreatedInSubsequentRegReqPDSN";
+    }
+    leaf aux-a10-fwd-ip-flows-created-pdsn {
+      type uint64;
+      description
+        "Number of Forward IP Flows created with this PDSN for the Auxillary A10s";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10FwdIpFlowsCreatedPDSN";
+    }
+    leaf aux-a10-rev-ip-flows-created-pdsn {
+      type uint64;
+      description
+        "Number of Forward IP Flows created with this PDSN for the Auxillary A10s";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10RevIpFlowsCreatedPDSN";
+    }
+    leaf aux-a10-ip-flow-accounting-reg-requests-pdsn {
+      type uint64;
+      description
+        "Number of IP flow Accounting Reg Requests sent to the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10IpFlowAccountingRegRequestsPDSN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.";
+  }
+
+  grouping cdma2000-hrpd-pcfpdsn-pcfpdsn-stats-g {
+    description
+      "This object is used in obtaining the PCF PDSN stats for each PDSN";
+    leaf a10-setup-attempts-pdsn {
+      type uint64;
+      description
+        "Number of attempts the PCF made to establish an A10 connection with PDSN. If PCF fails establishing such a connection on this PDSN and goes on to use another PDSN for that connection, it will be counted as two setup attempts.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10SetupAttemptsPDSN";
+    }
+    leaf a10-setup-successes-pdsn {
+      type uint64;
+      description
+        "Number of times PCF succeeded in establishing an A10 connection with this PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10SetupSuccessesPDSN";
+    }
+    leaf a10-setup-blocks-pdsn {
+      type uint64;
+      description
+        "Number of times PCF was blocked in establishing an A10 connection with this PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10SetupBlocksPDSN";
+    }
+    leaf a11-reg-req-denied-id-mismatch-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Id Mismatch\" (A11 error code: 0x85) by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedIdMismatchPDSN";
+    }
+    leaf a11-reg-req-denied-unknown-pdsnpdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Unknown PDSN\" (A11 error code: 0x88)by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnknownPDSNPDSN";
+    }
+    leaf a11-reg-req-denied-no-reason-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with no reason code by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedNoReasonPDSN";
+    }
+    leaf a11-reg-req-denied-admin-prohibit-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Admin Prohibited\" (A11 error code : 0x81) by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedAdminProhibitPDSN";
+    }
+    leaf a11-reg-req-denied-insuff-resources-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Insufficient Resources\" (A11 error code: 0x82) by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedInsuffResourcesPDSN";
+    }
+    leaf a11-reg-req-denied-failed-auth-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Mobile Node Authentication Failure\" (A11 error code: 0x83) by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedFailedAuthPDSN";
+    }
+    leaf a11-reg-req-denied-malformed-req-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Malformed Request\" (A11 error code: 0x86) by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedMalformedReqPDSN";
+    }
+    leaf a11-reg-req-denied-unsupp-vend-id-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Unsupported Vendor Id\" (A11 error code: 0x8D)by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnsuppVendIdPDSN";
+    }
+    leaf a11-reg-req-denied-reverse-tunnel-unavailable-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Reverse Tunnel Unavailable\" (A11 error code: 0x89)by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedReverseTunnelUnavailablePDSN";
+    }
+    leaf a11-reg-req-denied-reverse-tunnel-tbit-not-set-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Reverse Tunnel Tbit Not Set\" (A11 error code: 0x8A)by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedReverseTunnelTbitNotSetPDSN";
+    }
+    leaf a11-reg-req-denied-unknown-error-code-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with an unspecified reason (A11 error code : 0x80) by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnknownErrorCodePDSN";
+    }
+    leaf a10-reg-req-for-registration-retransmissions-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Requests retransmitted during A10 setup";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForRegistrationRetransmissionsPDSN";
+    }
+    leaf a10-reg-req-for-re-registration-retransmissions-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Requests retransmitted during A10 reregistration";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForReRegistrationRetransmissionsPDSN";
+    }
+    leaf a10-reg-req-for-release-retransmissions-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Requests retransmitted during A10 realease";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForReleaseRetransmissionsPDSN";
+    }
+    leaf pdsn-number-pdsn-perf {
+      type int64;
+      description
+        "The PDSN Number";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.PDSNNumberPDSNPerf";
+    }
+    leaf pds-nip-address-pdsn-perf {
+      type inet:ip-address;
+      description
+        "The IP Address of the PDSN for which the PCF PDSN stats is obtained";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.PDSNipAddressPDSNPerf";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.";
+  }
+
+  grouping cdma2000-hrpd-redirect-g {
+    description
+      "CDMA2000 HRPD service redirection parameters.";
+    leaf redirect-channel-number {
+      type uint16 {
+        range "0..2047";
+      }
+      config false;
+      description
+        "The channel number set from ACS that the FAP uses to redirect the AT in case of closed access or when exceeding session capacity. The ACS shall push this if the the operator has provided this information in a configuration file. If this is not configured, the FAP rejects the AT. The supported range is 0..2047.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.Redirect.RedirectChannelNumber";
+    }
+    leaf redirect-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "The bandclass set from ACS that the FAP uses to redirect the AT incase of closed access or when exceeding session capacity. The ACS shall push this if the the operator has provided this information in a configuration file. If this is not configured, the FAP rejects the AT. The supported range is 0..9.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.Redirect.RedirectBandClass";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.Redirect.";
+  }
+
+  grouping cdma2000-hrpd-call-control-stats-g {
+    description
+      "Details on call control stats";
+    leaf num-session-setup-attempts {
+      type uint64;
+      description
+        "This parameter is a counter for the total number of session instances that are created on a specific FAP when a regular session setup attempt is initiated with an unknown RATI";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumSessionSetupAttempts";
+    }
+    leaf num-session-setup-successful {
+      type uint64;
+      description
+        "This parameter is a counter for the total number of successful regular session setup attempts that are initiated with an unknown RATI";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumSessionSetupSuccessful";
+    }
+    leaf num-current-sessions-established {
+      type uint64;
+      description
+        "This parameter is a counter for the total number of successfully established HRPD Sessions that exists on a specific picasso";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumCurrentSessionsEstablished";
+    }
+    leaf num-page-messages-to-at {
+      type uint64;
+      description
+        "The number of times a Page Message was sent to the AT to facilitate the setup of a connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumPageMessagesToAt";
+    }
+    leaf num-pages-succeeded {
+      type uint64;
+      description
+        "The total number of pages succeeded";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumPagesSucceeded";
+    }
+    leaf num-connections-opened {
+      type uint64;
+      description
+        "Total HRPD Connections Opened";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumConnectionsOpened";
+    }
+    leaf num-session-setups-failed-to-term-auth {
+      type uint64;
+      description
+        "This parameter is a counter for the total number of HRPD session setups that are aborted due to various failure reasons";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumSessionSetupsFailedToTermAuth";
+    }
+    leaf num-forward-rlp-bytes {
+      type uint64;
+      units "bytes";
+      description
+        "Number of HRPD packets(bytes) sent from PDSN to AT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumForwardRLPBytes";
+    }
+    leaf num-reverse-rlp-bytes {
+      type uint64;
+      units "bytes";
+      description
+        "No. of HRPD packets(bytes) sent from AT to PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumReverseRLPBytes";
+    }
+    leaf average-session-setup-time {
+      type uint64;
+      units "10 ms";
+      description
+        "This parameter maintains a record of the average session setup time for all successfully setup sessions on a specific FAP. The average session setup time is in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.AverageSessionSetupTime";
+    }
+    leaf average-page-setup-time {
+      type uint64;
+      description
+        "The average connection setup time in response to a FAP initiated page. The time is from initiation of Page to the time the connection is declared open";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.AveragePageSetupTime";
+    }
+    leaf num-conn-setups-aborted {
+      type uint64;
+      description
+        "The number of connection setups that were aborted";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumConnSetupsAborted";
+    }
+    leaf num-forward-pre-rlp-dropped-pkts {
+      type uint64;
+      description
+        "Number of packets dropped at Pre-RLP queue due to overflow in forward direction. This counter will also be written to the performance log.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumForwardPreRLPDroppedPkts";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.";
+  }
+
+  grouping cdma2000-hrpd-qo-s-stats-g {
+    description
+      "This object is used in obtaining the QoS Common Performance stats";
+    leaf num-qo-s-subscriber-profile-updates-rcvd {
+      type uint64;
+      description
+        "Number of subscriber QoS profile updates received from the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSSubscriberProfileUpdatesRcvd";
+    }
+    leaf num-pdsnip-flow-updates-msg-rcvd {
+      type uint64;
+      description
+        "Number of PDSN IP flow update messages received from PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumPDSNIPFlowUpdatesMsgRcvd";
+    }
+    leaf num-pdsnip-flow-updates-msg-failed {
+      type uint64;
+      description
+        "Number of PDSN IP Flow updates messages that failed per RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumPDSNIPFlowUpdatesMsgFailed";
+    }
+    leaf num-qo-s-setup-requests-received {
+      type uint64;
+      description
+        "Number of QoS setup requests received from the AT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSSetupRequestsReceived";
+    }
+    leaf num-qo-s-setup-requests-accepted {
+      type uint64;
+      description
+        "Number of QoS setup requests received from the AT that the FAP RNC accepted.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSSetupRequestsAccepted";
+    }
+    leaf num-qo-s-setup-requests-rejected {
+      type uint64;
+      description
+        "Number of QoS setup requests from the AT that the FAP RNC rejected.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSSetupRequestsRejected";
+    }
+    leaf num-reservation-on-requests-received {
+      type uint64;
+      description
+        "Number of ReservationOnRequest messages received from the AT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOnRequestsReceived";
+    }
+    leaf num-reservation-on-requests-accepted {
+      type uint64;
+      description
+        "Number of ReservationOnRequest messages received from the AT that the FAP RNC accepted.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOnRequestsAccepted";
+    }
+    leaf num-reservation-on-requests-rejected {
+      type uint64;
+      description
+        "Number of ReservationOnRequest message received from the AT that the FAP RNC rejected.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOnRequestsRejected";
+    }
+    leaf num-reservation-on-requests-failed {
+      type uint64;
+      description
+        "Number of ReservationOnRequest message received from the AT that the FAP RNC failed.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOnRequestsFailed";
+    }
+    leaf num-fwd-reservation-on-messages-sent {
+      type uint64;
+      description
+        "Number of times the FAP RNC sent a FwdReservationOn message to the AT to activate a forward Reservation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumFwdReservationOnMessagesSent";
+    }
+    leaf num-rev-reservation-on-messages-sent {
+      type uint64;
+      description
+        "Number of times the FAP RNC sent a RevReservationOn message to the AT to activate a reverse Reservation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumRevReservationOnMessagesSent";
+    }
+    leaf num-reservation-off-requests-received {
+      type uint64;
+      description
+        "Number of ReservationOffRequest message is received from the AT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOffRequestsReceived";
+    }
+    leaf num-reservation-off-requests-accepted {
+      type uint64;
+      description
+        "Number of ReservationOffRequest messages received from the AT that the FAP RNC accepted.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOffRequestsAccepted";
+    }
+    leaf num-reservation-off-requests-rejected {
+      type uint64;
+      description
+        "Number of ReservationOffRequest messages received from the AT that the FAP RNC rejected.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOffRequestsRejected";
+    }
+    leaf num-fwd-reservation-off-messages-sent {
+      type uint64;
+      description
+        "Number of times the FAP RNC sent a FwdReservationOff message to the AT to deactivate a forward Reservation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumFwdReservationOffMessagesSent";
+    }
+    leaf num-rev-reservation-off-messages-sent {
+      type uint64;
+      description
+        "Number of times the FAP RNC sent a RevReservationOff message to the AT to deactivate a reverse Reservation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumRevReservationOffMessagesSent";
+    }
+    leaf num-qo-s-release-requests-received {
+      type uint64;
+      description
+        "Number of QoS release requests received from the AT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSReleaseRequestsReceived";
+    }
+    leaf num-connection-close-initiated-no-ran-rsr {
+      type uint64;
+      description
+        "Number of times FAP RNC initiated a connection close in response to the ReservationOnRequest because it did not have the RAN resources to satisfy one or more Reservations included in the request.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumConnectionCloseInitiatedNoRANRsr";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.";
+  }
+
+  grouping cdma2000-hrpd-rnc-sig-apps-stats-g {
+    description
+      "Stats for HRPD RNC signaling procedures.";
+    leaf c-num-page-requests {
+      type uint64;
+      description
+        "Number of HRPD Page requests made after data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumPageRequests";
+    }
+    leaf s-num-page-requests {
+      type uint64;
+      description
+        "Number of HRPD Page requests made before data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumPageRequests";
+    }
+    leaf s-num-connection-setup-attempts {
+      type uint64;
+      description
+        "Number of HRPD Connection setups attempted before data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumConnectionSetupAttempts";
+    }
+    leaf c-num-connection-setup-attempts {
+      type uint64;
+      description
+        "Number of HRPD Connection setups attempted after data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumConnectionSetupAttempts";
+    }
+    leaf s-num-connection-setup-success {
+      type uint64;
+      description
+        "Number of HRPD Connection setups succeeded before data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumConnectionSetupSuccess";
+    }
+    leaf c-num-connection-setup-success {
+      type uint64;
+      description
+        "Number of HRPD Connection setups succeeded after data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumConnectionSetupSuccess";
+    }
+    leaf s-num-normal-connection-closes {
+      type uint64;
+      description
+        "The number of HRPD connections that were closed normally before data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNormalConnectionCloses";
+    }
+    leaf c-num-normal-connection-closes {
+      type uint64;
+      description
+        "The number of HRPD connections that were closed normally after data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNormalConnectionCloses";
+    }
+    leaf s-num-total-connection-closes {
+      type uint64;
+      description
+        "The total number of HRPD connections closed, normally or abnormally, data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumTotalConnectionCloses";
+    }
+    leaf c-num-total-connection-closes {
+      type uint64;
+      description
+        "The total number of HRPD connections closed, normally or abnormally, after data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumTotalConnectionCloses";
+    }
+    leaf s-num-rf-related-drops {
+      type uint64;
+      description
+        "Number of HRPD connection close because of RTC loss or No FTC before data has flowed on the A10 connection";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumRFRelatedDrops";
+    }
+    leaf c-num-rf-related-drops {
+      type uint64;
+      description
+        "Number of HRPD connection close because of RTC loss or No FTC after data has flowed on the A10 connection";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumRFRelatedDrops";
+    }
+    leaf s-num-page-responses {
+      type uint64;
+      description
+        "Total number of successful responses to HRPD page requests that were received from the AT before the final page timeout and before data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumPageResponses";
+    }
+    leaf c-num-page-responses {
+      type uint64;
+      description
+        "Total number of successful responses to HRPD page requests that were received from the AT before the final page timeout and after data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumPageResponses";
+    }
+    leaf s-num-rf-related-drops-rtc-lost {
+      type uint64;
+      description
+        "This statistic counts the number of times the HRPD connection was dropped before data has flowed on the A10 connection because a Reverse Traffic Channel (RTC) lost indication was received, and as a result, no reverse link for the connection were available.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumRFRelatedDropsRTCLost";
+    }
+    leaf c-num-rf-related-drops-rtc-lost {
+      type uint64;
+      description
+        "This statistic counts the number of times the HRPD connection was dropped after data has flowed on the A10 connection because a Reverse Traffic Channel (RTC) lost indication was received, and as a result, no reverse link for the connection were available.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumRFRelatedDropsRTCLost";
+    }
+    leaf s-num-rf-related-drops-no-ftc {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped before data has flowed on the A10 connection because of indications that there is no active Forward Traffic Channel (FTC) available.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumRFRelatedDropsNoFTC";
+    }
+    leaf c-num-rf-related-drops-no-ftc {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped after data has flowed on the A10 connection because of indications that there is no active Forward Traffic Channel (FTC) available.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumRFRelatedDropsNoFTC";
+    }
+    leaf s-num-network-error-drops {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were closed before data has flowed on the A10 connection because the FAP closed the open A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNetworkErrorDrops";
+    }
+    leaf c-num-network-error-drops {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were closed after data has flowed on the A10 connection because the FAP closed the open A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNetworkErrorDrops";
+    }
+    leaf s-num-network-error-drops-rnc-internal {
+      type uint64;
+      description
+        "This statistic counts the number of open HRPD connections that were closed before data has flowed on the A10 connection because the FAP closed the A10 connection due to internal failures.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNetworkErrorDropsRNCInternal";
+    }
+    leaf c-num-network-error-drops-rnc-internal {
+      type uint64;
+      description
+        "This statistic counts the number of open HRPD connections that were closed after data has flowed on the A10 connection because the FAP closed the A10 connection due to internal failures.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNetworkErrorDropsRNCInternal";
+    }
+    leaf s-num-network-error-drops-rnc-external {
+      type uint64;
+      description
+        "This statistic counts the number of open HRPD connections that were closed before data has flowed on the A10 connection because the FAP closed the A10 connection due to the PDSN unreachablity.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNetworkErrorDropsRNCExternal";
+    }
+    leaf c-num-network-error-drops-rnc-external {
+      type uint64;
+      description
+        "This statistic counts the number of open HRPD connections that were closed after data has flowed on the A10 connection because the FAP closed the A10 connection due to the PDSN unreachablity.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNetworkErrorDropsRNCExternal";
+    }
+    leaf s-num-network-error-drops-a10-setup-fail {
+      type uint64;
+      description
+        "This statistic counts the number of open HRPD connections that were closed before data has flowed on the A10 connection because there was failure in the A10 connection set-up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNetworkErrorDropsA10SetupFail";
+    }
+    leaf c-num-network-error-drops-a10-setup-fail {
+      type uint64;
+      description
+        "This statistic counts the number of open HRPD connections that were closed after data has flowed on the A10 connection because there was failure in the A10 connection set-up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNetworkErrorDropsA10SetupFail";
+    }
+    leaf s-num-misc-drops-sector-down {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped before data has flowed on the A10 connection because there is only one pilot available for the connection and a sector down indication has been received for that pilot.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumMiscDropsSectorDown";
+    }
+    leaf c-num-misc-drops-sector-down {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped after data has flowed on the A10 connection because there is only one pilot available for the connection and a sector down indication has been received for that pilot.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumMiscDropsSectorDown";
+    }
+    leaf s-num-misc-drops-internal-error {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped before data has flowed on the A10 connection due to internal software errors.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumMiscDropsInternalError";
+    }
+    leaf c-num-misc-drops-internal-error {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped after data has flowed on the A10 connection due to internal software errors.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumMiscDropsInternalError";
+    }
+    leaf c-num-misc-drops-state-mismatch {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped after data has flowed on the A10 connection when the FAP finds a state mismatch between itself andthe AT. Such a mismatch is found when a connection request message is received from the AT, and the connection is already open as perceived by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumMiscDropsStateMismatch";
+    }
+    leaf s-num-misc-drops-state-mismatch {
+      type uint64;
+      description
+        "This statistic counts the number of connections that were dropped before the demarcation point when the FAP finds a state mismatch between itself and the AT. Such a mismatch is found when a connection request message is received from the AT, and the connection is already open as perceived by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumMiscDropsStateMismatch";
+    }
+    leaf s-num-misc-drops-due-to-rlp {
+      type uint64;
+      description
+        "This statistic counts the number of times the HRPD connection was dropped before data has flowed on the A10 connection at the request of the Radio Link Protocol. This request is generated when the HDR Fast Path component finds that the reset acknowledgment timeout has expired for the connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumMiscDropsDueToRLP";
+    }
+    leaf c-num-misc-drops-due-to-rlp {
+      type uint64;
+      description
+        "This statistic counts the number of times the HRPD connection was dropped after data has flowed on the A10 connection at the request of the Radio Link Protocol. This request is generated when the HDR Fast Path component finds that the reset acknowledgment timeout has expired for the connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumMiscDropsDueToRLP";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.";
+  }
+
+  grouping cdma2000-hrpd-access-auth-config-g {
+    description
+      "HRPD A12-related service stats.";
+    leaf a12-access-authentication-enable {
+      type int64;
+      config false;
+      description
+        "Flag to enable/Disable HRPD Access Authentication. {{true}} - Enabled, {{false}} - Disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthConfig.A12AccessAuthenticationEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthConfig.";
+  }
+
+  grouping cdma2000-hrpd-access-auth-stats-g {
+    description
+      "This object is used in obtaining the Access Authentication related stats.";
+    leaf an-ppp-authentication-attempts-by-node {
+      type uint64;
+      description
+        "Number of AnPppAuthentications attempted by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.AnPppAuthenticationAttemptsByNode";
+    }
+    leaf a12-requests-sent-from-node {
+      type uint64;
+      description
+        "Number of A12 Access Requests Sent from the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12RequestsSentFromNode";
+    }
+    leaf a12-rejects-received-by-node {
+      type uint64;
+      description
+        "Number of A12 Access Rejects received from the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12RejectsReceivedByNode";
+    }
+    leaf a12-accepts-received-by-node {
+      type uint64;
+      description
+        "Number of A12 Access Accepts received by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12AcceptsReceivedByNode";
+    }
+    leaf a12-access-challenges-received-by-node {
+      type uint64;
+      description
+        "Number of A12 Access Challenges received by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12AccessChallengesReceivedByNode";
+    }
+    leaf a12-retransmits-sent-from-node {
+      type uint64;
+      description
+        "Number of A12 Access Requests retransmitted from the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12RetransmitsSentFromNode";
+    }
+    leaf a12-timeouts-events-for-node {
+      type uint64;
+      description
+        "Number of A12 Timeout events occurred at the FAP due to unreachability of the AAA server/ no response from the AAA server.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TimeoutsEventsForNode";
+    }
+    leaf a12-malformedresponse-received-by-node {
+      type uint64;
+      description
+        "Number of Malformed A12 Access Response received by the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12MalformedresponseReceivedByNode";
+    }
+    leaf a12-bad-authenticator-received-by-node {
+      type uint64;
+      description
+        "Number of A12 Access Response with Bad Authenticator received by the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12BadAuthenticatorReceivedByNode";
+    }
+    leaf a12-unknown-type-received-by-node {
+      type uint64;
+      description
+        "Number of A12 Packet of unknown type received by the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12UnknownTypeReceivedByNode";
+    }
+    leaf a12-unknown-pkt-received-by-node {
+      type uint64;
+      description
+        "Number of unknown A12 packets received by the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12UnknownPktReceivedByNode";
+    }
+    leaf a12-unknown-server-received-by-node {
+      type uint64;
+      description
+        "Number of A12 packets received from unknown AAA server by the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12UnknownServerReceivedByNode";
+    }
+    leaf a12-other-failure-occurences-in-node {
+      type uint64;
+      description
+        "Number of A12 packets failed due to other failure occurences in the AAA server.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12OtherFailureOccurencesInNode";
+    }
+    leaf a12-by-pass-num-ats-with-unknown-mfr-code-by-node {
+      type uint64;
+      description
+        "Number of ATs with UnknowMfrCode detected in the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12ByPassNumAtsWithUnknownMfrCodeByNode";
+    }
+    leaf a12-tx-path-fail-due-to-an-ppp-error-by-node {
+      type uint64;
+      description
+        "Number of times sending of A12 packet failed in Tx Path in the FAP RNC due to \"AnPPP Error\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToAnPppErrorByNode";
+    }
+    leaf a12-tx-path-fail-due-to-no-server-available-by-node {
+      type uint64;
+      description
+        "Number of times sending of A12 packet failed in Tx Path in the FAP RNC due to \"No Server Available\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToNoServerAvailableByNode";
+    }
+    leaf a12-tx-path-fail-due-to-internal-error-by-node {
+      type uint64;
+      description
+        "Number of times sending of A12 packet failed in Tx Path in the FAP RNC due to \"internal error\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToInternalErrorByNode";
+    }
+    leaf a12-tx-path-fail-due-to-no-packet-id-available-by-node {
+      type uint64;
+      description
+        "Number of times sending of A12 packet failed in Tx Path in the FAP RNC due to \"No packet id available\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToNoPacketIdAvailableByNode";
+    }
+    leaf a12-tx-path-fail-due-to-transmit-error-by-node {
+      type uint64;
+      description
+        "Number of times sending of A12 packet failed in Tx Path in the FAP RNC due to \"Transmit Error\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToTransmitErrorByNode";
+    }
+    leaf a12-svr-timeouts-for-node {
+      type uint64;
+      description
+        "Number of A12 server timeouts happened in the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12SvrTimeoutsForNode";
+    }
+    leaf a12-enh-ta-bypass-lcp-timeout-by-node {
+      type uint64;
+      description
+        "Number of LCP timeouts happened in the FAP RNC when Enhanced TA A12Bypass mode is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12EnhTaBypassLcpTimeoutByNode";
+    }
+    leaf a12-enh-ta-bypass-chap-timeout-by-node {
+      type uint64;
+      description
+        "Number of CHAP timeouts happened in the FAP RNC when Enhanced TA A12Bypass mode is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12EnhTaBypassChapTimeoutByNode";
+    }
+    leaf a12-enh-ta-bypass-chap-invalid-by-node {
+      type uint64;
+      description
+        "Number of CHAP Challenge response received from the AT when Enhanced TA A12Bypass mode is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12EnhTaBypassChapInvalidByNode";
+    }
+    leaf a12-enh-ta-bypass-chap-nai-matches-a12-bypass-list-by-node {
+      type uint64;
+      description
+        "Number of times the CHAP NAI received from the AT matches with A12Bypass List in the FAP RNC when Enhanced TA A12Bypass mode is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12EnhTaBypassChapNaiMatchesA12BypassListByNode";
+    }
+    leaf a12-session-ta-timeout-by-node {
+      type uint64;
+      description
+        "Number of times Session timeouts occurred due to TA.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12SessionTaTimeoutByNode";
+    }
+    leaf access-auth-failed-due-to-session-close-total {
+      type uint64;
+      description
+        "Number of times the Access Authenticaiton failed due to Sesion close.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.AccessAuthFailedDueToSessionCloseTotal";
+    }
+    leaf access-auth-succeeded {
+      type uint64;
+      description
+        "Number of times the Access Authenticaiton succeeded.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.AccessAuthSucceeded";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.";
+  }
+
+  grouping cdma2000-beacon-g {
+    description
+      "This object models the attributes to control the generalized beacon. The beacon is modeled as a beacon frame composed of multiple beacon intervals. The beacon frame start is time-aligned to the instant when 1x 80ms paging frames and HRPD control channel frames align (occurs once every 1.28s).";
+    leaf beacon-admin-status {
+      type enumeration {
+        enum "locked" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconAdminStatus - Locked";
+        }
+        enum "unlocked" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconAdminStatus - Unlocked";
+        }
+      }
+      config false;
+      description
+        "Allows administrative control of beacon.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconAdminStatus";
+    }
+    leaf beacon-oper-status {
+      type enumeration {
+        enum "locked" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconOperStatus - Locked";
+        }
+        enum "unlocked" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconOperStatus - Unlocked";
+        }
+        enum "fault" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconOperStatus - Fault";
+        }
+      }
+      description
+        "Reports operational status of beacon.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconOperStatus";
+    }
+    leaf hrpd-beacon-enable {
+      type boolean;
+      config false;
+      description
+        "If set to {{true}} the HRPD-specific beacon described by {{object|HRPDBeaconList}} object is enabled. If set to {{false}}, all HRPD beacons (if any) are contained in the BeaconList object.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconEnable";
+    }
+    leaf period {
+      type uint16 {
+        range "0..32767";
+      }
+      units "80 ms slots";
+      config false;
+      description
+        "Length and periodicity of the beacon frame in {{units}}. Reference - {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.Period";
+    }
+    leaf maxfap-beacon-tx-power {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Maximum transmission power allowed on the FAP Beacon frequencies. {{param}} is expressed as a range of allowed maximum power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<;Pmax_low>..<;Pmax_high>\". {{param}} identifies the limits between which the FAP can self-configure its maximum beacon transmit power. Self-configuration for maximum beacon transmission power is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerSelfConfigEnable}} from an enabled perspective. <;Pmax_low> and <;Pmax_high> are measured in dBm and have a range of -40.0 to 20.0 incremented by 0.1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPower";
+    }
+    leaf maxfap-beacon-tx-power-in-use {
+      type int64;
+      units "0.1 dBm";
+      description
+        "Maximum beacon transmission power measured in {{units}} currently used by the FAP on any beacon frequency. Actual values of the maximum transmission power are -40.0 dBm to 20.0 dBm in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the maximum transmission power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPowerInUse";
+    }
+    leaf beacon-pch-pwr-percentage {
+      type int64;
+      units "0.001 percent";
+      config false;
+      description
+        "Percentage of Max Sector Power Used By Paging Channel (expressed in {{units}}). For example, 93333 means 93.333% of the max sector power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconPchPwrPercentage";
+    }
+    leaf max-hrpd-beacon-tx-power {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Maximum transmission power allowed on the dedicated HRPD beacon. {{param}} is expressed as a range of allowed maximum power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<Pmax_low>..<Pmax_high>\". MaxHRPDBeaconTxPower identifies the limits between which the FAP can self-configure its maximum beacon transmit power. Self-configuration for maximum beacon transmission power is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerSelfConfigEnable}} from an enabled perspective. <Pmax_low> and <Pmax_high> are measured in dBm and have a range of -40.0 to 20.0 incremented by 0.1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxHRPDBeaconTxPower";
+    }
+    leaf max-hrpd-beacon-tx-power-in-use {
+      type int64;
+      units "0.1 dBm";
+      description
+        "Maximum beacon transmission power measured in dBm currently used by the FAP on any beacon frequency. Actual values of the maximum transmission power are -40.0 dBm to 20.0 in units of {{units}}. The value of {{param}} divided by 10 yields the actual value of the maximum transmission power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxHRPDBeaconTxPowerInUse";
+    }
+    leaf beacon-pilot-pwr-percentage {
+      type int64;
+      units "0.001 percent";
+      config false;
+      description
+        "Percentage of Max Sector Power Used By Pilot Channel (expressed in {{units}}). For example, 19950 means 19.950% of total.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconPilotPwrPercentage";
+    }
+    leaf beacon-sync-pwr-percentage {
+      type int64;
+      units "0.001 percent";
+      config false;
+      description
+        "Percentage of Max Sector Power Used By Sync Channel (expressed in {{units}}). For example, 23458 means 23.458% of the max sector power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconSyncPwrPercentage";
+    }
+    leaf max-beacon-list-entries {
+      type uint64;
+      description
+        "Maximum number of entries in the {{object|.CellConfig.CDMA2000.Beacon.BeaconList.{i}.}} object.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxBeaconListEntries";
+    }
+    leaf beacon-list-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconListNumberOfEntries";
+    }
+    leaf max-hrpd-beacon-list-entries {
+      type uint64;
+      description
+        "Maximum number of entries in the {{object|.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.}} object.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxHRPDBeaconListEntries";
+    }
+    leaf hrpd-beacon-list-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconListNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.";
+  }
+
+  grouping cdma2000-beacon-beacon-list-g {
+    description
+      "This object models an individual beacon intervals. It may be used to model both 1x and HRPD beacons with offset from start of beacon frame measured in 80ms slots.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.Alias";
+    }
+    leaf beacon-index {
+      type int64;
+      description
+        "Instance identifier for this beacon interval. Allowed range is 0..(BeaconListNumberOfEntries-1).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconIndex";
+    }
+    leaf offset {
+      type uint16 {
+        range "0..32767";
+      }
+      config false;
+      description
+        "Offset from the start of the beacon frame in 80ms slots.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.Offset";
+    }
+    leaf duration {
+      type uint16 {
+        range "0..32767";
+      }
+      units "80 ms slots";
+      config false;
+      description
+        "Duration of this beacon interval in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.Duration";
+    }
+    leaf transmission-format {
+      type enumeration {
+        enum "0" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.TransmissionFormat - 0";
+        }
+        enum "1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.TransmissionFormat - 1";
+        }
+      }
+      config false;
+      description
+        "Determines if this beacon interval shall transmit HRPD (HRPD) or CDMA2000 1x.{HRPD=\"0\", 1x=\"1\"}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.TransmissionFormat";
+    }
+    leaf beacon-band-class {
+      type int64;
+      config false;
+      description
+        "Band class for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconBandClass";
+    }
+    leaf beacon-channel-freq {
+      type uint16 {
+        range "0..2016";
+      }
+      config false;
+      description
+        "Channel number for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconChannelFreq";
+    }
+    leaf-list beacon-pn-offset {
+      type string {
+        length "0..32";
+      }
+      config false;
+      min-elements 1;
+      description
+        "{{list}} Each item is a pilot PN offset of the pilot beacon for this channel in units of 64 PN chips. If this parameter contains more than one item, then the FAP is expected to select one from the list as the PilotPN to be used for this channel. If the self-configuration capability is not to be used, then this parameter SHALL contain only a single item.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconPNOffset";
+    }
+    leaf tx-power {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "TX power for the beacon interval (in {{units}}). If self-configuration of the Beacon Tx Power is enabled, then this value is determined by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.TxPower";
+    }
+    leaf beacon-sid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "SID for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconSID";
+    }
+    leaf beacon-nid {
+      type uint16 {
+        range "0..32767";
+      }
+      config false;
+      description
+        "NID for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconNID";
+    }
+    leaf beacon-pzid {
+      type uint64;
+      config false;
+      description
+        "PZID for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconPZID";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.";
+  }
+
+  grouping cdma2000-beacon-hrpd-beacon-list-g {
+    description
+      "This object models individual HRPD beacon intervals where the beacon start is expressed as a number of HRPD control channel slots from the start of the beacon frame.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.Alias";
+    }
+    leaf beacon-index {
+      type int64;
+      description
+        "Instance identifier for this beacon interval. Allowed range is 0..(HRPDBeaconListNumberOfEntries-1).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.BeaconIndex";
+    }
+    leaf c-coffset {
+      type uint16 {
+        range "0..2048";
+      }
+      config false;
+      description
+        "Offset of the current beacon interval from the start of the beacon frame, in Control Channel cycles. The HRPDBeaconList interval SHOULD not overlap in time with any beacon interval for the same channel defined in the BeaconList object.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.CCoffset";
+    }
+    leaf offset {
+      type int64;
+      config false;
+      description
+        "Start of beacon transmission with respect to the Control Channel boundary.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.Offset";
+    }
+    leaf duration {
+      type uint16 {
+        range "0..256";
+      }
+      config false;
+      description
+        "Duration of the beacon transmission within a Control Channel cycle, in slots. Beacon is transmitted starting offset from the CC boundary for duration. Transmission restarts offset from the next CC boundary, given that beacon interval spans more than 1 CC cycles.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.Duration";
+    }
+    leaf num-c-ccycles {
+      type uint8 {
+        range "0..48";
+      }
+      config false;
+      description
+        "Number of Control Channel Cycles this beacon interval spans.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.NumCCcycles";
+    }
+    leaf beacon-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "Band class for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.BeaconBandClass";
+    }
+    leaf beacon-channel-freq {
+      type uint16 {
+        range "0..2016";
+      }
+      config false;
+      description
+        "Channel number for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.BeaconChannelFreq";
+    }
+    leaf-list beacon-pn-offset {
+      type string {
+        length "0..256";
+      }
+      config false;
+      min-elements 1;
+      description
+        "{{list}} Each item is a pilot PN offset of the pilot beacon for this channel in units of 64 PN chips. If this parameter contains more than one item, then the FAP is expected to select one from the list as the PilotPN to be used for this channel. If the self-configuration capability is not to be used, then this parameter SHALL contain only a single item.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.BeaconPNOffset";
+    }
+    leaf tx-power {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "TX power for the beacon interval. If self-configuration of the HRPD Beacon Tx Power is enabled, then this value is determined by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.TxPower";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.";
+  }
+
+  grouping rem-g {
+    description
+      "This object contains parameters relating to REM (Radio Environment Measurement).";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.";
+  }
+
+  grouping rem-umts-g {
+    description
+      "This object contains Radio Environment Measurement parameters for UMTS FAP.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.";
+  }
+
+  grouping rem-umts-wcdma-g {
+    description
+      "This object contains parameters relating to radio environment measurement capabilities for the UMTS system.";
+    leaf in-service-handling {
+      type enumeration {
+        enum "immediate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.InServiceHandling - Immediate";
+        }
+        enum "delayed" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.InServiceHandling - Delayed";
+        }
+      }
+      default "immediate";
+      config false;
+      description
+        "FAP REM behavior with respect to ongoing active connections.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.InServiceHandling";
+    }
+    leaf scan-on-boot {
+      type boolean;
+      default "true";
+      config false;
+      description
+        "Enables or disables Radio Environment Measurement during the FAP start up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanOnBoot";
+    }
+    leaf scan-periodically {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Enable Periodic Radio Environment Measurement on all enabled RAT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanPeriodically";
+    }
+    leaf periodic-interval {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "When {{param|ScanPeriodically}} is {{true}}, this value indicates the interval in {{units}} which REM is performed while the FAP service is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.PeriodicInterval";
+    }
+    leaf periodic-time {
+      type yang:date-and-time;
+      config false;
+      description
+        "An absolute time reference in UTC to determine when the CPE will initiate the periodic REM. Each REM MUST occur at (or as soon as possible after) this reference time plus or minus an integer multiple of the {{param|PeriodicInterval}}. {{param}} is used only to set the \"phase\" of the REM. The actual value of {{param}} can be arbitrarily far into the past or future. For example, if {{param|PeriodicInterval}} is 86400 (a day) and if {{param}} is set to UTC midnight on some day (in the past, present, or future) then periodic REMs will occur every day at UTC midnight. These MUST begin on the very next midnight, even if {{param}} refers to a day in the future. The Unknown Time value defined in {{bibref|TR-106a2|Section 3.2}} indicates that no particular time reference is specified. That is, the CPE MAY locally choose the time reference, and needs only to adhere to the specified PeriodicInformInterval. If absolute time is not available to the CPE, its periodic REM behavior MUST be the same as if {{param}} parameter was set to the Unknown Time value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.PeriodicTime";
+    }
+    leaf-list remplmn-list {
+      type string;
+      config false;
+      max-elements "32";
+      description
+        "{{list}} Each item is a PLMN ID to measure. PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. If {{empty}}, then no specific PLMN ID is provided, meaning that the FAP is required to scan all available PLMN IDs.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.REMPLMNList";
+    }
+    leaf-list rem-band-list {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "{{list}} Each item is a UMTS Band to measure. Each band is identified in by a roman numeral {{bibref|3GPP-TS.25.104}}. If {{empty}} then no specific UMTS band is provided, meaning that the FAP is required to scan all available bands. The order of the band indicator has no significance.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.REMBandList";
+    }
+    leaf-list uarfcndl-list {
+      type string;
+      config false;
+      max-elements "64";
+      description
+        "{{list}} Each entry is a UARFCN in the DL direction to measure. If {{empty}}, then no specific UARFCN is provided, meaning that the FAP is required to scan all UARFCNs that it is aware of.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.UARFCNDLList";
+    }
+    leaf scan-timeout {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Specifies the time-out value in {{units}}, measured from the start of the REM scan, before the REM scan will time out.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanTimeout";
+    }
+    leaf scan-status {
+      type enumeration {
+        enum "indeterminate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanStatus - Indeterminate";
+        }
+        enum "in-progress" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanStatus - InProgress";
+        }
+        enum "success" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanStatus - Success";
+        }
+        enum "error" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanStatus - Error";
+        }
+        enum "error-timeout" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanStatus - Error_TIMEOUT";
+        }
+      }
+      description
+        "Indicates the current status of this scan.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanStatus";
+    }
+    leaf error-details {
+      type string {
+        length "0..256";
+      }
+      description
+        "Provides more detail when the {{param|ScanStatus}} is either {{enum|Error|ScanStatus}} or {{enum|Error_TIMEOUT|ScanStatus}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ErrorDetails";
+    }
+    leaf last-scan-time {
+      type yang:date-and-time;
+      description
+        "The time of the last UMTS system radio environment measurement.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.LastScanTime";
+    }
+    leaf max-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.UMTS.WCDMA.Cell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.MaxCellEntries";
+    }
+    leaf cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.CellNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.";
+  }
+
+  grouping rem-umts-wcdma-cell-g {
+    leaf rem-umts-wcdma-cell-key {
+      type string;
+      description
+        "Key value for this object, which could be an item of a list.";
+    }
+    description
+      "Table indicating the components of the discovered cells.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.";
+  }
+
+  grouping rem-umts-wcdma-cell-rf-g {
+    description
+      "Table indicating the RF aspect of the discovered cells.";
+    leaf uarfcndl {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "The UTRA Absolute Radio Frequency Channel Number (UARFCN) in the DL direction of an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.UARFCNDL";
+    }
+    leaf cpichrscp {
+      type int64;
+      units "dBm";
+      description
+        "Received signal level in {{units}} of the CPICH channel. (Ref. 3GPP TS 25.133)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.CPICHRSCP";
+    }
+    leaf cpich-ec-no {
+      type int64;
+      units "dB";
+      description
+        "Measured EcNo. (energy per chip to interference power density) in {{units}} received in the downlink pilot channel. Actual values of the range are -24.0 {{units}} to 0.0 {{units}} in steps of 0.5 {{units}}. The value of {{param}} divided by 2 yields the actual value of the range. {{bibref|3GPP-TS.25.133|Section 9.1.2.3}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.CPICHEcNo";
+    }
+    leaf rssi {
+      type int64;
+      units "dBm";
+      description
+        "This measurement is for Inter-frequency handover evaluation, measured in total {{units}} in the band. {{bibref|3GPP-TS.25.133|Section9.1.3}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.RSSI";
+    }
+    leaf primary-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Primary scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.PrimaryScramblingCode";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.";
+  }
+
+  grouping rem-umts-wcdma-cell-bcch-g {
+    description
+      "Table containing the system information broadcast in the BCCH logical channel.";
+    leaf plmn-type {
+      type enumeration {
+        enum "gsm-map" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.PLMNType - GSM-MAP";
+        }
+        enum "ansi-41" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.PLMNType - ANSI-41";
+        }
+      }
+      description
+        "Type of Public Land Mobile Network (PLMN).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.PLMNType";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.PLMNID";
+    }
+    leaf lac {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Location Area Code (LAC) as defined in SIB 1 {{bibref|3GPP-TS.25.331}}. The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the LAI (Location Area ID) {{bibref|3GPP-TS.23.003}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "Routing Area Code (RAC) as defined in SIB 1 {{bibref|3GPP-TS.25.331}}. The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the RAI (Routing Area ID) {{bibref|3GPP-TS.23.003}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.RAC";
+    }
+    leaf cell-id {
+      type uint32 {
+        range "0..268435455";
+      }
+      description
+        "Cell Identity as defined in SIB3 {{bibref|3GPP-TS.25.331|Section10.3.2.2}}. {{bibref|3GPP-TS.24.008}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CellID";
+    }
+    leaf pcpich-tx-power {
+      type int64;
+      description
+        "Primary Common Pilot Channel (CPICH) power level on SIB 5/6 {{bibref|3GPP-TS.25.331|Section10.3.6.55}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.PCPICHTxPower";
+    }
+    leaf csg-indicator {
+      type boolean;
+      description
+        "The CSG-indicator Information Element (IE) in the Master Information Block reflects the access mode of the CSG cell. It is hence dependent on the value of {{param|.AccessMgmt.UMTS.AccessMode}}. If {{true}} the CSG-indicator IE is present, reflecting closed access to the CSG cell. If {{false}} the CSG-indicator IE is absent, reflecting the access mode as \"not a closed-access\". {{bibref|3GPP-TS.25.331|Section 10.2.48.8.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGIndicator";
+    }
+    leaf csgid {
+      type uint32 {
+        range "0..134217727";
+      }
+      description
+        "Defines the Closed Subscriber Group of the Access Control List. FAP broadcasts this CSG ID in SIB3 {{bibref|3GPP-TS.25.331|Section10.3.2.8}} depending on the AccessMode.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGID";
+    }
+    leaf-list uarfcndl-list {
+      type uint16 {
+        range "0..16383";
+      }
+      max-elements "128";
+      description
+        "{{list}} Each item is a UTRA Absolute Radio Frequency Channel Number (UARFCN} in the DL direction dedicated to the CSG cells. {{param}} is broadcast in SIB 11bis {{bibref|3GPP-TS.25.331|Section 10.2.48.8.14a}}. The corresponding UTRA Absolute Radio Frequency Channel Number (UARFCN} in the UL direction is derived based on the fixed offset applicable for the frequency band.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.UARFCNDLList";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.";
+  }
+
+  grouping rem-umts-wcdma-cell-bcch-csgpsc-split-info-g {
+    description
+      "This object contains parameters relating to the Primary Scambling Code (PSC) split information for the CSG. Defined in SIB3/11bis {{bibref|3GPP-TS.25.331|Section 10.3.2.8 and 10.3.2.9}}.";
+    leaf start-psc-range1-coefficient {
+      type uint8 {
+        range "0..63";
+      }
+      description
+        "The value of this Information Element (IE) multiplied by 8 specifies the start PSC value of the first PSC range as specified in {{bibref|3GPP-TS.25.331|Section 8.6.2.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.StartPSCRange1Coefficient";
+    }
+    leaf number-of-ps-cs {
+      type enumeration {
+        enum "5" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 5";
+        }
+        enum "10" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 10";
+        }
+        enum "15" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 15";
+        }
+        enum "20" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 20";
+        }
+        enum "30" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 30";
+        }
+        enum "40" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 40";
+        }
+        enum "50" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 50";
+        }
+        enum "64" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 64";
+        }
+        enum "80" {
+          value 9;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 80";
+        }
+        enum "120" {
+          value 10;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 120";
+        }
+        enum "160" {
+          value 11;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 160";
+        }
+        enum "256" {
+          value 12;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 256";
+        }
+        enum "alltherest" {
+          value 13;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - alltherest";
+        }
+        enum "spare3" {
+          value 14;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - spare3";
+        }
+        enum "spare2" {
+          value 15;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - spare2";
+        }
+        enum "spare1" {
+          value 16;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - spare1";
+        }
+      }
+      description
+        "This Information Element (IE) specifies the number of PSCs reserved for CSG cells in each PSC range.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs";
+    }
+    leaf psc-range2-offset {
+      type uint8 {
+        range "0..63";
+      }
+      description
+        "If this Information Element (IE) is included, the UE shall calculate the second PSC range as specified in {{bibref|3GPP-TS.25.331|Section 8.6.2.4}}. If this Information Element (IE) is not included, the UE shall consider the second PSC range to be not present.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.PSCRange2Offset";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.";
+  }
+
+  grouping rem-umts-wcdma-cell-bcch-reference-position-g {
+    description
+      "This object defines parameters related to the surface point of the ellipsoid. {{bibref|3GPP-TS.23.032|Section 5}} It is characterized by the co-ordinates of an ellipsoid point with altitude, distances, and an angle of orientation. This information is used to refer to a point on the Earth's surface, or close to the Earth's surface, with the same longitude and latitude.";
+    leaf latitude {
+      type int64;
+      description
+        "This parameter specifies the latitude of the device's position in degrees, multiplied by 1 million. The positive value signifies the direction, north of the equator. The negative value signifies the direction, south of the equator. Range is from: 90.00.00' South (-90,000,000) to 90.00.00' North (90,000,000). Example: A latitude of 13.19.43' N would be represented as 13,323,833, derived as (13*1,000,000)+((19.43*1,000,000)/60). Latitude of 50.00.00' S would be represented as value -50,000,000. If 0 then SIB15 is not detected in the specific cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.Latitude";
+    }
+    leaf longitude {
+      type int64;
+      description
+        "This parameter specifies the longitude of the device's position in degrees, multiplied by 1 million. The positive value signifies the direction, east of the prime meridian. The negative value signifies the direction, west of the prime meridian. Range is from: 180.00.00' West (-180,000,000) to 180.00.00' East (180,000,000). Example: A longitude of 13.19.43' E would be represented as 13,323,833, derived as (13*1,000,000)+((19.43*1,000,000)/60). A longitude of 50.00'0'' W would be represented as value -50,000,000. If 0 then SIB15 is not detected in the specific cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.Longitude";
+    }
+    leaf uncertainty-semi-major {
+      type uint8 {
+        range "0..127";
+      }
+      description
+        "The uncertainty r is derived from the \"uncertainty code\" k by r = 10 x ( 1.1 <power> (k-1) ) {{bibref|3GPP-TS.23.032|Section6.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.UncertaintySemiMajor";
+    }
+    leaf uncertainty-semi-minor {
+      type uint8 {
+        range "0..127";
+      }
+      description
+        "The uncertainty r is derived from the \"uncertainty code\" k by r = 10 x ( 1.1 <power> (k-1) ) {{bibref|3GPP-TS.23.032|Section6.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.UncertaintySemiMinor";
+    }
+    leaf orientation-of-major-axis {
+      type uint8 {
+        range "0..89";
+      }
+      description
+        "The Information Element (IE) value 'N' is derived by this formula: 2N <= a < 2(N+1) Where 'a' is the orientation in degrees (0..179).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.OrientationOfMajorAxis";
+    }
+    leaf confidence {
+      type uint8 {
+        range "0..100";
+      }
+      units "percent";
+      description
+        "The degree of confidence in the ellipsoid's points expressed in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.Confidence";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.";
+  }
+
+  grouping rem-umts-gsm-g {
+    description
+      "This object contains parameters relating to GSM REM capabilities.";
+    leaf in-service-handling {
+      type enumeration {
+        enum "immediate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.InServiceHandling - Immediate";
+        }
+        enum "delayed" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.InServiceHandling - Delayed";
+        }
+      }
+      default "immediate";
+      config false;
+      description
+        "FAP REM behavior with respect to ongoing active connections.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.InServiceHandling";
+    }
+    leaf scan-on-boot {
+      type boolean;
+      default "true";
+      config false;
+      description
+        "Enables or disables Radio Environment Measurement during the FAP start up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanOnBoot";
+    }
+    leaf scan-periodically {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Enable Periodic Radio Environment Measurement on all enabled RAT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanPeriodically";
+    }
+    leaf periodic-interval {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "When {{param|ScanPeriodically}} is {{true}}, this value indicates the interval in {{units}} which REM is performed while the FAP service is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.PeriodicInterval";
+    }
+    leaf periodic-time {
+      type yang:date-and-time;
+      config false;
+      description
+        "An absolute time reference in UTC to determine when the CPE will initiate the periodic REM. Each REM MUST occur at (or as soon as possible after) this reference time plus or minus an integer multiple of the {{param|PeriodicInterval}}. {{param}} is used only to set the \"phase\" of the REM. The actual value of {{param}} can be arbitrarily far into the past or future. For example, if {{param|PeriodicInterval}} is 86400 (a day) and if {{param}} is set to UTC midnight on some day (in the past, present, or future) then periodic REMs will occur every day at UTC midnight. These MUST begin on the very next midnight, even if {{param}} refers to a day in the future. The Unknown Time value defined in {{bibref|TR-106a2|Section 3.2}} indicates that no particular time reference is specified. That is, the CPE MAY locally choose the time reference, and needs only to adhere to the specified PeriodicInformInterval. If absolute time is not available to the CPE, its periodic REM behavior MUST be the same as if {{param}} parameter was set to the Unknown Time value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.PeriodicTime";
+    }
+    leaf-list remplmn-list {
+      type string {
+        length "0..6";
+      }
+      config false;
+      description
+        "{{list}} Each item is a PLMNID. PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of the PLMNID is 5. If {{empty}} no specific PLMN ID is provided, meaning that the FAP is required to report all available PLMN IDs. If a list is provided, the FAP is expected to limit the REM measurement to the PLMN(s) specified in this list only and ignore others even if they are detected.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMPLMNList";
+    }
+    leaf-list rem-band-list {
+      type enumeration {
+        enum "t-gsm380" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - T-GSM380";
+        }
+        enum "t-gsm410" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - T-GSM410";
+        }
+        enum "gsm450" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - GSM450";
+        }
+        enum "gsm480" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - GSM480";
+        }
+        enum "gsm710" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - GSM710";
+        }
+        enum "gsm750" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - GSM750";
+        }
+        enum "t-gsm810" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - T-GSM810";
+        }
+        enum "gsm850" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - GSM850";
+        }
+        enum "p-gsm900" {
+          value 9;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - P-GSM900";
+        }
+        enum "e-gsm900" {
+          value 10;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - E-GSM900";
+        }
+        enum "r-gsm900" {
+          value 11;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - R-GSM900";
+        }
+        enum "t-gsm900" {
+          value 12;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - T-GSM900";
+        }
+        enum "dcs1800" {
+          value 13;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - DCS1800";
+        }
+        enum "pcs1900" {
+          value 14;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - PCS1900";
+        }
+      }
+      config false;
+      description
+        "{{list}} Each item is a GSM Band to measure. {{enum}} If {{empty}} then no specific GSM band is provided, meaning that the FAP MUST scan all bands. If a list is provided, the FAP is expected to limit the REM measurement to the band(s) specified in this list only and ignore others even if they are detected.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList";
+    }
+    leaf-list arfcn-list {
+      type string;
+      config false;
+      max-elements "64";
+      description
+        "{{list}} Each item is a GSM ARFCN to measure. If {{empty}} then no specific ARFCN is provided, meaning that the FAP is required to scan all ARFCNs. If a list is provided, the FAP is expected to limit the REM measurement to the ARFCN(s) specified in this list only and ignore others even if they are detected.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ARFCNList";
+    }
+    leaf scan-timeout {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Specifies the time-out value in {{units}}, measured from the start of the REM scan, before the REM scan will time out.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanTimeout";
+    }
+    leaf scan-status {
+      type enumeration {
+        enum "indeterminate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanStatus - Indeterminate";
+        }
+        enum "in-progress" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanStatus - InProgress";
+        }
+        enum "success" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanStatus - Success";
+        }
+        enum "error" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanStatus - Error";
+        }
+        enum "error-timeout" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanStatus - Error_TIMEOUT";
+        }
+      }
+      description
+        "Indicates the current status of this scan.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanStatus";
+    }
+    leaf error-details {
+      type string {
+        length "0..256";
+      }
+      description
+        "Provides more detail when the {{param|ScanStatus}} is either {{enum|Error|ScanStatus}} or {{enum|Error_TIMEOUT|ScanStatus}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ErrorDetails";
+    }
+    leaf last-scan-time {
+      type yang:date-and-time;
+      description
+        "The time of the last GSM radio environment measurement.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.LastScanTime";
+    }
+    leaf max-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries allowed in the {{object|.REM.UMTS.GSM.Cell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.MaxCellEntries";
+    }
+    leaf cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.CellNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.";
+  }
+
+  grouping rem-umts-gsm-cell-g {
+    description
+      "Table indicating the components of the discovered cells.";
+    leaf band-indicator {
+      type enumeration {
+        enum "gsm 850" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BandIndicator - GSM 850";
+        }
+        enum "gsm 900" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BandIndicator - GSM 900";
+        }
+        enum "dcs 1800" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BandIndicator - DCS 1800";
+        }
+        enum "pcs 1900" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BandIndicator - PCS 1900";
+        }
+      }
+      description
+        "Indicates how to interpret the BCCH ARFCN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BandIndicator";
+    }
+    leaf arfcn {
+      type uint16 {
+        range "0..1023";
+      }
+      description
+        "Absolute Radio Frequency Channel Number (ARFCN) {{bibref|3GPP-TS.05.05}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.ARFCN";
+    }
+    leaf bsic {
+      type uint8 {
+        range "0..63";
+      }
+      description
+        "Base Station Identity Code {{bibref|3GPP-TS.03.03}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BSIC";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of the PLMNID is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.PLMNID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65535";
+      }
+      description
+        "Location Area Code (LAC) as defined in SIB1 {{bibref|3GPP-TS.25.331}}. The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the LAI (Location Area ID) {{bibref|3GPP-TS.23.003}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "Routing Area Code (RAC) consists of up to 3 numerical characters. The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.RAC";
+    }
+    leaf ci {
+      type uint16 {
+        range "0..63535";
+      }
+      description
+        "Cell Identity. {{bibref|3GPP-TS.25.331|Section 10.3.2.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.CI";
+    }
+    leaf rssi {
+      type int64;
+      units "dBm";
+      description
+        "Received signal level in {{units}} of the BCCH carrier.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.RSSI";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.";
+  }
+
+  grouping rem-lte-g {
+    description
+      "This object contains parameters relating to radio environment measurement capabilities for the LTE system.";
+    leaf in-service-handling {
+      type enumeration {
+        enum "immediate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.InServiceHandling - Immediate";
+        }
+        enum "delayed" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.InServiceHandling - Delayed";
+        }
+      }
+      default "immediate";
+      config false;
+      description
+        "FAP REM behavior with respect to ongoing active connections.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.InServiceHandling";
+    }
+    leaf scan-on-boot {
+      type boolean;
+      default "true";
+      config false;
+      description
+        "Enables or disables Radio Environment Measurement during the FAP start up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanOnBoot";
+    }
+    leaf scan-periodically {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Enable Periodic Radio Environment Measurement on LTE EUTRAN bands.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanPeriodically";
+    }
+    leaf periodic-interval {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "When {{param|ScanPeriodically}} is {{true}}, this value indicates the interval in {{units}} which REM is performed while the FAP service is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.PeriodicInterval";
+    }
+    leaf periodic-time {
+      type yang:date-and-time;
+      config false;
+      description
+        "An absolute time reference in UTC to determine when the CPE will initiate the periodic REM. Each REM MUST occur at (or as soon as possible after) this reference time plus or minus an integer multiple of the {{param|PeriodicInterval}}. {{param}} is used only to set the \"phase\" of the REM. The actual value of {{param}} can be arbitrarily far into the past or future. For example, if {{param|PeriodicInterval}} is 86400 (a day) and if {{param}} is set to UTC midnight on some day (in the past, present, or future) then periodic REMs will occur every day at UTC midnight. These MUST begin on the very next midnight, even if {{param}} refers to a day in the future. The Unknown Time value defined in {{bibref|TR-106a2|Section 3.2}} indicates that no particular time reference is specified. That is, the CPE MAY locally choose the time reference, and needs only to adhere to the specified PeriodicInformInterval. If absolute time is not available to the CPE, its periodic REM behavior MUST be the same as if {{param}} parameter was set to the Unknown Time value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.PeriodicTime";
+    }
+    leaf-list remplmn-list {
+      type string;
+      config false;
+      max-elements "32";
+      description
+        "{{list}} Each item is a PLMN ID to measure. PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. If {{empty}}, then no specific PLMN ID is provided, meaning that the FAP is required to scan all available PLMN IDs.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.REMPLMNList";
+    }
+    leaf-list rem-band-list {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "{{list}} Each item is a LTE Band to measure. Corresponds to frequency band indicator defined in {{bibref|3GPP-TS.36.101|Table 5.5-1}}. If {{empty}} then no specific LTE band is provided, meaning that the FAP is required to scan all available bands. The order of the band indicator has no significance.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.REMBandList";
+    }
+    leaf-list eutra-carrier-arfcndl-list {
+      type string;
+      config false;
+      max-elements "64";
+      description
+        "{{list}} Each entry is a EUTRA ARFCN in the DL direction to measure. Corrsponds to the parameter NDL in {{bibref|3GPP-TS.36.101|Section 5.7.3}}. If {{empty}}, then no specific EUTRA ARFCN is provided, meaning that the FAP is required to scan all ARFCNs that it is aware of.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.EUTRACarrierARFCNDLList";
+    }
+    leaf scan-timeout {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Specifies the time-out value in {{units}}, measured from the start of the REM scan, before the REM scan will time out.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanTimeout";
+    }
+    leaf scan-status {
+      type enumeration {
+        enum "indeterminate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanStatus - Indeterminate";
+        }
+        enum "in-progress" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanStatus - InProgress";
+        }
+        enum "success" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanStatus - Success";
+        }
+        enum "error" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanStatus - Error";
+        }
+        enum "error-timeout" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanStatus - Error_TIMEOUT";
+        }
+      }
+      description
+        "Indicates the current status of this scan.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanStatus";
+    }
+    leaf error-details {
+      type string {
+        length "0..256";
+      }
+      description
+        "Provides more detail when the {{param|ScanStatus}} is either {{enum|Error|ScanStatus}} or {{enum|Error_TIMEOUT|ScanStatus}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ErrorDetails";
+    }
+    leaf last-scan-time {
+      type yang:date-and-time;
+      description
+        "The time of the last LTE system radio environment measurement.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.LastScanTime";
+    }
+    leaf max-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.LTE.Cell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.MaxCellEntries";
+    }
+    leaf cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CellNumberOfEntries";
+    }
+    leaf max-carrier-meas-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.LTE.CarrierMeas.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.MaxCarrierMeasEntries";
+    }
+    leaf carrier-meas-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeasNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.";
+  }
+
+  grouping rem-lte-cell-g {
+    leaf rem-lte-cell-key {
+      type string;
+      description
+        "Key value for this object, which could be an item of a list.";
+    }
+    description
+      "Table indicating the components of the discovered cells.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.";
+  }
+
+  grouping rem-lte-cell-rf-g {
+    description
+      "Table indicating the RF aspect of the discovered cells.";
+    leaf eutra-carrier-arfcn {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Indicates the ARFCN of this carrier frequency. Corresponds to parameter dl-CarrierFreq in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}, and parameter NDL in {{bibref|3GPP-TS.36.101|Section 5.7.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.RF.EUTRACarrierARFCN";
+    }
+    leaf phy-cell-id {
+      type uint16 {
+        range "0..503";
+      }
+      description
+        "Physical cell ID of the detected EUTRAN cell, as specified in {{bibref|3GPP-TS.36.101|Section 5.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.RF.PhyCellID";
+    }
+    leaf rsrp {
+      type int64;
+      units "dBm";
+      description
+        "Received RSRP level of the detected EUTRA cell, specified in {{units}}, as specified in {{bibref|3GPP-TS.36.214|Section 5.1.1}}. The reporting range is specified in {{bibref|3GPP-TS.36.133|Section 9.1.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.RF.RSRP";
+    }
+    leaf rsrq {
+      type int64;
+      units "dB";
+      description
+        "Received RSRQ level of the detected EUTRA cell, specified in {{units}}, as specified in {{bibref|3GPP-TS.36.214|Section 5.1.3}}. Actual measured values range between -24.0 {{units}} and 0.0 {{units}} in steps of 0.5 {{units}}. The value of {{param}} divided by 10 yields the actual measured value. Only values in multiple of 5 are valid.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.RF.RSRQ";
+    }
+    leaf rssi {
+      type int64;
+      units "dBm";
+      description
+        "E-UTRA Carrier Received Signal Strength Indicator (RSSI), specified in {{units}}, as specified in {{bibref|3GPP-TS.36.214|Section 5.1.3}}. It comprises the linear average of the total received power (in [W]) observed only in OFDM symbols containing reference symbols for antenna port 0, in the measurement bandwidth, over N number of resource blocks by the UE from all sources, including co-channel serving and non-serving cells, adjacent channel interference, thermal noise etc.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.RF.RSSI";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.RF.";
+  }
+
+  grouping rem-lte-cell-bcch-g {
+    description
+      "Table containing the system information broadcast in the BCCH logical channel.";
+    leaf dl-bandwidth {
+      type uint8 {
+        range "6 | 15 | 25 | 50 | 75 | 100";
+      }
+      units "resource blocks";
+      description
+        "Downlink transmission bandwidth, specified in number of {{units}}. Corresponds to parameter dl_Bandwidth in Master Information Block in {{bibref|3GPP-TS.36.331|Section 6.2.2}}. and to parameter NRB in {{bibref|3GPP-TS.36.101|Table 5.6-1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.DLBandwidth";
+    }
+    leaf ul-bandwidth {
+      type uint8 {
+        range "6 | 15 | 25 | 50 | 75 | 100";
+      }
+      units "resource blocks";
+      description
+        "Uplink transmission bandwidth, specified in number of {{units}}. Corresponds to parameter ul_Bandwidth in SIB2 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}. and to parameter NRB in {{bibref|3GPP-TS.36.101|Table 5.6-1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.ULBandwidth";
+    }
+    leaf rs-tx-power {
+      type int64;
+      units "dBm";
+      description
+        "The downlink reference-signal transmit power, specified in {{units}}. Defined as the linear average over the power contributions (in W) of all resource elements that carry cell-specific reference signals within the operating system bandwidth. Corresponds to parameter referenceSignalPower in SIB4 as a part of PDSCH-Config IE in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.RSTxPower";
+    }
+    leaf tac {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Tracking Area Code that is common for all the PLMNs listed. Corresponds to trackingAreaCode as specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.TAC";
+    }
+    leaf cell-id {
+      type uint32 {
+        range "0..268435455";
+      }
+      description
+        "Defines the cell identify, defines as a 28-bit binary number. Corresponds to cellIdentity as specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2 and Section 6.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.CellID";
+    }
+    leaf cell-barred {
+      type boolean;
+      description
+        "Indicates whether the cell is barred or not. If {{true}}, the cell is barred. If {{false}}, the cell is not barred. Corresponds to cellBarred as specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}} and {{bibref|3GPP-TS.36.304}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.CellBarred";
+    }
+    leaf csg-indication {
+      type boolean;
+      description
+        "Indicates whether CSG is used in this cell or not. If {{true}}, the UE is only allowed to access the cell if the CSG identity matches an entry in the allowed CSG list that the UE has stored. Corresponds to csg-Indication as specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.CSGIndication";
+    }
+    leaf csg-identity {
+      type uint32 {
+        range "0..134217727";
+      }
+      description
+        "Defines the CSG ID value if {{param|CSGIndication}} parameter indicates that CSG is used in this cell. Corresponds to csg-Identity as specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.CSGIdentity";
+    }
+    leaf max-plmn-list-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.LTE.Cell.{i}.BCCH.PLMNList.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.MaxPLMNListEntries";
+    }
+    leaf plmn-list-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.PLMNListNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.";
+  }
+
+  grouping rem-lte-cell-bcch-plmn-list-g {
+    description
+      "Table containing the PLMN list in the system information broadcast in the BCCH logical channel. Correspnds to plmn-IdentityList as specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}. Each instance in this object is a PLMN-IdentityInfo which consists of plmn-Identity and cellReservedForOperatorUse IEs.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.PLMNList.{i}.PLMNID";
+    }
+    leaf cell-reserved-for-operator-use {
+      type boolean;
+      description
+        "Indicates whether the cell is reserved for operator use or not. If {{true}}, it is reserved. If {{false}}, it is not reserved. Corresponds to \"reserved\" \"notReserved\" respectively as defined in PLMN-IdentityInfo in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.PLMNList.{i}.CellReservedForOperatorUse";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.PLMNList.{i}.";
+  }
+
+  grouping rem-lte-carrier-meas-g {
+    description
+      "Table indicating the measurement of the discovered carrier. The information stored in this object is strictly in the physical layer level and may not necessarily be associated with any particular E-UTRAN cell (e.g. interference level generated by sources other than E-UTRAN cell).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the CarrierMeas entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeas.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeas.{i}.Alias";
+    }
+    leaf carrier-arfcndl {
+      type int64;
+      units "MHz";
+      description
+        "Lower bound of the EUTRA ARFCN as specified in {{bibref|3GPP-TS.36.101|Section 5.7.3}} in the DL direction that is requested to measure. Unit in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeas.{i}.CarrierARFCNDL";
+    }
+    leaf carrier-ch-width {
+      type int64;
+      units "ARFCN";
+      description
+        "Number of {{units}} in DL direction, as specified in {{bibref|3GPP-TS.36.101|Section 5.6}}, that is requested to measure. The range bounded by {{param|CarrierARFCNDL}} as the lower bound and the value of ({{param|CarrierARFCNDL}} + {{param}}) as the upper bound expresses the total carrier frequency range to be measured.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeas.{i}.CarrierChWidth";
+    }
+    leaf carrier-rssi {
+      type int64;
+      units "ARFCN";
+      description
+        "Received Signal Strength Indicator (RSSI) as specified in {{bibref|3GPP-TS.36.214|Sec 5.1.3}} over the carrier frequency range from {{param|CarrierARFCNDL}} as the lower bound and the value of ({{param|CarrierARFCNDL}} + {{param|CarrierChWidth}}) as the upper bound.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeas.{i}.CarrierRSSI";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeas.{i}.";
+  }
+
+  grouping rem-cdma2000-g {
+    description
+      "This object contains parameters relating to radio environment measurement capabilities for the CDMA2000 system.";
+    leaf in-service-handling {
+      type enumeration {
+        enum "immediate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.InServiceHandling - Immediate";
+        }
+        enum "delayed" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.InServiceHandling - Delayed";
+        }
+      }
+      config false;
+      description
+        "FAP REM behavior with respect to ongoing active connections. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.InServiceHandling";
+    }
+    leaf scan-on-boot {
+      type boolean;
+      config false;
+      description
+        "Enables or disables Radio Environment Measurement during the FAP start up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanOnBoot";
+    }
+    leaf scan-now {
+      type boolean;
+      config false;
+      description
+        "Directs FAP to perform radio environment measurements immediately (but respecting the setting of {{param|InServiceHandling}}) and report back. After performing the action, the FAP resets the ScanNow value to \"0\" ({{false}}).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanNow";
+    }
+    leaf return-timer {
+      type uint64 {
+        range "1..max";
+      }
+      units "seconds";
+      config false;
+      description
+        "Time in {{units}} within which the action should be performed by the FAP. Only applies if {{param|InServiceHandling}} is set to Delayed.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ReturnTimer";
+    }
+    leaf scan-periodically {
+      type boolean;
+      config false;
+      description
+        "Enables periodic reporting of radio environment measurements.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanPeriodically";
+    }
+    leaf periodic-interval {
+      type uint64 {
+        range "1..max";
+      }
+      units "seconds";
+      config false;
+      description
+        "When {{param|ScanPeriodically}} is {{true}}, this value indicates the interval in {{units}} which REM is performed while the FAP service is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.PeriodicInterval";
+    }
+    leaf periodic-time {
+      type yang:date-and-time;
+      config false;
+      description
+        "An absolute time reference in UTC to determine when the CPE will initiate the periodic REM. Each REM MUST occur at (or as soon as possible after) this reference time plus or minus an integer multiple of the {{param|PeriodicInterval}}. {{param}} is used only to set the \"phase\" of the REM. The actual value of {{param}} can be arbitrarily far into the past or future. For example, if {{param|PeriodicInterval}} is 86400 (a day) and if {{param}} is set to UTC midnight on some day (in the past, present, or future) then periodic REMs will occur every day at UTC midnight. These MUST begin on the very next midnight, even if {{param}} refers to a day in the future. The Unknown Time value defined in {{bibref|TR-106a2|Section 3.2}} indicates that no particular time reference is specified. That is, the CPE MAY locally choose the time reference, and needs only to adhere to the specified PeriodicInformInterval. If absolute time is not available to the CPE, its periodic REM behavior MUST be the same as if {{param}} parameter was set to the Unknown Time value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.PeriodicTime";
+    }
+    leaf report-overheads {
+      type enumeration {
+        enum "all" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ReportOverheads - All";
+        }
+        enum "one-x" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ReportOverheads - OneX";
+        }
+        enum "hrpd" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ReportOverheads - HRPD";
+        }
+        enum "none" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ReportOverheads - None";
+        }
+      }
+      config false;
+      description
+        "If {{param}} is set to {{enum|All}}, the FAP shall report the overheads from the sectors as well.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ReportOverheads";
+    }
+    leaf scan-timeout {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Specifies the time-out value in {{units}}, measured from the start of the REM scan, before the REM scan will time out.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanTimeout";
+    }
+    leaf scan-status {
+      type enumeration {
+        enum "indeterminate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanStatus - Indeterminate";
+        }
+        enum "in-progress" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanStatus - InProgress";
+        }
+        enum "success" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanStatus - Success";
+        }
+        enum "error" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanStatus - Error";
+        }
+        enum "error-timeout" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanStatus - Error_TIMEOUT";
+        }
+      }
+      description
+        "Indicates the current status of this scan.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanStatus";
+    }
+    leaf error-details {
+      type string {
+        length "0..256";
+      }
+      description
+        "Provides more detail when the {{param|ScanStatus}} is either \"Error\" or \"Error_TIMEOUT\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ErrorDetails";
+    }
+    leaf last-scan-time {
+      type yang:date-and-time;
+      description
+        "The time of the last system radio environment measurement.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.LastScanTime";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.";
+  }
+
+  grouping rem-cdma2000-one-x-g {
+    description
+      "This object contains parameters relating to radio environment measurement capabilities for the 1x system.";
+    leaf max-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.CDMA2000.OneX.Cell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.MaxCellEntries";
+    }
+    leaf cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.CellNumberOfEntries";
+    }
+    leaf max-channel-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.CDMA2000.OneX.Channel.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.MaxChannelEntries";
+    }
+    leaf channel-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.ChannelNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.";
+  }
+
+  grouping rem-cdma2000-one-x-channel-g {
+    description
+      "REM specific configuration and reporting.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.Alias";
+    }
+    leaf sniffing-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      description
+        "Config parameter to set band class. Reference - {{bibref|3GPP2-C.S0057}}, Band Class Specification for CDMA2000 Spread Spectrum Systems.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.SniffingBandClass";
+    }
+    leaf sniffing-channel-number {
+      type uint16 {
+        range "0..2016";
+      }
+      description
+        "The Radio Frequency Channel Number (RFCN) in the forward direction.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.SniffingChannelNumber";
+    }
+    leaf-list pn-list {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "{{list}} Each item is a (single value) PN offset in units of 64 PN chips or PNrange expressed in the following format: <Start-value>\"..\"<End-value>:<Increment> If an empty string, then no specific PNList is provided, meaning that the FAP is required to pick a PN list to scan on its own.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.PNList";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.";
+  }
+
+  grouping rem-cdma2000-one-x-cell-g {
+    leaf rem-cdma2000-one-x-cell-key {
+      type string;
+      description
+        "Key value for this object, which could be an item of a list.";
+    }
+    description
+      "Table indicating the components of the discovered cells.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.";
+  }
+
+  grouping rem-cdma2000-one-x-cell-rf-g {
+    description
+      "RF REM results for each detected cell.";
+    leaf band {
+      type int64;
+      description
+        "CDMA band for the reported cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.Band";
+    }
+    leaf rfcnfl {
+      type uint16 {
+        range "0..2016";
+      }
+      description
+        "The Radio Frequency Channel Number (RFCN) in the FL direction for the reported cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.RFCNFL";
+    }
+    leaf io {
+      type int64;
+      units "dBm";
+      description
+        "The total received power spectral density in {{units}}, including signal and interference.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.Io";
+    }
+    leaf p-ilot-pn {
+      type uint16 {
+        range "0..511";
+      }
+      units "64 PN chips";
+      description
+        "Pilot PN Offset (in units of {{units}}).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.PIlotPN";
+    }
+    leaf p-ilot-pn-phase {
+      type uint64;
+      units "chips";
+      description
+        "Pilot PN phase in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.PIlotPNPhase";
+    }
+    leaf pilot-strength-ecp {
+      type int64;
+      units "dBm";
+      description
+        "The strength estimate of the received pilot energy per chip, Ecp, in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.PilotStrengthEcp";
+    }
+    leaf pilot-strength-ecp-io {
+      type int64;
+      units "dB";
+      description
+        "The strength estimate of the received pilot energy per chip, Ecp, to total received spectral density, Io (signal and noise) in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.PilotStrengthEcpIo";
+    }
+    leaf overheads-available {
+      type boolean;
+      description
+        "If set to {{true}}, the overhead messages for this particular cell is included in {{object|.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.OverheadsAvailable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.";
+  }
+
+  grouping rem-cdma2000-one-x-cell-control-channel-g {
+    description
+      "Table containing information broadcast on control channel.";
+    leaf sid {
+      type int64;
+      description
+        "System identification. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.SID";
+    }
+    leaf nid {
+      type int64;
+      description
+        "Network identification. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.NID";
+    }
+    leaf regzone {
+      type int64;
+      description
+        "Registration Zone. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.REGZONE";
+    }
+    leaf baselat {
+      type int64;
+      description
+        "Basestation latitude. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.BASELAT";
+    }
+    leaf baselong {
+      type int64;
+      description
+        "Basestation longtitude. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.BASELONG";
+    }
+    leaf mcc {
+      type int64;
+      description
+        "Mobile Country Code. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.MCC";
+    }
+    leaf mncimsi1112 {
+      type int64;
+      description
+        "the 11th and 12th digits of IMSI, i.e., Mobile Network Code. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.MNCIMSI1112";
+    }
+    leaf baseid {
+      type int64;
+      description
+        "Basestation identification. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.BASEID";
+    }
+    leaf apid {
+      type string {
+        length "0..32";
+      }
+      description
+        "Access Point Identification. Set to empty string if not available. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.APID";
+    }
+    leaf apidmask {
+      type int64;
+      description
+        "Access Point Identification Mask. Set to zero if not available. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.APIDMASK";
+    }
+    leaf apidtext {
+      type string {
+        length "0..256";
+      }
+      description
+        "Access Point Identification Text. Set to empty string if not available. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.APIDTEXT";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.";
+  }
+
+  grouping rem-cdma2000-hrpd-g {
+    description
+      "This object contains parameters relating to radio environment measurement capabilities for the HRPD system.";
+    leaf max-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.CDMA2000.HRPD.Cell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.MaxCellEntries";
+    }
+    leaf cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.CellNumberOfEntries";
+    }
+    leaf max-channel-entries {
+      type uint64;
+      description
+        "The maximum number of entries in {{object|.REM.CDMA2000.HRPD.Channel.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.MaxChannelEntries";
+    }
+    leaf channel-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.ChannelNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.";
+  }
+
+  grouping rem-cdma2000-hrpd-channel-g {
+    description
+      "REM specific configuration and reporting.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.Alias";
+    }
+    leaf sniffing-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      description
+        "Config parameter to set band class. Reference - {{bibref|3GPP2-C.S0057}}, Band Class Specification for CDMA2000 Spread Spectrum Systems.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.SniffingBandClass";
+    }
+    leaf sniffing-channel-number {
+      type uint16 {
+        range "0..2016";
+      }
+      description
+        "The Radio Frequency Channel Number (RFCN) in the FL direction.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.SniffingChannelNumber";
+    }
+    leaf-list pn-list {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "{{list}} Each item is a (single value) PN offset in units of 64 PN chips or PNrange expressed in the following format: <Start-value>\"..\"<End-value>:<Increment>. If an empty string, then no specific PNList is provided, meaning that the FAP is required to pick a PN list to scan on its own.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.PNList";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.";
+  }
+
+  grouping rem-cdma2000-hrpd-cell-g {
+    leaf rem-cdma2000-hrpd-cell-key {
+      type string;
+      description
+        "Key value for this object, which could be an item of a list.";
+    }
+    description
+      "Table indicating the components of the discovered cells.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.";
+  }
+
+  grouping rem-cdma2000-hrpd-cell-rf-g {
+    description
+      "RF REM results for each detected cell.";
+    leaf band {
+      type int64;
+      description
+        "CDMA band for the reported cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.Band";
+    }
+    leaf rfcnfl {
+      type uint16 {
+        range "0..2016";
+      }
+      description
+        "The Radio Frequency Channel Number (RFCN) in the FL direction for the reported cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.RFCNFL";
+    }
+    leaf io {
+      type int64;
+      units "dBm";
+      description
+        "The total received power spectral density in {{units}}, including signal and interference.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.Io";
+    }
+    leaf p-ilot-pn {
+      type uint16 {
+        range "0..511";
+      }
+      units "64 PN chips";
+      description
+        "Pilot PN Offset (in units of {{units}}).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.PIlotPN";
+    }
+    leaf p-ilot-pn-phase {
+      type uint64;
+      units "chips";
+      description
+        "Pilot PN phase in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.PIlotPNPhase";
+    }
+    leaf pilot-strength-ecp {
+      type int64;
+      units "dBm";
+      description
+        "The strength estimate of the received pilot energy per chip in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.PilotStrengthEcp";
+    }
+    leaf pilot-strength-ecp-io {
+      type int64;
+      units "dB";
+      description
+        "The strength estimate of the received pilot energy per chip, Ecp, to total received spectral density, Io (signal and noise) in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.PilotStrengthEcpIo";
+    }
+    leaf overheads-available {
+      type boolean;
+      description
+        "If set to {{true}}, the overhead messages for this particular cell is included in {{object|.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.OverheadsAvailable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.";
+  }
+
+  grouping rem-cdma2000-hrpd-cell-control-channel-g {
+    description
+      "Table containing information braodcast on control channel.";
+    leaf color-code {
+      type int64;
+      description
+        "The color code of the measured sector as defined in {{bibref|3GPP2-C.S0024}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.ColorCode";
+    }
+    leaf sector-id {
+      type binary {
+        length "16";
+      }
+      description
+        "The sector ID of the measured sector as defined in {{bibref|3GPP2-C.S0024}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.SectorID";
+    }
+    leaf subnet-mask {
+      type int64;
+      units "bits";
+      description
+        "The length of the subnet mask in {{units}} for the measured sector as defined in {{bibref|3GPP2-C.S0024}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.SubnetMask";
+    }
+    leaf country-code {
+      type int64;
+      description
+        "The country code of the measured sector as defined in {{bibref|3GPP2-C.S0024}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.CountryCode";
+    }
+    leaf latitude {
+      type int64;
+      units "0.25 arc seconds";
+      description
+        "The reported lattitude of the cell in units of {{units}}, expressed as a two's complement signed number with positive numbers signifying North latitudes in the range -1296000 to 1296000 inclusive corresponding to a range of -90 to +90) Refer to {{bibref|3GPP2-C.S0024}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.Latitude";
+    }
+    leaf longitude {
+      type int64;
+      units "0.25 arc seconds";
+      description
+        "The reported longitude of the cell in units of {{units}}, expressed as a two's complement signed number with positive numbers signifying East longitude in the range -2592000 to 2592000 inclusive (corresponding to a range of -180 to +180). Refer to {{bibref|3GPP2-C.S0024}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.Longitude";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.";
+  }
+
+  grouping rem-cdma2000-macro-timing-g {
+    description
+      "Parameters for controlling CDMA2000 system timing derived from macro system sniffing.";
+    leaf admin-state {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "This is the Admin State of Macro Timing. Lock means MacroTiming feature is Enabled. Unlock means MacroTiming feature is disabled. 0 - Lock (Enabled), 1 - Unlock (Disabled).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.AdminState";
+    }
+    leaf tracking-channel-number {
+      type uint64;
+      description
+        "Channel number of Macro Base Station currently used for MacroTiming.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.TrackingChannelNumber";
+    }
+    leaf tracking-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      description
+        "BandClass of Macro Base Station currently used for MacroTiming.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.TrackingBandClass";
+    }
+    leaf-list tracking-pn-offset {
+      type string {
+        length "0..256";
+      }
+      description
+        "{{list}} Each item is a (single value) PN offset in units of 64 PN chips of a Macro Base Station currently used for MacroTiming.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.TrackingPNOffset";
+    }
+    leaf timing-source {
+      type uint8 {
+        range "0..1";
+      }
+      description
+        "This parameter indicates the timing source for the FAP: 0 - GPS 1 - Macro Timing The other read-only parameters in this object only have valid values when timingsource is set to 1.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.TimingSource";
+    }
+    leaf channel-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.ChannelNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.";
+  }
+
+  grouping rem-cdma2000-macro-timing-channel-g {
+    description
+      "Object used to configure list of channels to be used for Macto Timing.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.Alias";
+    }
+    leaf air-interface-type {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Air interface type of the configured Band class and Channel. 0 - 1x, 1 - HRPD.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.AirInterfaceType";
+    }
+    leaf band-class {
+      type uint8 {
+        range "0..31";
+      }
+      description
+        "Bandclass of the Macro timing channel.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.BandClass";
+    }
+    leaf channel-number {
+      type uint64;
+      description
+        "Macro timing acquisition channel.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.ChannelNumber";
+    }
+    leaf priority {
+      type uint64;
+      config false;
+      description
+        "Priority of the channle to use for acquisition. FAP should prioritize lower values over higher.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.Priority";
+    }
+    leaf-list pn-list {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "{{list}} Each item is a (single value) PN offset in units of 64 PN chips or PNrange expressed in the following format: <Start-value>\"..\"<End-value>:<Increment> If an empty string, then no specific PNList is provided, meaning that the FAP is required to pick a PN list to scan on its own.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.PNList";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.";
+  }
+
+  grouping transport-g {
+    description
+      "This object contains parameters relating to the transport.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.";
+  }
+
+  grouping transport-sip-g {
+    description
+      "This object contains parameters relating to SIP as a transport protocol. SIP is defined in {{bibref|RFC3261}}.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the whole SIP object and allows the setup or release of SIP associations and their related streams.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.Enable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.";
+  }
+
+  grouping transport-sip-fcs-g {
+    description
+      "This object models SIP Femtocell Convergence Server (FCS) parameters.";
+    leaf fcsuri {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The request URI for MESSAGE method sent to Femtocell Convergence Server (FCS). The string MUST contain a URI as defined in {{bibref|RFC3986}}. The device MUST support SIP URI and MAY support other URI schemes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.FCSURI";
+    }
+    leaf out-going-proxy-uri {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The request URI for Outgoing Proxy. The string MUST contain a URI as defined in {{bibref|RFC3986}}. The device MUST support SIP URI and MAY support other URI schemes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.OutGoingProxyURI";
+    }
+    leaf p-access-net-info-header {
+      type string {
+        length "0..256";
+      }
+      description
+        "This string will be populated as the value for P-Access-Network-Info header. This header is generated by the device. See {{bibref|3GPP2-X.S0059}} and {{bibref|RFC3455}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.PAccessNetInfoHeader";
+    }
+    leaf realm {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "The FQDN or IP Address representing the Home Domain of the device. The request URI for REGISTER will be formed by prefixing \"sip:\" to this value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.Realm";
+    }
+    leaf impu {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The \"IP Multimedia Public User\" (IMPU) Identity.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.IMPU";
+    }
+    leaf impi {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The \"IP Multimedia Private Identity\" (IMPI). This value is ignored when {{param|SIPAuthMethod}} is set to {{enum|TNA|SIPAuthMethod}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.IMPI";
+    }
+    leaf sip-password {
+      type string {
+        length "0..32";
+      }
+      config false;
+      description
+        "Password to Authenticate the IMS core. This value is ignored when {{param|SIPAuthMethod}} is set to {{enum|TNA|SIPAuthMethod}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPPassword";
+    }
+    leaf-list sip-auth-capability {
+      type enumeration {
+        enum "tna" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPAuthCapability - TNA";
+        }
+        enum "sip-digest" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPAuthCapability - SIPDigest";
+        }
+      }
+      description
+        "Represents the SIP authentication mechanisms supported by this device.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPAuthCapability";
+    }
+    leaf sip-auth-method {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "Represents the authentication method used by this device for SIP registration. If value is {{enum|SIPDigest}}, the {{param|SIPPassword}} MUST not be {{empty}}. If value is {{enum|TNA}}, {{param|SIPPassword}} and {{param|IMPI}} are ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPAuthMethod";
+    }
+    leaf sip-local-port {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Local port number for initiating SIP traffic.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPLocalPort";
+    }
+    leaf rtp-port-low-limit {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "The low limit of port number for originating and receiving RTP/RTCP traffic.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.RTPPortLowLimit";
+    }
+    leaf rtp-port-high-limit {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "The high limit of port number for originating and receiving RTP/RTCP traffic.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.RTPPortHighLimit";
+    }
+    leaf sip-reg-expiry {
+      type uint64;
+      config false;
+      description
+        "SIP registration expiry value, as defined in {{bibref|RFC3261}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPRegExpiry";
+    }
+    leaf sip-session-expiry {
+      type uint64 {
+        range "90..max";
+      }
+      units "seconds";
+      default "1800";
+      config false;
+      description
+        "SIP session timer expiry value, in {{units}}, as defined in {{bibref|RFC4028}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPSessionExpiry";
+    }
+    leaf-list emergency-numbers-list {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Indicates the dialed digit pattern matching strings used to determine if the call is an emergency call that MAY bypass access control and receive priority treatment.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.EmergencyNumbersList";
+    }
+    leaf timer-t1 {
+      type uint64 {
+        range "1..max";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Value of SIP timer T1, in {{units}}, as defined in {{bibref|RFC3261}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.TimerT1";
+    }
+    leaf timer-t2 {
+      type uint64 {
+        range "1..max";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Value of SIP timer T2, in {{units}}, as defined in {{bibref|RFC3261}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.TimerT2";
+    }
+    leaf timer-t4 {
+      type uint64 {
+        range "1..max";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Value of SIP timer T4, in {{units}}, as defined in {{bibref|RFC3261}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.TimerT4";
+    }
+    leaf t3210 {
+      type uint8 {
+        range "1..20";
+      }
+      units "seconds";
+      config false;
+      description
+        "This value specifies how much time to wait, in {{units}}, before time out on location update accept/reject. See {{bibref|3GPP2-A.S0014}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.T3210";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.";
+  }
+
+  grouping transport-sctp-g {
+    description
+      "This object contains parameters relating to SCTP as a transport protocol. SCTP is defined in {{bibref|RFC4960}} and {{bibref|RFC3873}}.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the whole SCTP object and allows the setup or release of SCTP associations and their related streams.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Enable";
+    }
+    leaf hb-interval {
+      type uint64 {
+        range "1..max";
+      }
+      units "seconds";
+      default "30";
+      config false;
+      description
+        "Heartbeat interval in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.HBInterval";
+    }
+    leaf max-association-retransmits {
+      type uint64;
+      default "10";
+      config false;
+      description
+        "Maximum number of consecutive retransmissions to a peer before an endpoint considers that the peer is unreachable and closes the association.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.MaxAssociationRetransmits";
+    }
+    leaf max-init-retransmits {
+      type uint64;
+      default "8";
+      config false;
+      description
+        "Number of retransmission per connection-attempt.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.MaxInitRetransmits";
+    }
+    leaf max-path-retransmits {
+      type uint64;
+      default "5";
+      config false;
+      description
+        "Maximum retransmission per destination address.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.MaxPathRetransmits";
+    }
+    leaf rto-initial {
+      type uint64;
+      units "milliseconds";
+      default "3000";
+      config false;
+      description
+        "Initial value for Retransmit timeout in {{units}}. A retransmission time value of zero means immediate retransmission.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.RTOInitial";
+    }
+    leaf rto-max {
+      type uint64;
+      units "milliseconds";
+      default "6000";
+      config false;
+      description
+        "Maximum value for Retransmit timeout in {{units}}. A retransmission time value of zero means immediate retransmission.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.RTOMax";
+    }
+    leaf rto-min {
+      type uint64;
+      units "milliseconds";
+      default "1000";
+      config false;
+      description
+        "Minimum value for Retransmit timeout in {{units}}. A retransmission time value of zero means immediate retransmission. The value of this parameter MUST be lower than or equal to {{param|RTOMax}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.RTOMin";
+    }
+    leaf val-cookie-life {
+      type uint64;
+      units "milliseconds";
+      default "60000";
+      config false;
+      description
+        "Valid cookie life in the 4-way start-up handshake procedure in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.ValCookieLife";
+    }
+    leaf out-of-blues {
+      type uint64;
+      description
+        "The number of correctly formed SCTP packets, including the proper checksum, but for which the receiver was unable to identify an appropriate association.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.OutOfBlues";
+    }
+    leaf checksum-errors {
+      type uint64;
+      description
+        "The number of SCTP packets received with an invalid checksum.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.ChecksumErrors";
+    }
+    leaf out-ctrl-chunks {
+      type uint64;
+      description
+        "The number of SCTP control chunks sent (retransmissions are not included).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.OutCtrlChunks";
+    }
+    leaf out-order-chunks {
+      type uint64;
+      description
+        "The number of SCTP ordered data chunks sent (retransmissions are not included).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.OutOrderChunks";
+    }
+    leaf out-unorder-chunks {
+      type uint64;
+      description
+        "The number of SCTP unordered chunks (data chunks in which the U bit is set to 1) sent (retransmissions are not included).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.OutUnorderChunks";
+    }
+    leaf in-ctrl-chunks {
+      type uint64;
+      description
+        "The number of SCTP control chunks received (no duplicate chunks included).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.InCtrlChunks";
+    }
+    leaf in-order-chunks {
+      type uint64;
+      description
+        "The number of SCTP ordered data chunks received (no duplicate chunks included).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.InOrderChunks";
+    }
+    leaf in-unorder-chunks {
+      type uint64;
+      description
+        "The number of SCTP unordered chunks (data chunks in which the U bit is set to 1) received (no duplicate chunks included).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.InUnorderChunks";
+    }
+    leaf frag-usr-msgs {
+      type uint64;
+      description
+        "The number of user messages that have been sent fragmented.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.FragUsrMsgs";
+    }
+    leaf reasm-usr-msgs {
+      type uint64;
+      description
+        "The number of user messages that have been received fragmented and submitted to the reassembly process.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.ReasmUsrMsgs";
+    }
+    leaf out-sctp-packs {
+      type uint64;
+      description
+        "The number of SCTP packets sent. Retransmitted DATA chunks are included.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.OutSCTPPacks";
+    }
+    leaf in-sctp-packs {
+      type uint64;
+      description
+        "The number of SCTP packets received. Duplicates are included.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.InSCTPPacks";
+    }
+    leaf discontinuity {
+      type yang:date-and-time;
+      description
+        "The time of the last discontinuity.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Discontinuity";
+    }
+    leaf assoc-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.AssocNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.";
+  }
+
+  grouping transport-sctp-assoc-g {
+    description
+      "SCTP Association Table";
+    leaf status {
+      type enumeration {
+        enum "disabled" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Status - Disabled";
+        }
+        enum "active" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Status - Active";
+        }
+        enum "progressing" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Status - Progressing";
+        }
+        enum "shutting-down" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Status - ShuttingDown";
+        }
+        enum "error" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Status - Error";
+        }
+      }
+      description
+        "The status of this SCTP association entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Status";
+    }
+    leaf primary-peer-address {
+      type inet:ip-address;
+      description
+        "The primary IP address of the peer SCTP association entity.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.PrimaryPeerAddress";
+    }
+    leaf local-port {
+      type uint16 {
+        range "0..63999";
+      }
+      description
+        "The local SCTP port number used for this SCTP association.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.LocalPort";
+    }
+    leaf in-streams {
+      type uint64;
+      description
+        "The number of Inbound Streams according to the negotiation at association start-up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.InStreams";
+    }
+    leaf out-streams {
+      type uint64;
+      description
+        "The number of Outbound Streams according to the negotiation at association start-up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.OutStreams";
+    }
+    leaf start-time {
+      type yang:date-and-time;
+      description
+        "The start Time for the present SCTP association.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.StartTime";
+    }
+    leaf discontinuity {
+      type yang:date-and-time;
+      description
+        "The time of the last discontinuity.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Discontinuity";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.";
+  }
+
+  grouping transport-real-time-g {
+    description
+      "This object contains parameters relating to Real Time Transport using RTP.";
+    leaf rtcp-enable {
+      type boolean;
+      config false;
+      description
+        "Enable or disable RTCP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.RTCPEnable";
+    }
+    leaf sent-packets {
+      type uint64;
+      description
+        "The number of sent RTP packets.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.SentPackets";
+    }
+    leaf rcv-packets {
+      type uint64;
+      description
+        "The number of received RTP packets.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.RcvPackets";
+    }
+    leaf bytes-sent {
+      type uint64;
+      description
+        "Total number of RTP payload bytes sent.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.BytesSent";
+    }
+    leaf bytes-received {
+      type uint64;
+      description
+        "Total number of RTP payload bytes received.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.BytesReceived";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.";
+  }
+
+  grouping transport-real-time-perf-g {
+    description
+      "This object contains performances relating to Real Time Transport using RTP.";
+    leaf lost-rcv-packets {
+      type uint64;
+      description
+        "The number of Lost RTP packets in reception.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.LostRcvPackets";
+    }
+    leaf lost-far-end-packets {
+      type uint64;
+      description
+        "The number of Far End Lost RTP packets.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.LostFarEndPackets";
+    }
+    leaf overruns {
+      type uint64;
+      description
+        "Total number of times the receive jitter buffer has overrun.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.Overruns";
+    }
+    leaf underruns {
+      type uint64;
+      description
+        "Total number of times the receive jitter buffer has underrun for a CS-domain RAB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.Underruns";
+    }
+    leaf mean-rtt {
+      type uint64;
+      units "microseconds";
+      description
+        "The mean Round Trip Time in {{units}} as computed by the source. {{bibref|RFC3550}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.MeanRTT";
+    }
+    leaf max-rtt {
+      type uint64;
+      units "microseconds";
+      description
+        "The maximum Round Trip Time in {{units}} as computed by the source. {{bibref|RFC3550}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.MaxRTT";
+    }
+    leaf mean-receive-jitter {
+      type uint64;
+      units "microseconds";
+      description
+        "The mean receive jitter in {{units}} as computed by the source. {{bibref|RFC3550}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.MeanReceiveJitter";
+    }
+    leaf max-receive-jitter {
+      type uint64;
+      units "microseconds";
+      description
+        "The maximum receive jitter in {{units}} as computed by the source. {{bibref|RFC3550}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.MaxReceiveJitter";
+    }
+    leaf mean-far-end-jitter {
+      type uint64;
+      units "microseconds";
+      description
+        "The mean far end jitter in {{units}} as computed by the source. {{bibref|RFC3550}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.MeanFarEndJitter";
+    }
+    leaf max-far-end-jitter {
+      type uint64;
+      units "microseconds";
+      description
+        "The maximum far end jitter in {{units}} as computed by the source. {{bibref|RFC3550}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.MaxFarEndJitter";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.";
+  }
+
+  grouping transport-packet-g {
+    description
+      "This object contains parameters relating to Packet Transport using GTP-U.";
+    leaf echo-interval {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Echo interval in {{units}}. An Echo interval value of zero means echo is disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Packet.EchoInterval";
+    }
+    leaf sent-packets {
+      type uint64;
+      description
+        "The number of sent GTP-U packets.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Packet.SentPackets";
+    }
+    leaf rcv-packets {
+      type uint64;
+      description
+        "The number of received GTP-U packets.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Packet.RcvPackets";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Packet.";
+  }
+
+  grouping transport-security-g {
+    description
+      "This object contains parameters relating to Security.";
+    leaf secret-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.SecretNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.";
+  }
+
+  grouping transport-security-secret-g {
+    description
+      "Shared Secret Table. This table gathers information about all types of shared secret-based credentials (UICC).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enable or disable this Shared Secret entry";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Enable";
+    }
+    leaf type {
+      type enumeration {
+        enum "sim" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Type - SIM";
+        }
+        enum "usim" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Type - USIM";
+        }
+      }
+      description
+        "The type of this Shared Secret entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Type";
+    }
+    leaf status {
+      type enumeration {
+        enum "present" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Status - Present";
+        }
+        enum "not-present" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Status - Not_present";
+        }
+        enum "error" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Status - Error";
+        }
+      }
+      description
+        "The status of this Shared Secret entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Status";
+    }
+    leaf uicc-card-id {
+      type string {
+        length "0..19";
+      }
+      description
+        "The UICC Card Identifier (UICCID), only numeric values are allowed. {{bibref|ITU-E.118}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.UICCCardID";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.";
+  }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/core-model@2017-03-20.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/core-model@2017-03-20.yang
new file mode 100644
index 0000000..63883ba
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/core-model@2017-03-20.yang
@@ -0,0 +1,1951 @@
+module core-model {
+    namespace "urn:onf:params:xml:ns:yang:core-model";
+    prefix core-model;
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "This module contains a collection of YANG definitions for managing wireless networks.";
+    revision 2017-03-20 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    /***********************
+    * package core-network-model
+    **********************/ 
+        /***********************
+        * package type-definitions
+        **********************/ 
+            /***********************
+            * package resilience
+            **********************/ 
+                typedef protection-reason {
+                    type enumeration {
+                        enum wait-to-revert {
+                            description "The resource is selected as control is waiting to restore to a preferred resource.";
+                        }
+                        enum signal-degrade {
+                            description "The resource is selected as the best preferred resource is in signal degrade.";
+                        }
+                        enum signal-fail {
+                            description "The resource is selected as the best preferred resource is in signal fail.";
+                        }
+                    }
+                    description "The cause of the current protection state.";
+                }
+                typedef route-selection-control {
+                    type enumeration {
+                        enum normal {
+                            description "No administrative control applied to the switch.";
+                        }
+                        enum manual {
+                            description "Resource temporarily chosen by control configuration where the resource is not the preferred resource.
+                                Preferred resource has highest priority.
+                                Temporarily overrides reversion.
+                                If this resource fails will switch to best available resource. 
+                                If resource selected is shared and another FC requires the resource then the selection control will change to Normal and switch to best available based upon normal rules.
+                                If the resource selected is then set to LOCK_OUT then the the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                Can be returned to NORMAL by configuration action.";
+                        }
+                        enum forced {
+                            description "Resource temporarily chosen by control configuration where the resource is not the preferred resource.
+                                Preferred resource has highest priority.
+                                Temporarily overrides reversion.
+                                If this resource fails will NOT switch. 
+                                If resource selected is shared and another FC requires the resource through a FORCE on that FC and the FC is of a higher FcPriority then the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                If the resource selected is then set to LOCK_OUT then the the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                Can be returned to NORMAL by configuration action.";
+                        }
+                        enum lock-out {
+                            description "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of.
+                                This overrides all other protection control states including forced.
+                                If the item is locked out then it cannot be used under any circumstances.
+                                Note: Only relevant when part of a protection scheme.";
+                        }
+                    }
+                    description "Possible degrees of administrative control applied to the Route selection.";
+                }
+                typedef route-selection-reason {
+                    type enumeration {
+                        enum wait-to-revert {
+                            description "The resource is selected as control is waiting to restore to a preferred resource.";
+                        }
+                        enum signal-degrade {
+                            description "The resource is selected as the best preferred resource is in signal degrade.";
+                        }
+                        enum signal-fail {
+                            description "The resource is selected as the best preferred resource is in signal fail.";
+                        }
+                        enum normal {
+                            description "No administrative control applied to the switch.";
+                        }
+                        enum manual {
+                            description "Resource temporarily chosen by control configuration where the resource is not the preferred resource.
+                                Preferred resource has highest priority.
+                                Temporarily overrides reversion.
+                                If this resource fails will switch to best available resource. 
+                                If resource selected is shared and another FC requires the resource then the selection control will change to Normal and switch to best available based upon normal rules.
+                                If the resource selected is then set to LOCK_OUT then the the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                Can be returned to NORMAL by configuration action.";
+                        }
+                        enum forced {
+                            description "Resource temporarily chosen by control configuration where the resource is not the preferred resource.
+                                Preferred resource has highest priority.
+                                Temporarily overrides reversion.
+                                If this resource fails will NOT switch. 
+                                If resource selected is shared and another FC requires the resource through a FORCE on that FC and the FC is of a higher FcPriority then the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                If the resource selected is then set to LOCK_OUT then the the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                Can be returned to NORMAL by configuration action.";
+                        }
+                        enum lock-out {
+                            description "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of.
+                                This overrides all other protection control states including forced.
+                                If the item is locked out then it cannot be used under any circumstances.
+                                Note: Only relevant when part of a protection scheme.";
+                        }
+                    }
+                    description "The cause of the current route selection.";
+                }
+                typedef switch-control {
+                    type enumeration {
+                        enum normal {
+                            description "No administrative control applied to the switch.";
+                        }
+                        enum manual {
+                            description "Resource temporarily chosen by control configuration where the resource is not the preferred resource.
+                                Preferred resource has highest priority.
+                                Temporarily overrides reversion.
+                                If this resource fails will switch to best available resource. 
+                                If resource selected is shared and another FC requires the resource then the selection control will change to Normal and switch to best available based upon normal rules.
+                                If the resource selected is then set to LOCK_OUT then the the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                Can be returned to NORMAL by configuration action.";
+                        }
+                        enum forced {
+                            description "Resource temporarily chosen by control configuration where the resource is not the preferred resource.
+                                Preferred resource has highest priority.
+                                Temporarily overrides reversion.
+                                If this resource fails will NOT switch. 
+                                If resource selected is shared and another FC requires the resource through a FORCE on that FC and the FC is of a higher FcPriority then the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                If the resource selected is then set to LOCK_OUT then the the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                Can be returned to NORMAL by configuration action.";
+                        }
+                    }
+                    description "none";
+                }
+                typedef switch-state-reason {
+                    type enumeration {
+                        enum wait-to-revert {
+                            description "The resource is selected as control is waiting to restore to a preferred resource.";
+                        }
+                        enum signal-degrade {
+                            description "The resource is selected as the best preferred resource is in signal degrade.";
+                        }
+                        enum signal-fail {
+                            description "The resource is selected as the best preferred resource is in signal fail.";
+                        }
+                        enum normal {
+                            description "No administrative control applied to the switch.";
+                        }
+                        enum manual {
+                            description "Resource temporarily chosen by control configuration where the resource is not the preferred resource.
+                                Preferred resource has highest priority.
+                                Temporarily overrides reversion.
+                                If this resource fails will switch to best available resource. 
+                                If resource selected is shared and another FC requires the resource then the selection control will change to Normal and switch to best available based upon normal rules.
+                                If the resource selected is then set to LOCK_OUT then the the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                Can be returned to NORMAL by configuration action.";
+                        }
+                        enum forced {
+                            description "Resource temporarily chosen by control configuration where the resource is not the preferred resource.
+                                Preferred resource has highest priority.
+                                Temporarily overrides reversion.
+                                If this resource fails will NOT switch. 
+                                If resource selected is shared and another FC requires the resource through a FORCE on that FC and the FC is of a higher FcPriority then the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                If the resource selected is then set to LOCK_OUT then the the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                Can be returned to NORMAL by configuration action.";
+                        }
+                    }
+                    description "Explains the reason for the current switch state.";
+                }
+                typedef reversion-mode {
+                    type enumeration {
+                        enum revertive {
+                            description "An FC switched to a lower priority (non-preferred) resource will revert to a higher priority (preferred) resource when that recovers (potentially after some hold-off time).";
+                        }
+                        enum non-revertive {
+                            description "An FC switched to a lower priority (non-preferred) resource will not revert to a higher priority (preferred) resource when that recovers.";
+                        }
+                    }
+                    description "The reversion mode associated with protection.";
+                }
+                grouping global-pac-g {
+                    uses global-class-g;
+                    description "Provides the properties of a GlobalClass via composition.";
+                }
+                grouping local-pac-g {
+                    uses local-class-g;
+                    description "Provides the properties of a LocalClass via composition.";
+                }
+                typedef protection-type {
+                    type string;
+                    description "Identifies the type of protection of an FcSwitch.";
+                }
+
+            typedef layer-protocol-name {
+                type string;
+                description "Provides a controlled list of layer protocol names and indicates the naming authority.
+                    Note that it is expected that attributes will be added to this structure to convey the naming authority name, the name of the layer protocol using a human readable string and any particular standard reference.
+                    Layer protocol names include:
+                    -    Layer 1 (L1): OTU, ODU
+                    -    Layer 2 (L2): Carrier Grade Ethernet (ETY, ETH), MPLS-TP (MT)
+                    ";
+            }
+            typedef port-role {
+                type string;
+                description "The role of a port in the context of the function of the forwarding entity that it bounds.";
+            }
+            typedef port-direction {
+                type enumeration {
+                    enum bidirectional {
+                        description "The Port has both an INPUT flow and an OUTPUT flow defined.";
+                    }
+                    enum input {
+                        description "The Port only has definition for a flow into the Forwarding entity (i.e. an ingress flow).";
+                    }
+                    enum output {
+                        description "The Port only has definition for a flow out of the Forwarding entity (i.e. an egress flow).";
+                    }
+                    enum unidentified-or-unknown {
+                        description "Not a normal state. The system is unable to determine the correct value.";
+                    }
+                }
+                description "The orientation of flow at the Port of a Forwarding entity";
+            }
+            typedef forwarding-direction {
+                type enumeration {
+                    enum bidirectional {
+                        description "The Forwarding entity supports both BIDIRECTIONAL flows at all Ports (i.e. all Ports have both an INPUT flow and an OUTPUT flow defined).";
+                    }
+                    enum unidirectional {
+                        description "The Forwarding entity has Ports that are either INPUT or OUTPUT. It has no BIDIRECTIONAL Ports.";
+                    }
+                    enum undefined-or-unknown {
+                        description "Not a normal state. The system is unable to determine the correct value.";
+                    }
+                }
+                description "The directionality of a Forwarding entity.";
+            }
+            typedef termination-direction {
+                type enumeration {
+                    enum bidirectional {
+                        description "A Termination with both SINK and SOURCE flows.";
+                    }
+                    enum sink {
+                        description "The flow is up the layer stack from the server side to the client side. 
+                            Considering an example of a Termination function within the termination entity, a SINK flow:
+                            - will arrive at at the base of the termination function (the server side) where it is essentially at an INPUT to the termination component
+                            - then will be decoded and deconstructed 
+                            - then relevant parts of the flow will be sent out of the termination function (the client side) where it is essentially at an OUTPUT from the termination component
+                            A SINK termination is one that only supports a SINK flow.
+                            A SINK termiation can be bound to an OUTPUT Port of a Forwarding entity";
+                    }
+                    enum source {
+                        description "The flow is down the layer stack from the server side to the client side. 
+                            Considering an example of a Termination function within the termination entity, a SOURCE flow:
+                            - will arrive at at the top of the termination function (the client side) where it is essentially at an INPUT to the termination component
+                            - then will be assembled with various overheads etc and will be coded 
+                            - then coded form of the assembly of flow will be sent out of the termination function (the server side) where it is essentially at an OUTPUT from the termination component
+                            A SOURCE termination is one that only supports a SOURCE flow.
+                            A SOURCE termiation can be bound to an INPUT Port of a Forwarding entity";
+                    }
+                    enum undefined-or-unknown {
+                        description "Not a normal state. The system is unable to determine the correct value.";
+                    }
+                }
+                description "The directionality of a termination entity.";
+            }
+            typedef extended-termination-direction {
+                type enumeration {
+                    enum bidirectional {
+                        description "A Termination with both SINK and SOURCE flows.";
+                    }
+                    enum sink {
+                        description "The flow is up the layer stack from the server side to the client side. 
+                            Considering an example of a Termination function within the termination entity, a SINK flow:
+                            - will arrive at at the base of the termination function (the server side) where it is essentially at an INPUT to the termination component
+                            - then will be decoded and deconstructed 
+                            - then relevant parts of the flow will be sent out of the termination function (the client side) where it is essentially at an OUTPUT from the termination component
+                            A SINK termination is one that only supports a SINK flow.
+                            A SINK termiation can be bound to an OUTPUT Port of a Forwarding entity";
+                    }
+                    enum source {
+                        description "The flow is down the layer stack from the server side to the client side. 
+                            Considering an example of a Termination function within the termination entity, a SOURCE flow:
+                            - will arrive at at the top of the termination function (the client side) where it is essentially at an INPUT to the termination component
+                            - then will be assembled with various overheads etc and will be coded 
+                            - then coded form of the assembly of flow will be sent out of the termination function (the server side) where it is essentially at an OUTPUT from the termination component
+                            A SOURCE termination is one that only supports a SOURCE flow.
+                            A SOURCE termiation can be bound to an INPUT Port of a Forwarding entity";
+                    }
+                    enum undefined-or-unknown {
+                        description "Not a normal state. The system is unable to determine the correct value.";
+                    }
+                    enum contra-direction-sink {
+                        description "The essential flow of the Termination entity is SINK (i.e. up the layer stack) but the INPUT flow of the Termination entity was provided by a SOURCE OUTPUT or taken from a SOURCE INPUT (duplicating the input signal) hence reversing the flow orientation from down the layer stack to up the layer stack.";
+                    }
+                    enum contra-direction-source {
+                        description "The essential flow of the Termination entity is SOURCE (i.e. down the layer stack) but the OUTPUT flow of the Termination entity was fed to (and replaces) a SINK OUTPUT or was fed to a SINK INPUT (replacing the normal flow) hence reversing the flow orientation from down the layer stack to up the layer stack.";
+                    }
+                }
+                description "Extended to include contra-direction considerations. Only applies to LP and elements of LP not to LTP.";
+            }
+            typedef termination-state {
+                type enumeration {
+                    enum lp-can-never-terminate {
+                        description "A non-flexible case that can never be terminated.";
+                    }
+                    enum lt-not-terminated {
+                        description "A flexible termination that can terminate but is currently not terminated.";
+                    }
+                    enum terminated-server-to-client-flow {
+                        description "A flexible termination that is currently terminated for server to client flow only.";
+                    }
+                    enum terminated-client-to-server-flow {
+                        description "A flexible termination that is currently terminated for client to server flow only.";
+                    }
+                    enum terminated-bidirectional {
+                        description "A flexible termination that is currently terminated in both directions of flow.";
+                    }
+                    enum lt-permenantly-terminated {
+                        description "A non-flexible termination that is always terminated (in both directions of flow for a bidirectional case and in the one direction of flow for both unidirectional cases).";
+                    }
+                    enum termination-state-unknown {
+                        description "There TerminationState cannot be determined.";
+                    }
+                }
+                description "Provides support for the range of behaviours and specific states that an LP can take with respect to termination of the signal.
+                    Indicates to what degree the LayerTermination is terminated.";
+            }
+
+        /***********************
+        * package object-classes
+        **********************/ 
+            /***********************
+            * package resilience
+            **********************/ 
+                grouping configuration-and-switch-controller-g {
+                    leaf switch-rule {
+                        type to-be-defined;
+                        description "A sketch of the presence of complex rules governing the switch behavior.";
+                    }
+                    leaf-list fc-switch {
+                        type leafref {
+                            path '/forwarding-construct/fc-switch/uuid';
+                        }
+                        description "The switch being controlled.";
+                    }
+                    container control-parameters {
+                        uses control-parameters-pac-g;
+                        description "The control parameters to be applied if local parameters are used rather than profiles";
+                    }
+                    leaf-list profile-proxy {
+                        type string;
+                        description "Applied profiles.";
+                    }
+                    container local-pac {
+                        uses local-pac-g;
+                        description "none";
+                    }
+                    container global-pac {
+                        uses global-pac-g;
+                        description "none";
+                    }
+                    leaf is-frozen {
+                        type boolean;
+                        description "Temporarily prevents any switch action to be taken and, as such, freezes the current state. 
+                            Until the freeze is cleared, additional near-end external commands are rejected and fault condition changes and received APS messages are ignored.
+                            All administrative controls of any aspect of protection are rejected.";
+                    }
+                    leaf is-coordinated-switching-both-ends {
+                        type boolean;
+                        description "The C&SC is operating such that switching at both ends of each flow acorss the FC is coordinated at both ingress and egress ends.";
+                    }
+                    leaf-list subordinate-controller {
+                        type leafref {
+                            path '/network-element/ltp/lp/config-and-switch-controller/switch-rule';
+                        }
+                        description "A C&SC that is fully or partially subordinate this C&SC. 
+                            A peer is considered as partially subordinate in that the peer will respond to requests for action from this C&SC but will also make requests for action to be carried out by this C&SC.
+                            Where there is a peer relationship each controller in the peering will see the other controller as subordinate.";
+                    }
+                    description "Represents the capability to control and coordinate switches, to add/delete/modify FCs and to add/delete/modify LTPs/LPs so as to realize a protection scheme.";
+                }
+                grouping control-parameters-pac-g {
+                    leaf reversion-mode {
+                        type reversion-mode;
+                        description "Indcates whether the protection scheme is revertive or non-revertive.";
+                    }
+                    leaf wait-to-revert-time {
+                        type int64;
+                        default 15;
+                        description "If the protection system is revertive, this attribute specifies the time, in minutes, to wait after a fault clears on a higher priority (preferred) resource before reverting to the preferred resource.";
+                    }
+                    leaf prot-type {
+                        type protection-type;
+                        description "Indicates the protection scheme that is used for the ProtectionGroup.";
+                    }
+                    leaf hold-off-time {
+                        type int64;
+                        description "This attribute indicates the time, in milliseconds, between declaration of signal degrade or signal fail, and the initialization of the protection switching algorithm.";
+                    }
+                    leaf network-scheme-specification {
+                        type string;
+                        description "none";
+                    }
+                    description "A list of control parameters to apply to a switch.";
+                }
+                grouping fc-switch-g {
+                    leaf hold-off-time {
+                        type int64;
+                        description "Moved to ControlParameter_Pac... This attribute indicates the time, in seconds, between declaration of unacceptable quality of signal on the currently selected FcPort, and the initialization of the protection switching algorithm. ";
+                    }
+                    leaf prot-type {
+                        type protection-type;
+                        description "Indicates the protection scheme that is used for the ProtectionGroup.";
+                    }
+                    leaf reversion-mode {
+                        type reversion-mode;
+                        description "Moved to ControlParameter_Pac... This attribute whether or not the protection scheme is revertive or non-revertive. ";
+                    }
+                    leaf-list selected-fc-port {
+                        type leafref {
+                            path '/forwarding-construct/fc-port/uuid';
+                        }
+                        description "Indicates which points are selected by the switch.
+                            Depending on the switch spec (via Fcspec)
+                            - more than one FcPort can be selected at any one time (e.g. egress switch, ingress packet switch)
+                            - zero FcPorts can  be selected. For an ingress switch this indicates that the switch common (egress) is 'high impedance'
+.";
+                    }
+                    leaf-list profile-proxy {
+                        type string;
+                        description "Provides a set of predefined values for switch control in place of the direct values available via the FcSwitch or via _configurationAndSwitchControl.";
+                    }
+                    container internal-configuration-and-switch-control {
+                        uses configuration-and-switch-controller-g;
+                        description "A switch controller encapsulated in the FcSwitch.";
+                    }
+                    leaf switch-control {
+                        type switch-control;
+                        description "Degree of administrative control applied to the switch selection.";
+                    }
+                    leaf switch-selects-ports {
+                        type port-direction;
+                        description "Indicates whether the switch selects from ingress to the FC or to egress of the FC, or both.";
+                    }
+                    leaf switch-selection-reason {
+                        type switch-state-reason;
+                        config false;
+                        description "The reason for the current switch selection.";
+                    }
+                    container control-parameters {
+                        uses control-parameters-pac-g;
+                        description "none";
+                    }
+                    leaf wait-to-restore-time {
+                        type int64;
+                        description "Moved to ControlParameter_Pac and changed to waitToRevert... If the protection system is revertive, this attribute specifies the amount of time, in seconds, to wait after the preferred FcPort returns to an acceptable state of operation (e.g. a fault has cleared) before restoring traffic to that preferred FcPort.";
+                    }
+                    uses local-class-g;
+                    description "The FcSwitch class models the switched forwarding of traffic (traffic flow) between FcPorts and is present where there is protection functionality in the FC. 
+                        If an FC exposes protection (having two or more FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects to represent the alternative flow choices visible at the edge of the FC.
+                        The FC switch represents and defines a protection switch structure encapsulated in the FC. 
+                        Essentially performs one of the functions of the Protection Group in a traditional model. It associates to 2 or more FcPorts each playing the role of a Protection Unit. 
+                        One or more protection, i.e. standby/backup, FcPorts provide protection for one or more working (i.e. regular/main/preferred) FcPorts where either protection or working can feed one or more protected FcPort.
+                        The switch may be used in revertive or non-revertive (symmetric) mode. When in revertive mode it may define a waitToRestore time.
+                        It may be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 and 1:1).
+                        It may be locked out (prevented from switching), force switched or manual switched.
+                        It will indicate switch state and change of state.
+                        The switch can be switched away from all sources such that it becomes open and hence two coordinated switches can both feed the same LTP so long as at least one of the two is switched away from all sources (is 'open').
+                        The ability for a Switch to be 'high impedance' allows bidirectional ForwardingConstructs to be overlaid on the same bidirectional LTP where the appropriate control is enabled to prevent signal conflict.
+                        This ability allows multiple alternate routes to be present that otherwise would be in conflict.";
+                }
+
+            grouping forwarding-domain-g {
+                leaf-list layer-protocol-name {
+                    type layer-protocol-name;
+                    min-elements 1;
+                    description "One or more protocol layers at which the FD represents the opportunity to enable forwarding between LTP that bound it.";
+                }
+                leaf-list lower-level-fd {
+                    type leafref {
+                        path '/network-element/fd/uuid';
+                    }
+                    description "The FD class supports a recursive aggregation relationship (HigherLevelFdEncompassesLowerLevelFds) such that the internal construction of an FD can be exposed as multiple lower level FDs and associated Links (partitioning).
+                        The aggregated FDs and Links form an interconnected topology that provides and describes the capability of the aggregating FD.
+                        Note that the model actually represents aggregation of lower level FDs into higher level FDs as views rather than FD partition, and supports multiple views. 
+                        Aggregation allow reallocation of capacity from lower level FDs to different higher level FDs as if the network is reorganized  (as the association is aggregation not composition).";
+                }
+                leaf-list fc {
+                    type leafref {
+                        path '/forwarding-construct/uuid';
+                    }
+                    description "An FD aggregares one or more FCs. A aggregated FC connects LTPs that bound the FD.";
+                }
+                leaf-list ltp {
+                    type leafref {
+                        path '/network-element/ltp/uuid';
+                    }
+                    description "An instance of FD is associated with zero or more LTP objects. 
+                        The LTPs that bound the FD provide capacity for forwarding.";
+                }
+                leaf-list lower-level-link {
+                    type string;
+                    description "The FD encompasses Links that interconnect lower level FDs and collect links that are wholly within the bounds of the FD.
+                        See also _lowerLevelFd.";
+                }
+                uses global-class-g;
+                description "The ForwardingDomain (FD) class models the topological component that represents the opportunity to enable forwarding (of specific transport characteristic information at one or more protocol layers) between points represented by the LTP in the model.
+                    The FD object provides the context for and constrains the formation, adjustment and removal of FCs and hence offers the potential to enable forwarding. 
+                    The LTPs available are those defined at the boundary of the FD.
+                    At a lower level of recursion an FD could represent a fabric (switch matrix) in a Network Element (NE). 
+                    An NE can encompass more than one switch matrix and hence more than one FD. The FD representing a switch matrix can be further partitioned.
+                    The FD corresponds to a subnetwork [ITU-T G.800], FlowDomain [TMF 612] and a MultiLayerSubNetwork (MLSN) [TMF 612]. As in the TMF concept of MLSN and unlike the ITU-T concet of subnetwork model the FD can support more than one layer-protocol.";
+            }
+            grouping forwarding-construct-g {
+                leaf layer-protocol-name {
+                    type layer-protocol-name;
+                    description "The layerProtocol at which the FC enables the potential for forwarding.";
+                }
+                leaf-list lower-level-fc {
+                    type leafref {
+                        path '/forwarding-construct/uuid';
+                    }
+                    description "An FC object supports a recursive aggregation relationship such that the internal construction of an FC can be exposed as multiple lower level FC objects (partitioning).
+                        Aggregation is used as for the FD to allow changes in hierarchy. 
+                        FC aggregation reflects FD aggregation. 
+                        The FC represents a Cross-Connection in an NE. The Cross-Connection in an NE is not necessarily the lowest level of FC partitioning.
+                        ";
+                }
+                leaf-list fc-route {
+                    type string;
+                    description "An FC object can have zero or more routes, each of which is defined as a list of lower level FC objects describing the flow across the network.";
+                }
+                list fc-port {
+                    key 'uuid';
+                    min-elements 2;
+                    uses fc-port-g;
+                    description "The association of the FC to LTPs is made via FcPorts (essentially the ports of the FC).";
+                }
+                list fc-switch {
+                    key 'uuid';
+                    uses fc-switch-g;
+                    description "If an FC exposes protection (having two FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects.
+                        The arrangement of switches for a particular instance is described by a referenced FcSpec";
+                }
+                leaf forwarding-direction {
+                    type forwarding-direction;
+                    description "The directionality of the ForwardingConstruct. 
+                        Is applicable to simple ForwardingConstructs where all FcPorts are BIDIRECTIONAL (the ForwardingConstruct will be BIDIRECTIONAL) or UNIDIRECTIONAL (the ForwardingConstruct will be UNIDIRECTIONAL). 
+                        Is not present in more complex cases.";
+                }
+                leaf is-protection-lock-out {
+                    if-feature protection-exclude-server;
+                    type boolean;
+                    description "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of.
+                        This overrides all other protection control states including forced.
+                        If the item is locked out then it cannot be used under any circumstances.
+                        Note: Only relevant when part of a protection scheme.";
+                }
+                leaf service-priority {
+                    type int64;
+                    description "Relevant where 'service' FCs are competing for server resources.
+                        Used to determine which signal FC is allocated resource. 
+                        The priority of the 'service' with respect to other 'services'. 
+                        Lower numeric value means higher priority. 
+                        Covers cases such as preemptable.";
+                }
+                leaf-list supported-link {
+                    type string;
+                    description "An FC that spans between LTPs that terminate the LayerProtocol usually supports one or more links in the client layer.";
+                }
+                uses global-class-g;
+                description "The ForwardingConstruct (FC) class models enabled constrained potential for forwarding between two or more LTPs at a particular specific layerProtocol.
+                    Like the LTP, the FC supports any transport protocol including all circuit and packet forms.
+                    It is used to effect forwarding of transport characteristic (layer protocol) information.
+                    An FC can be in only one FD.
+                    The ForwardingConstruct is a Forwarding entity.
+                    At a low level of the recursion, a FC represents a cross-connection within an NE. It may also represent a fragment of a cross-connection under certain circumstances.
+                    The FC object can be used to represent many different structures including point-to-point (P2P), point-to-multipoint (P2MP), rooted-multipoint (RMP) and multipoint-to-multipoint (MP2MP) bridge and selector structures for linear, ring or mesh protection schemes.";
+            }
+            container network-element {
+                presence  "";
+                list fd {
+                    key 'uuid';
+                    uses forwarding-domain-g;
+                    description "Represents the FD that is completely within the boundary of the NE.
+                        At a low level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). 
+                        Note that an NE can encompass multiple switch matrices (FDs) and the FD representing the switch matrix can be further partitioned.
+                        Where an FD is referenced by the NeEncompassesFd association, any FDs that it encompasses (i.e., that are associated with it by HigherLevelFdEncompassesLowerLevelFds), must also be encompassed by the NE and hence must have the NeEncompassesFd association.
+                        ";
+                }
+                list ltp {
+                    key 'uuid';
+                    uses logical-termination-point-g;
+                    description "An NE has associated LTPs that are at its boundary.
+                        The NeEncompassesFd association occurs for FDs that are within the bounds of the NetworkElement definition such that the FD is bounded by LTPs, all of which are on the boundary of the NetworkElement or are within the NetworkElement. 
+                        An LTP can be independent of an NE.";
+                }
+                uses global-class-g;
+                description "The Network Element (NE) class represents a network element (traditional NE) in the data plane.
+                    A data plane network element is essentially a consolidation of capabilities that can be viewed and controlled through a 'single' management-control port.
+                    In the direct interface from an SDN controller to a network element in the data plane, the NetworkElement object defines the scope of control for the resources within the network element
+                    For example internal transfer of user information between the external terminations (ports of the NE), encapsulation, multiplexing/demultiplexing, and OAM functions, etc. 
+                    The NetworkElement provides the scope of the naming space for identifying objects representing the resources within the data plane network element.
+                    NE is really a product bundling or some view of management scope, management access, session. 
+                    The NE is not directly part of topology but brings meaning to the FD context and the LTP context (and hence the links). ";
+            }
+            list forwarding-construct {
+                key 'uuid';
+                uses forwarding-construct-g;
+                description "none";
+            }
+            grouping fc-port-g {
+                leaf-list ltp {
+                    type leafref {
+                        path '/network-element/ltp/uuid';
+                    }
+                    max-elements 2;
+                    description "The FcPort may be associated with more than one LTP when the FcPort is bidirectional and the LTPs are unidirectional.
+                        Multiple Ltp
+                        - Bidirectional FcPort to two Uni Ltps
+                        Zero Ltp
+                        - BreakBeforeMake transition
+                        - Planned Ltp not yet in place
+                        - Off-network LTP referenced through other mechanism";
+                }
+                leaf role {
+                    type port-role;
+                    description "Each FcPort of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function. ";
+                }
+                leaf fc-port-direction {
+                    type port-direction;
+                    description "The orientation of defined flow at the FcPort.";
+                }
+                leaf is-protection-lock-out {
+                    if-feature protection-exclude-fc-port;
+                    type boolean;
+                    description "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of.
+                        This overrides all other protection control states including forced.
+                        If the item is locked out then it cannot be used under any circumstances.
+                        Note: Only relevant when part of a protection scheme.";
+                }
+                leaf selection-priority {
+                    type int64;
+                    description "The preference priority of the resource in the protection scheme for a particular FC. 
+                        The lower the value the higher the priority.
+                        A lower value of selection priority is preferred
+                        If two resources have the same value they are of equal priory.
+                        There is no preference between equal priorities.
+                        If a resource with the lowest value selection priority fails then the next lowest value available (may be the same value) is picked.
+                        Hence on failure of the current resource the next best available will be selected.
+                        If there are several equal values the choice is essentially arbitrary).
+                        If the scheme is revertive then when a resource of higher priority than the currently selected resource recovers it will be selected.
+                        This is equivalent to working/protection but allows for all static scheme types with n:m capability. 
+                        In simple schemes 0 = working and 1 = protecting.";
+                }
+                leaf is-internal-port {
+                    type boolean;
+                    config false;
+                    description "The FcPort is not exposed and cannot have associated LTPs.
+                        This form of FcPort is used to enable chaining of FcSwitches or FcRoutes in complex network protection scenarios.";
+                }
+                leaf-list fc-route-feeds-fc-port-egress {
+                    type string;
+                    description "Identifies which route(s) currently actively forward to the FcPort to exit the FC to an LTP (or for an internal FcPort to propagate to the next internal switch/route).";
+                }
+                uses local-class-g;
+                description "The association of the FC to LTPs is made via FcPorts.
+                    The FcPort class models the access to the FC function. 
+                    The traffic forwarding between the associated FcPorts of the FC depends upon the type of FC and may be associated with FcSwitch object instances.  
+                    In cases where there is resilience, the FcPort may convey the resilience role of the access to the FC. 
+                    It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point.
+                    The FcPort replaces the Protection Unit of a traditional protection model. 
+                    The ForwardingConstruct can be considered as a component and the FcPort as a Port on that component.";
+            }
+            grouping layer-protocol-g {
+                leaf layer-protocol-name {
+                    type layer-protocol-name;
+                    description "Indicate the specific layer-protocol described by the LayerProtocol entity.";
+                }
+                leaf configured-client-capacity {
+                    type to-be-defined;
+                    description "Provides a summarized view of the client capacity that is configurable for use.
+                        Note the client LTP association should provide all necessary detail hence this attribute is questionable.";
+                }
+                leaf lp-direction {
+                    type termination-direction;
+                    description "The overall directionality of the LP. 
+                        - A BIDIRECTIONAL LP will have some SINK and/or SOURCE flows.
+                        - A SINK LP can only contain elements with SINK flows or CONTRA_DIRECTION_SOURCE flows
+                        - A SOURCE LP can only contain SOURCE flows or CONTRA_DIRECTION_SINK flows";
+                }
+                leaf termination-state {
+                    type termination-state;
+                    description "Indicates whether the layer is terminated and if so how.";
+                }
+                list config-and-switch-controller {
+                    key 'switch-rule';
+                    uses configuration-and-switch-controller-g;
+                    description "A switch controller external to the LayerProtocol.
+                        The controller will coordinate one or more switches in one or more FCs related to the LayerProtocol";
+                }
+                leaf is-protection-lock-out {
+                    if-feature protection-exclude-ltp;
+                    type boolean;
+                    description "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of.
+                        This overrides all other protection control states including forced.
+                        If the item is locked out then it cannot be used under any circumstances.
+                        Note: Only relevant when part of a protection scheme.";
+                }
+                leaf fc-blocks-signal-to-lp {
+                    type string;
+                    description "none";
+                }
+                uses local-class-g;
+                description "The projection of an LTP into each transport layer is represented by a LayerProtocol (LP) instance. A LayerProtocol instances can be used for controlling termination and monitoring functionality. It can also be used for controlling the adaptation (i.e. encapsulation and/or multiplexing of client signal), tandem connection monitoring, traffic conditioning and/or shaping functionality at an intermediate point along a connection. Where the client - server relationship is fixed 1:1 and immutable, the layers can be encapsulated in a single LTP instance. Where there is a n:1 relationship between client and server, the layers must be split over two separate instances of LTP. ";
+            }
+            grouping logical-termination-point-g {
+                leaf-list server-ltp {
+                    type leafref {
+                        path '/network-element/ltp/uuid';
+                    }
+                    description "References contained LTPs representing servers of this LTP in an inverse multiplexing configuration (e.g. VCAT).";
+                }
+                leaf-list client-ltp {
+                    type leafref {
+                        path '/network-element/ltp/uuid';
+                    }
+                    description "References contained LTPs representing client traffic of this LTP for normal cases of multiplexing.";
+                }
+                list lp {
+                    key 'uuid';
+                    min-elements 1;
+                    uses layer-protocol-g;
+                    description "Ordered list of LayerProtocols that this LTP is comprised of where the first entry in the list is the lowest server layer (e.g. physical).";
+                }
+                leaf connected-ltp {
+                    type leafref {
+                        path '/network-element/ltp/uuid';
+                    }
+                    description "Applicable in a simple context where two LTPs are associated via a non-adjustable enabled forwarding.
+                        Reduces clutter removing the need for two additional LTPs and an FC with a pair of FcPorts.";
+                }
+                leaf peer-ltp {
+                    type leafref {
+                        path '/network-element/ltp/uuid';
+                    }
+                    description "References contained LTPs representing the reversal of orientation of flow where two LTPs are associated via a non-adjustable enabled forwarding and where the referenced LTP is fully dependent on the this LTP.";
+                }
+                leaf-list physical-port-reference {
+                    type string;
+                    description "One or more text labels for the unmodelled physical port associated with the LTP.
+                        In many cases there is no associated physical port.";
+                }
+                leaf-list ltp-in-other-view {
+                    type leafref {
+                        path '/network-element/ltp/uuid';
+                    }
+                    description "References one or more LTPs in other views that represent this LTP. 
+                        The referencing LTP is the provider of capability.";
+                }
+                leaf ltp-direction {
+                    type termination-direction;
+                    description "The overall directionality of the LTP. 
+                        - A BIDIRECTIONAL LTP must have at least some LPs that are BIDIRECTIONAL but may also have some SINK and/or SOURCE LPs.
+                        - A SINK LTP can only contain SINK LPs
+                        - A SOURCE LTP can only contain SOURCE LPs";
+                }
+                uses global-class-g;
+                description "The LogicalTerminationPoint (LTP) class encapsulates the termination and adaptation functions of one or more transport layers represented by instances of LayerProtocol.
+                    The encapsulated transport layers have a simple fixed 1:1 client-server relationship defined by association end ordering.
+                    The structure of LTP supports all transport protocols including circuit and packet forms.";
+            }
+            feature protection-exclude-server {
+                description "In protection context if server of protection where entire server is to be excluded from use for protection.";
+            }
+            feature protection-exclude-fc-port {
+                description "In protection context where the FcPort is to be excluded from use for protection.";
+            }
+            feature protection-exclude-ltp {
+                description "In protection context if LTP of protection where entire LTP is to be excluded from use for protection.";
+            }
+
+        /***********************
+        * package diagrams
+        **********************/ 
+
+        /***********************
+        * package associations
+        **********************/ 
+
+
+    /***********************
+    * package core-foundation-model
+    **********************/ 
+        /***********************
+        * package type-definitions
+        **********************/ 
+            typedef date-and-time {
+                type string;
+                description "This primitive type defines the date and time according to the following structure:
+                    'yyyyMMddhhmmss.s[Z|{+|-}HHMm]' where:
+                    yyyy    '0000'..'9999'    year
+                    MM        '01'..'12'            month
+                    dd        '01'..'31'            day
+                    hh        '00'..'23'            hour
+                    mm        '00'..'59'            minute
+                    ss        '00'..'59'            second
+                    s        '.0'..'.9'            tenth of second (set to '.0' if EMS or NE cannot support this granularity)
+                    Z        'Z'                    indicates UTC (rather than local time)
+                    {+|-}    '+' or '-'            delta from UTC
+                    HH        '00'..'23'            time zone difference in hours
+                    Mm        '00'..'59'            time zone difference in minutes.";
+            }
+            typedef bit-string {
+                type string;
+                description "This primitive type defines a bit oriented string.
+                    The size of the BitString will be defined in the valueRange property of the attribute; according to ASN.1 (X.680).
+                    The semantic of each bit position will be defined in the Documentation field of the attribute.";
+            }
+            typedef real {
+                type string;
+                description "This primitive type maps to the 'realnumber' defined in Recommendation X.680.";
+            }
+            typedef printable-string {
+                type string;
+                description "A string that only includes printable characters.";
+            }
+            typedef to-be-defined {
+                type string;
+                description "This type is used when the actual type of the attrbute is expected to be complex but where the type has not yet been developed. 
+                    This type should only be used for attributes that are experimental.";
+            }
+
+        /***********************
+        * package super-classes-and-common-packages
+        **********************/ 
+            /***********************
+            * package object-classes
+            **********************/ 
+                grouping name-g {
+                    list name {
+                        key 'value-name';
+                        min-elements 1;
+                        uses name-and-value-g;
+                        description "List of names.";
+                    }
+                    description "Name: A property of an entity with a value that is unique in some namespace but may change during the life of the entity. A name carries no semantics with respect to the purpose of the entity.";
+                }
+                grouping global-class-g {
+                    list local-id {
+                        key 'value-name';
+                        uses name-and-value-g;
+                        description "An identifier that is unique in the context of some scope that is less than the global scope.
+                            (consider in the context of Identifier: A property of an entity/role with a value that is unique within an identifier space, where the identifier space is itself unique, and immutable. The identifier therefore represents the identity of the entity/role. An identifier carries no semantics with respect to the purpose of the entity.)";
+                    }
+                    leaf uuid {
+                        type universal-id;
+                        description "UUID: An identifier that is universally unique
+                            (consider in the context of Identifier: A property of an entity/role with a value that is unique within an identifier space, where the identifier space is itself globally unique, and immutable. An identifier carries no semantics with respect to the purpose or state of the entity)
+                            The uuid should be treated as opaque by the user.";
+                    }
+                    uses name-g;
+                    uses label-g;
+                    uses extension-g;
+                    uses state-pac-g;
+                    description "Represents a type of thing (an Entity) that has instances which can exist in their own right (independently of any others).
+                        Entity: Has identity, defined boundary, properties, functionality and lifecycle in a global context.
+                        (consider in the context of a Class: (usage) The representation of a thing that may be an entity or an inseparable Entity Feature).";
+                }
+                grouping local-class-g {
+                    list local-id {
+                        key 'value-name';
+                        min-elements 1;
+                        uses name-and-value-g;
+                        description "An identifier that is unique in the context of some scope that is less than the global scope.
+                            (consider in the context of Identifier: A property of an entity/role with a value that is unique within an identifier space, where the identifier space is itself unique, and immutable. The identifier therefore represents the identity of the entity/role. An identifier carries no semantics with respect to the purpose of the entity.)";
+                    }
+                    leaf uuid {
+                        type universal-id;
+                        description "A global identifier for the LocalClass, which is used as reference.";
+                    }
+                    uses name-g;
+                    uses label-g;
+                    uses extension-g;
+                    uses state-pac-g;
+                    description "A LocalClass represents a Feature of an Entity. It is inseparable from a GlobalClass but is a distinct feature of that GlobalClass such that the instances of LocalClass are able to have associations to other instances..
+                        Feature of an Entity: An inseparable, externally distinguishable part of an entity.
+                        The mandatory LocalId of the LocalClass instance is unique in the context of the GlobalClass from which it is inseparable.
+                        (consider in the context of a Class: (usage) The representation of a thing that may be an entity or an inseparable feature of an entity)
+                        ";
+                }
+                grouping label-g {
+                    list label {
+                        key 'value-name';
+                        uses name-and-value-g;
+                        description "List of labels.";
+                    }
+                    description "A property of an entity with a value that is not expected to be unique and is allowed to change. A label carries no semantics with respect to the purpose of the entity and has no effect on the entity behavior or state.";
+                }
+                grouping extension-g {
+                    list extension {
+                        key 'value-name';
+                        uses name-and-value-g;
+                        description "List of simple name-value extensions.";
+                    }
+                    description "Extension provides an opportunity to define properties not declared in the class that extend the class enabling a realization with simple ad-hoc extension of standard classes to be conformant.";
+                }
+                grouping universal-id-authority-g {
+                    leaf uuid {
+                        type universal-id;
+                        description "The UUID for the UUID authority.";
+                    }
+                    description "Represents the authority that controls the allocation of UUIDs.";
+                }
+                grouping name-and-value-authority-g {
+                    leaf uuid {
+                        type universal-id;
+                        description "The UUID for the NameValueAuthority.";
+                    }
+                    description "Represents the authority that controls the legal values for the names and values of a name/value attribute.";
+                }
+                grouping conditional-package-g {
+                    uses extension-g;
+                    uses label-g;
+                    description "The base class for conditional packages.";
+                }
+
+            /***********************
+            * package type-definitions
+            **********************/ 
+                grouping name-and-value-g {
+                    leaf value-name {
+                        type string;
+                        description "The name of the value. The value need not have a name.";
+                    }
+                    leaf value {
+                        type string;
+                        description "The value.";
+                    }
+                    description "A scoped name-value pair.";
+                }
+                typedef universal-id {
+                    type string;
+                    description "The universal ID value where the mechanism for generation is defined by some authority not directly referenced in the structure.
+                        A example structure is [IETF RFC4122].";
+                }
+                grouping address-g {
+                    leaf address-name {
+                        type string;
+                        description "The name of the address (to allow the specific hierarchy to be distinguished from others for the same entity).";
+                    }
+                    list address-element {
+                        key 'uuid';
+                        uses address-element-g;
+                        description "The elements of the address that form the recursive scope narrowing.";
+                    }
+                    description "A description of location via a hierarchy of narrowing contexts.";
+                }
+                grouping local-id-and-class-g {
+                    leaf class-of-instance {
+                        type string;
+                        description "The class to which the name refers.";
+                    }
+                    container local-id {
+                        uses name-and-value-g;
+                        description "The localId of the entity.";
+                    }
+                    description "The localId and the class of entity that it identifies.";
+                }
+                grouping name-and-class-g {
+                    leaf class-of-instance {
+                        type string;
+                        description "The class to which the name refers.";
+                    }
+                    container name {
+                        uses name-and-value-g;
+                        description "If the element is a name.";
+                    }
+                    description "The name and the class of entity that it names.";
+                }
+                grouping address-element-g {
+                    leaf address-element-name {
+                        type string;
+                        description "The name of the address element (e.g. 'shelf' as an element of a shelf/slot/port addressing scheme).
+                            The remainder of the structure has the reference for the shelf.
+                            ";
+                    }
+                    container local-id {
+                        uses local-id-and-class-g;
+                        description "If the element is a localId (where the element above in the hierarchy must be the context in which the specific localId is relevant).";
+                    }
+                    leaf uuid {
+                        type universal-id;
+                        description "If the element is a uuid (where this element could be the top of a hierarchy but may also be at some level in the hierarchy where address navigation is considered necessary to assist in location of the UUID).";
+                    }
+                    container name {
+                        uses name-and-class-g;
+                        description "If the element is a name.";
+                    }
+                    leaf arbitrary-element {
+                        type string;
+                        description "Where the element is from some external model that is not formally represented in this model.";
+                    }
+                    description "One element of a hierarchy of elements.
+                        Note that the element must have one and only one value chosen from a list of potential value types.";
+                }
+
+
+        /***********************
+        * package state-model
+        **********************/ 
+            /***********************
+            * package object-classes
+            **********************/ 
+                grouping state-pac-g {
+                    leaf operational-state {
+                        type operational-state;
+                        config false;
+                        description "The operational state is used to indicate whether or not the resource is installed and working.";
+                    }
+                    leaf administrative-control {
+                        type administrative-control;
+                        description "The administrativeControl state provides control of the availability of specific resources without modification to the provisioning of those resources.
+                            The value is the current control target. The actual administrativeState may or may not be at target.";
+                    }
+                    leaf administrative-state {
+                        type administrative-state;
+                        config false;
+                        description "Shows whether or not the client has permission to use or has a prohibition against using the resource.
+                            The administrative state expresses usage permissions for specific resources without modification to the provisioning of those resources.";
+                    }
+                    leaf lifecycle-state {
+                        type lifecycle-state;
+                        description "Used to track the planned deployment, allocation to clients and withdrawal of resources.";
+                    }
+                    description "Provides general state attributes.";
+                }
+
+            /***********************
+            * package type-definitions
+            **********************/ 
+                typedef operational-state {
+                    type enumeration {
+                        enum disabled {
+                            description "The resource is unable to meet the SLA of the user of the resource. If no (explicit) SLA is defined the resource is disabled if it is totally inoperable and unable to provide service to the user.";
+                        }
+                        enum enabled {
+                            description "The resource is partially or fully operable and available for use.";
+                        }
+                    }
+                    description "The possible values of the operationalState.";
+                }
+                typedef administrative-state {
+                    type enumeration {
+                        enum locked {
+                            description "Users are administratively prohibited from making use of the resource.";
+                        }
+                        enum unlocked {
+                            description "Users are allowed to use the resource.";
+                        }
+                    }
+                    description "The possible values of the administrativeState.";
+                }
+                typedef administrative-control {
+                    type enumeration {
+                        enum unlock {
+                            description "The intention is for the entity to become unlocked.
+                                The entity may already be UNLOCKED.";
+                        }
+                        enum lock-passive {
+                            description "The intention is for the entity to become locked but no effort is expected to move to the Locked state (the state will be achieved once all users stop using the resource). 
+                                The entity may be LOCKED.";
+                        }
+                        enum lock-active {
+                            description "The intention is for the entity to become locked and it is expected that effort will be made to move to the Locked state (users will be actively removed). 
+                                The entity may already be LOCKED.";
+                        }
+                        enum lock-immediate {
+                            description "The intention is for the entity to become locked and it is expected to move to the Locked state immediately (users will be force removed). 
+                                The entity may already be LOCKED.";
+                        }
+                    }
+                    description "Reflects the current control action when the entity is not in the desired state.
+                        The possible values of the current target administrative state.";
+                }
+                typedef extended-admin-state {
+                    type enumeration {
+                        enum locked {
+                            description "Users are administratively prohibited from making use of the resource.";
+                        }
+                        enum unlocked {
+                            description "Users are allowed to use the resource.";
+                        }
+                        enum shutting-down-active {
+                            description "The entity is administratively restricted to existing instances of use only. There are specific actions to remove existing uses. There may be no new instances of use enabled. This corresponds to a control of LOCK_ACTIVE.";
+                        }
+                        enum shutting-down-passive {
+                            description "The entity is administratively restricted to existing instances of use only. There may be no new instances of use enabled. This corresponds to a control of LOCK_PASSIVE.";
+                        }
+                    }
+                    description "Possible extensions to AdministrativeState.";
+                }
+                typedef lifecycle-state {
+                    type enumeration {
+                        enum planned {
+                            description "The resource is planned but is not present in the network.";
+                        }
+                        enum potential {
+                            description "The supporting resources are present in the network but are shared with other clients; or require further configuration before they can be used; or both.o    When a potential resource is configured and allocated to a client it is moved to the 'installed' state for that client.o    If the potential resource has been consumed (e.g. allocated to another client) it is moved to the 'planned' state for all other clients.";
+                        }
+                        enum installed {
+                            description "The resource is present in the network and is capable of providing the service expected.";
+                        }
+                        enum pending-removal {
+                            description "The resource has been marked for removal.";
+                        }
+                    }
+                    description "The possible values of the lifecycleState.";
+                }
+
+
+
+    /***********************
+    * package core-operations-model
+    **********************/ 
+        /***********************
+        * package pattern
+        **********************/ 
+            /***********************
+            * package data-types
+            **********************/ 
+                typedef action-verbs {
+                    type enumeration {
+                        enum create-post-add {
+                            description "none";
+                        }
+                        enum set-update-put-modify-write-add {
+                            description "none";
+                        }
+                        enum get-read {
+                            description "none";
+                        }
+                        enum delete-remove {
+                            description "none";
+                        }
+                    }
+                    description "none";
+                }
+                typedef test-type {
+                    type string;
+                    description "none";
+                }
+                typedef activity-directive {
+                    type enumeration {
+                        enum structure-is-not {
+                            description "none";
+                        }
+                        enum new-structure-and-values {
+                            description "none";
+                        }
+                        enum incremental-structure-and-values {
+                            description "none";
+                        }
+                        enum only-values-in-existing-structure {
+                            description "none";
+                        }
+                        enum defined-by-verb {
+                            description "none";
+                        }
+                    }
+                    description "none";
+                }
+
+            /***********************
+            * package diagrams
+            **********************/ 
+                typedef action-effort {
+                    type enumeration {
+                        enum best-effort {
+                            description "none";
+                        }
+                        enum exact-match {
+                            description "none";
+                        }
+                    }
+                    description "none";
+                }
+                typedef pause-resume-rule {
+                    type enumeration {
+                        enum no-pause-possible {
+                            description "none";
+                        }
+                    }
+                    description "none";
+                }
+
+            /***********************
+            * package object-classes
+            **********************/ 
+                grouping general-directives-g {
+                    description "none";
+                }
+                grouping necessary-initial-condition-constraints-g {
+                    leaf is-not {
+                        type boolean;
+                        description "none";
+                    }
+                    description "none";
+                }
+                grouping operation-details-g {
+                    leaf action-verb {
+                        type action-verbs;
+                        description "none";
+                    }
+                    list necessary-initialcondition-constraints {
+                        key 'is-not';
+                        uses necessary-initial-condition-constraints-g;
+                        description "none";
+                    }
+                    description "none";
+                }
+                container operation-envelope {
+                    presence  "";
+                    list operation-set {
+                        key 'effort-and-action';
+                        min-elements 1;
+                        uses operation-set-g;
+                        description "none";
+                    }
+                    container generaldirectives {
+                        uses general-directives-g;
+                        description "none";
+                    }
+                    container operationidentifiers {
+                        uses operation-identifiers-g;
+                        description "none";
+                    }
+                    description "none";
+                }
+                grouping operation-identifiers-g {
+                    description "none";
+                }
+                grouping operation-set-g {
+                    leaf-list after-operation-set {
+                        type leafref {
+                            path '/operation-envelope/operation-set/effort-and-action';
+                        }
+                        description "none";
+                    }
+                    leaf-list before-operation-set {
+                        type leafref {
+                            path '/operation-envelope/operation-set/effort-and-action';
+                        }
+                        description "none";
+                    }
+                    leaf effort-and-action {
+                        type action-effort;
+                        description "none";
+                    }
+                    leaf pause-resume-rule {
+                        type pause-resume-rule;
+                        description "none";
+                    }
+                    leaf-list operationset {
+                        type leafref {
+                            path '/operation-envelope/operation-set/effort-and-action';
+                        }
+                        description "none";
+                    }
+                    leaf is-short-lived {
+                        type boolean;
+                        default true;
+                        description "none";
+                    }
+                    list operation-details {
+                        key 'action-verb';
+                        min-elements 1;
+                        uses operation-details-g;
+                        description "none";
+                    }
+                    description "none";
+                }
+
+
+
+    /***********************
+    * package core-physical-model-initial
+    **********************/ 
+        /***********************
+        * package rule-models
+        **********************/ 
+            /***********************
+            * package connector-rules
+            **********************/ 
+                /***********************
+                * package object-classes
+                **********************/ 
+                    grouping connector-in-holder-g {
+                        leaf connector-on-equipment-for-holder {
+                            type universal-id;
+                            description "none";
+                        }
+                        uses connector-g;
+                        description "A rule class (an abstract specialization of Connector) that represents a connector that are only accessible to an equipment inserted in the holder.";
+                    }
+                    grouping connector-cable-end-g {
+                        leaf connector-on-equipment-for-cable {
+                            type universal-id;
+                            description "none";
+                        }
+                        uses connector-g;
+                        description "A rule class (an abstract specialization of Connector) that represents a connector on the end of a cable.";
+                    }
+                    grouping connector-on-equipment-for-cable-g {
+                        leaf connector-cable-end {
+                            type universal-id;
+                            description "none";
+                        }
+                        uses connector-g;
+                        description "A rule class (an abstract specialization of Connector) that represents a connector exposed on an equipment such that a cable may be plugged in.";
+                    }
+                    grouping connector-on-equipment-for-holder-g {
+                        leaf connector-in-holder {
+                            type universal-id;
+                            description "none";
+                        }
+                        uses connector-g;
+                        description "A rule class (an abstract specialization of Connector) that represents a connector on an equipment that is intended to mate with a connector in a holder.";
+                    }
+
+
+
+        /***********************
+        * package equipment-detail
+        **********************/ 
+            /***********************
+            * package object-classes
+            **********************/ 
+                /***********************
+                * package dynamic-details
+                **********************/ 
+                    grouping function-enablers-g {
+                        leaf power-state {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        description "Represents the dynamic aspects of the properties that relate to the motive force that directly enable functionality to emerge from the equipment.";
+                    }
+                    grouping mechanical-functions-g {
+                        leaf rotation-speed {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        description "Represents the dynamic aspects of the mechanical functions of the equipment.";
+                    }
+                    grouping physical-properties-g {
+                        leaf temperature {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        description "Represents the dynamic aspects of the physical environmental properties of the equipment.";
+                    }
+                    grouping holder-monitors-g {
+                        leaf is-active {
+                            type boolean;
+                            description "none";
+                        }
+                        leaf is-actual-mismatch-with-expected {
+                            type boolean;
+                            description "none";
+                        }
+                        leaf aggregate-function {
+                            type string;
+                            description "none";
+                        }
+                        description "Represents the dynamic state of the holder instance. ";
+                    }
+                    grouping location-g {
+                        container equipment-location {
+                            uses address-g;
+                            description "none";
+                        }
+                        container geographical-location {
+                            uses address-g;
+                            description "none";
+                        }
+                        description "none";
+                    }
+
+                /***********************
+                * package invariant-details
+                **********************/ 
+                    grouping category-g {
+                        leaf category {
+                            type equipment-category;
+                            description "none";
+                        }
+                        description "Represents the form of the equipment.";
+                    }
+                    grouping equipment-instance-g {
+                        leaf manufacture-date {
+                            type string;
+                            description "none";
+                        }
+                        leaf serial-number {
+                            type string;
+                            description "none";
+                        }
+                        leaf asset-instance-identifier {
+                            type string;
+                            description "none";
+                        }
+                        description "Represents the per instance invariant properties of the equipment.";
+                    }
+                    grouping equipment-type-g {
+                        leaf description {
+                            type string;
+                            description "none";
+                        }
+                        leaf model-identifier {
+                            type string;
+                            description "none";
+                        }
+                        leaf part-type-identifier {
+                            type string;
+                            description "none";
+                        }
+                        leaf type-name {
+                            type string;
+                            description "none";
+                        }
+                        leaf version {
+                            type string;
+                            description "none";
+                        }
+                        description "Represents the invariant properties of the equipment that define and characterise the type.";
+                    }
+                    grouping holder-structure-g {
+                        leaf holder-category {
+                            type holder-category;
+                            description "none";
+                        }
+                        leaf is-captive {
+                            type boolean;
+                            description "none";
+                        }
+                        leaf is-guided {
+                            type boolean;
+                            description "none";
+                        }
+                        leaf is-quantized-space {
+                            type boolean;
+                            description "none";
+                        }
+                        description "Represents the form of the holder.";
+                    }
+                    grouping manufactured-thing-g {
+                        container manufacturer-properties {
+                            uses manufacturer-properties-g;
+                            description "none";
+                        }
+                        container equipment-type {
+                            uses equipment-type-g;
+                            description "none";
+                        }
+                        container equipment-instance {
+                            uses equipment-instance-g;
+                            description "none";
+                        }
+                        container operator-augmented-equipment-type {
+                            uses operator-augmented-equipment-type-g;
+                            description "none";
+                        }
+                        description "Collects all invariant aspects of a manufactured thing.";
+                    }
+                    grouping manufacturer-properties-g {
+                        leaf manufacturer-identifier {
+                            type string;
+                            description "none";
+                        }
+                        leaf manufacturer-name {
+                            type string;
+                            description "none";
+                        }
+                        description "Represents the properties of the manufacturer.";
+                    }
+                    grouping mechanical-features-g {
+                        description "Represents the invariant characteristics of dynamic mechanical features of a physical thing.";
+                    }
+                    grouping operator-augmented-equipment-type-g {
+                        leaf asset-type-identifier {
+                            type string;
+                            description "none";
+                        }
+                        description "Represents the invariant properties of the equipment asset allocated by the operator that define and characterise the type.";
+                    }
+                    grouping physical-characteristics-g {
+                        leaf weight-characteristics {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        leaf fire-characteristics {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        leaf materials {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        description "Represents the invariant physical characteristics (including composition and physical robustness) of the type.";
+                    }
+                    grouping physical-rating-g {
+                        leaf thermal-rating {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        leaf power-rating {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        description "Represents the invariant physical operational boundaries for the equipment/holder type.";
+                    }
+                    grouping position-g {
+                        leaf relative-position {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        description "Represents the invariant relative position of the holder (with respect to some frame of reference in an equipment) or connector on an equipment or pin in a connector.";
+                    }
+                    grouping spatial-properties-of-type-g {
+                        leaf height {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        leaf width {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        leaf length {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        description "Represents the basic invariant spatial properties of a physical thing.";
+                    }
+                    grouping swapability-g {
+                        leaf is-hot-swappable {
+                            type boolean;
+                            default true;
+                            description "none";
+                        }
+                        description "Represents the degree of field replacement that is possible for the equipment type.";
+                    }
+
+
+
+        /***********************
+        * package equipment-pattern-structure
+        **********************/ 
+            /***********************
+            * package object-classes
+            **********************/ 
+                grouping cable-g {
+                    list connector {
+                        key 'uuid';
+                        min-elements 1;
+                        uses connector-g;
+                        description "none";
+                    }
+                    container manufactured-thing {
+                        uses manufactured-thing-g;
+                        description "none";
+                    }
+                    container physical-characteristics {
+                        uses physical-characteristics-g;
+                        description "none";
+                    }
+                    container mechanical-features {
+                        uses mechanical-features-g;
+                        description "none";
+                    }
+                    container spatial-properties-of-type {
+                        uses spatial-properties-of-type-g;
+                        description "none";
+                    }
+                    uses global-class-g;
+                    description "Basic model representing a cable with connectors fitted where the cable is 'short' (e.g.  patch cord, in-station cabling).
+                        This is intentionally a very basic representation of a cable. 
+                        In a more sophisticated representation cable ends might be represented that then associate to the attached connector. 
+                        At this point it is assumed that the basic model is sufficient.";
+                }
+                grouping connector-g {
+                    leaf connector {
+                        type string;
+                        description "none";
+                    }
+                    list pin {
+                        key 'position';
+                        min-elements 1;
+                        uses pin-g;
+                        description "none";
+                    }
+                    leaf orientation {
+                        type connector-and-pin-orientation;
+                        description "none";
+                    }
+                    container manufactured-thing {
+                        uses manufactured-thing-g;
+                        description "none";
+                    }
+                    container position {
+                        uses position-g;
+                        description "none";
+                    }
+                    container mechanical-features {
+                        uses mechanical-features-g;
+                        description "none";
+                    }
+                    container pin-layout {
+                        uses pin-layout-g;
+                        description "none";
+                    }
+                    leaf connector-type {
+                        type to-be-defined;
+                        description "none";
+                    }
+                    uses local-class-g;
+                    uses group-of-pins-g;
+                    description "Represents a connector that may be fully exposed (e.g. to plug in a cable or on the end of a cable) or partially exposed (e.g. backplane to plug in another piece of equipment such as a module).";
+                }
+                grouping equipment-g {
+                    list connector {
+                        key 'uuid';
+                        uses connector-g;
+                        description "none";
+                    }
+                    list contained-holder {
+                        key 'uuid';
+                        uses holder-g;
+                        description "none";
+                    }
+                    list exposed-cable {
+                        key 'uuid';
+                        uses cable-g;
+                        description "none";
+                    }
+                    container manufactured-thing {
+                        uses manufactured-thing-g;
+                        description "none";
+                    }
+                    container spatial-properties-of-type {
+                        uses spatial-properties-of-type-g;
+                        description "none";
+                    }
+                    container mechanical-features {
+                        uses mechanical-features-g;
+                        description "none";
+                    }
+                    container physical-properties {
+                        uses physical-properties-g;
+                        description "none";
+                    }
+                    container function-enablers {
+                        uses function-enablers-g;
+                        description "none";
+                    }
+                    container mechanical-functions {
+                        uses mechanical-functions-g;
+                        description "none";
+                    }
+                    container physical-characteristics {
+                        uses physical-characteristics-g;
+                        description "none";
+                    }
+                    container swapability {
+                        uses swapability-g;
+                        description "none";
+                    }
+                    container category {
+                        uses category-g;
+                        description "none";
+                    }
+                    container physical-rating {
+                        uses physical-rating-g;
+                        description "none";
+                    }
+                    leaf is-field-replaceable {
+                        type boolean;
+                        default true;
+                        config false;
+                        description "Indicates whether or not the equipment can be removed and replaced 'in the field' (i.e. in a deployment) by normal operations personnel. 
+                            ";
+                    }
+                    leaf-list function-block {
+                        type string;
+                        description "none";
+                    }
+                    container expected-equipment {
+                        uses expected-equipment-g;
+                        description "none";
+                    }
+                    container actual-equipment {
+                        uses actual-equipment-g;
+                        description "none";
+                    }
+                    container location {
+                        uses location-g;
+                        description "none";
+                    }
+                    uses global-class-g;
+                    description "Represents any relevant physical thing. 
+                        Can be either field replaceable or not field replaceable.
+                        Note: The model is currently constrained to inside plant.";
+                }
+                list equipment {
+                    key 'uuid';
+                    uses equipment-g;
+                                description "none";
+}
+                grouping holder-g {
+                    leaf-list connector {
+                        type leafref {
+                            path '/equipment/exposed-cable/connector/uuid';
+                        }
+                        description "none";
+                    }
+                    leaf occupying-fru {
+                        type leafref {
+                            path '/equipment/uuid';
+                        }
+                        description "The FRU that is occupying the holder. 
+                            A holder may be unoccupied. 
+                            An FRU may occupy more hat one holder (using or blocking are intentionally not distinguished here).";
+                    }
+                    container spatial-properties-of-type {
+                        uses spatial-properties-of-type-g;
+                        description "none";
+                    }
+                    container holder-monitors {
+                        uses holder-monitors-g;
+                        description "none";
+                    }
+                    container holder-location {
+                        uses address-g;
+                        description "none";
+                    }
+                    container position {
+                        uses position-g;
+                        description "none";
+                    }
+                    container holder-structure {
+                        uses holder-structure-g;
+                        description "none";
+                    }
+                    container physical-rating {
+                        uses physical-rating-g;
+                        description "none";
+                    }
+                    leaf-list supported-equipment {
+                        type string;
+                        min-elements 1;
+                        description "none";
+                    }
+                    container expected-holder {
+                        uses expected-holder-g;
+                        description "none";
+                    }
+                    container actual-holder {
+                        uses actual-holder-g;
+                        description "none";
+                    }
+                    uses local-class-g;
+                    description "Represents a space in an equipment in which another equipment can be fitted in the field.";
+                }
+
+            /***********************
+            * package data-types
+            **********************/ 
+                typedef connector-and-pin-orientation {
+                    type enumeration {
+                        enum male {
+                            description "The connecting elements are dominantly protrusions.";
+                        }
+                        enum female {
+                            description "The connecting elements are dominantly indentations.";
+                        }
+                        enum symmetric-neutral {
+                            description "The pin (and housing) orientation combination is such that it is symmetric so a connector is compatible with itself.
+                                The connecting element may be a surface rather than protrusions or indentations.";
+                        }
+                    }
+                    description "Most connector schems are asymmetric such that there are two orientations of the connector where a mating is only possible between two connectors of different orientations. 
+                        A multi-pin connector may have a mix of pin orientations. In this case it is expected that the dominant orientation of pin is chosen for the connector orientation.";
+                }
+                typedef equipment-category {
+                    type enumeration {
+                        enum subrack {
+                            description "An assembly with holders designed to accommodate CIRCUIT_PACKs. 
+                                The assembly is designed to be mounted in a RACK.";
+                        }
+                        enum circuit-pack {
+                            description "An assembly with connectors compatible with those in a holder.
+                                The assembly is designed to be mounted in a holder (SLOT) of a SUBRACK.
+                                May also support holders (SLOTs) for SMALL_FORMFACTOR_PLUGGABLEs";
+                        }
+                        enum small-formfactor-pluggable {
+                            description "A small assembly (compared to a CIRCUIT_PACK) with connectors compatible with those in a holder.
+                                The assembly is designed to be mounted in a holder (SLOT) of a CIRCUIT_PACK or STAND_ALONE_UNIT.";
+                        }
+                        enum stand-alone-unit {
+                            description "An assembly with connectors for cabling and potentially with holders.
+                                The assembly is designed to be mounted in a freeform environment (on a table or simple mechanical cabinet).
+                                May support holders (SLOTs) for CIRCUIT_PACKs or for SMALL_FORMFACTOR_PLUGGABLEs";
+                        }
+                        enum rack {
+                            description "A mechanical assembly with cabling and predefined mounting points for particular SUBRACK types.
+                                The assembly is designed to be mounted on the floor in a row with other RACKs.";
+                        }
+                    }
+                    description "The form of equipment.";
+                }
+                typedef holder-category {
+                    type enumeration {
+                        enum slot {
+                            description "A guided holder with fixed connectors.
+                                The guided holder is designed to take a particular form of CIRCUIT_PACK or SMALL_FORMFACTOR_PLUGGABLE";
+                        }
+                    }
+                    description "The form of holder.";
+                }
+
+
+        /***********************
+        * package expected-and-actual
+        **********************/ 
+            /***********************
+            * package object-classes
+            **********************/ 
+                grouping actual-holder-g {
+                    description "A holder in the ActualEquipment.";
+                }
+                grouping expected-holder-g {
+                    description "A definition of a holder expected in the ActualEquipment (i.e. an ActualHolder) as part of the constraints provided by the ExpectedEquipment.";
+                }
+                grouping actual-equipment-g {
+                    description "The equipment that is actually present in the physical network.
+                        It will expose all dynamic properties and some critical static properties.";
+                }
+                grouping expected-equipment-g {
+                    description "A definition of the restrictions on the equipment that is expected to be present in the physical network at a particular 'place'.
+                        The expected equipment will state the type and may constrain any other invariant properties. 
+                        It may also provide desired ranges for dynami properties.";
+                }
+
+
+        /***********************
+        * package connector-and-pin
+        **********************/ 
+            /***********************
+            * package object-classes
+            **********************/ 
+                grouping pin-g {
+                    leaf position {
+                        type leafref {
+                            path '/equipment/exposed-cable/connector/position/relative-position';
+                        }
+                        description "none";
+                    }
+                    leaf orientation {
+                        type connector-and-pin-orientation;
+                        description "none";
+                    }
+                    description "An individual physical connection point (male or female).
+                        May be capable of carrying electrical or optical signals. 
+                        A pin may have more than one wire/fiber attached but is such that all attached things get exactly the same signal set.";
+                }
+                grouping pin-group-g {
+                    leaf-list pin {
+                        type leafref {
+                            path '/equipment/exposed-cable/connector/pin/position';
+                        }
+                        min-elements 1;
+                        description "none";
+                    }
+                    uses port-g;
+                    uses group-of-pins-g;
+                    description "A group of pins that together provide signal group where any one pin removed from the group will prevent the signals of the signal group from flowing successfully.";
+                }
+                grouping pin-layout-g {
+                    list position {
+                        key 'relative-position';
+                        min-elements 1;
+                        uses position-g;
+                        description "none";
+                    }
+                    description "The structuring of pins in a connector.";
+                }
+                grouping port-g {
+                    description "A conceptual access point for a group of signals (where that group of signals cannot be separated).";
+                }
+                grouping signal-ref-pt-g {
+                    leaf ltp {
+                        type leafref {
+                            path '/network-element/ltp/uuid';
+                        }
+                        description "none";
+                    }
+                    leaf-list elemental-signals {
+                        type universal-id;
+                        min-elements 1;
+                        description "none";
+                    }
+                    description "A single coherent signal as processed by a single LTP.";
+                }
+                grouping signal-ref-pt-group-g {
+                    leaf pin-group {
+                        type universal-id;
+                        description "none";
+                    }
+                    leaf-list signal-ref-pt {
+                        type universal-id;
+                        min-elements 1;
+                        description "none";
+                    }
+                    uses port-g;
+                    description "A physical indivisible group of signals.";
+                }
+                grouping elemental-signals-g {
+                    leaf-list pin {
+                        type leafref {
+                            path '/equipment/exposed-cable/connector/pin/position';
+                        }
+                        min-elements 1;
+                        description "none";
+                    }
+                    description "The elemental (sub-atomic) parts of an 'indivisible' signal where processing in the LTP is required to extract the elemental signals.";
+                }
+                grouping group-of-pins-g {
+                    description "A group of pins from one or more connectors relevant for some purpose.";
+                }
+
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/g.874.1-model@2017-03-20.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/g.874.1-model@2017-03-20.yang
new file mode 100644
index 0000000..4a14783
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/g.874.1-model@2017-03-20.yang
@@ -0,0 +1,646 @@
+module g.874.1-model {
+    namespace "urn:onf:params:xml:ns:yang:g.874.1-model";
+    prefix g.874.1-model;
+
+    import core-model {
+        prefix core-model;
+    }
+    import ietf-yang-types {
+        prefix yang;
+    }
+
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "<p>Version 2.02; outcome of the 10/2013 Nuremberg meeting.<br>Version 2.03; updates for Geneva 03-2014<br>Version 2.04; updates for Shanghai 09-2014<br>Version 2.05; input to Geneva 11-2014<br>Version 2.06; output from Geneva 11-2014<br>Version 2.07; using OpenProfile 3-2015<br>Version 2.08; output from Geneva 06-2015</p>";
+    revision 2017-03-20 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping otn-current-data-g {
+            leaf timestamp {
+                type date-and-time;
+                description "The timestamp associated with when the current data was collected.";
+            }
+            uses q.822-current-data-g;
+            description "This object class is an abstract class from which the OTN layer-specific CurrentData object classes are inherited. This object class is a subclass of the Q.822 CurrentData object class, which in turn is a subclass of X.739 Scanner object class. It inherits the following attributes: scannerId, operationalState, granularityPeriod, administrativeState, suspectIntervalFlag, elapsedTime, observedObjectClass, and observedObjectInstance.";
+        }
+        grouping otn-history-data-g {
+            leaf suspect-interval-flag {
+                type boolean;
+                default false;
+                description "This attribute indicates that the data collected during the interval is suspect.";
+            }
+            uses q.822-history-data-g;
+            description "This object class is an abstract class from which the OTN layer-specific HistoryData object classes are inherited. ";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/ 
+        typedef directionality {
+            type enumeration {
+                enum sink {
+                    description "none";
+                }
+                enum source {
+                    description "none";
+                }
+                enum bidirectional {
+                    description "none";
+                }
+            }
+            description "The enumeration with the options for directionality of the termination point.";
+        }
+        typedef gcc-access {
+            type enumeration {
+                enum gcc1 {
+                    description "none";
+                }
+                enum gcc2 {
+                    description "none";
+                }
+                enum gcc1-and-gcc2 {
+                    description "none";
+                }
+            }
+            description "This enumeration indicates the GCC access represented by the entity.";
+        }
+        typedef operational-state {
+            type enumeration {
+                enum enabled {
+                    description "none";
+                }
+                enum disabled {
+                    description "none";
+                }
+            }
+            description "The list of valid operational states for the connection.";
+        }
+        typedef oper-type {
+            type enumeration {
+                enum revertive {
+                    description "none";
+                }
+                enum non-revertive {
+                    description "none";
+                }
+            }
+            description "The operation type associated with the protection mechanism (either non-revertive or revertive).";
+        }
+        typedef ext-cmd-operation {
+            type enumeration {
+                enum exercise {
+                    description "none";
+                }
+                enum manual-switch {
+                    description "none";
+                }
+                enum forced-switch {
+                    description "none";
+                }
+                enum lockout {
+                    description "none";
+                }
+                enum release-of-manual-switch {
+                    description "none";
+                }
+                enum release-of-forced-switch {
+                    description "none";
+                }
+                enum release-of-lockout {
+                    description "none";
+                }
+            }
+            description "This enumeration contains the options for the actions that instruct the protection system for performing specific protection switching operations.";
+        }
+        typedef administrative-state {
+            type enumeration {
+                enum unlocked {
+                    description "none";
+                }
+                enum locked {
+                    description "none";
+                }
+                enum shutting-down {
+                    description "none";
+                }
+            }
+            description "For more information on Administrative State, See ITU-T Recs. X.731 and M.3100.";
+        }
+        typedef oc-tk-nim-k-bit-rate {
+            type enumeration {
+                enum 2.5-g {
+                    description "none";
+                }
+                enum 10-g {
+                    description "none";
+                }
+                enum 40-g {
+                    description "none";
+                }
+                enum 100-g {
+                    description "none";
+                }
+            }
+            description "Provides an enumeration with the meaning of each 'k' value.";
+        }
+        typedef tim-det-mo {
+            type enumeration {
+                enum dapi {
+                    description "none";
+                }
+                enum sapi {
+                    description "none";
+                }
+                enum both {
+                    description "none";
+                }
+            }
+            description "List of modes for trace identifier mismatch detection.";
+        }
+        typedef oc-tk-nim-problem-list {
+            type enumeration {
+                enum los-p {
+                    description "Loss of Signal -- Payload";
+                }
+                enum oci {
+                    description "Open Connection Indicator";
+                }
+                enum ssf-p {
+                    description "Server Signal Failure -- Payload -- can not co-exist with SSF or SSF-O";
+                }
+                enum ssf-o {
+                    description "Server Signal Failure -- Overhead; can not co-exist with SSF or SSF-P";
+                }
+                enum ssf {
+                    description "Server Signal Failure; can not co-exist with SSF-P or SSF-O";
+                }
+                enum tim {
+                    description "Trail Trace Identifier Mismatch";
+                }
+                enum deg {
+                    description "Signal Degraded";
+                }
+                enum bdi {
+                    description "Backward Defect Indication";
+                }
+            }
+            description "The valid list of problems for the entity.";
+        }
+        typedef tcm-monitoring {
+            type enumeration {
+                enum intrusive {
+                    description "none";
+                }
+                enum non-intrusive {
+                    description "none";
+                }
+            }
+            description "Monitoring types for the tandem connection monitoring function.";
+        }
+        typedef tcm-mode {
+            type enumeration {
+                enum operational {
+                    description "none";
+                }
+                enum transparent {
+                    description "none";
+                }
+                enum monitor {
+                    description "none";
+                }
+            }
+            description "List of value modes for the sink side of the tandem connection monitoring function.";
+        }
+        typedef ops-mnk-ttp-k-bit-rate {
+            type enumeration {
+                enum 40-g {
+                    description "none";
+                }
+                enum 100-g {
+                    description "none";
+                }
+            }
+            description "Provides an enumeration with the meaning of each 'k' value.";
+        }
+        typedef ops-mnk-ttp-problem-list {
+            type enumeration {
+                enum los {
+                    description "Loss of Signal";
+                }
+                enum lol {
+                    description "Loss of Lane Alignment";
+                }
+            }
+            description "The valid list of problems for the entity.";
+        }
+        typedef op-sn-ttp-problem-list {
+            type enumeration {
+                enum los {
+                    description "Loss of Signal";
+                }
+            }
+            description "The valid list of problems for the entity.";
+        }
+        typedef otm-n-k-bit-rates {
+            type enumeration {
+                enum 2.5-g {
+                    description "none";
+                }
+                enum 10-g {
+                    description "none";
+                }
+                enum 40-g {
+                    description "none";
+                }
+                enum 2.5-10-g {
+                    description "none";
+                }
+                enum 10-40-g {
+                    description "none";
+                }
+                enum 2.5-10-40-g {
+                    description "none";
+                }
+            }
+            description "Provides an enumeration with the meaning of each 'k' value.";
+        }
+        typedef domain-interface {
+            type enumeration {
+                enum intra-domain {
+                    description "none";
+                }
+                enum inter-domain {
+                    description "none";
+                }
+            }
+            description "This enumeration provides the options for the interface associated with OTMn.";
+        }
+        typedef otm-n-optical-reach {
+            type enumeration {
+                enum intra-office {
+                    description "none";
+                }
+                enum shorthaul {
+                    description "none";
+                }
+                enum longhaul {
+                    description "none";
+                }
+            }
+            description "The valid options for reach of the optical cable.";
+        }
+        typedef apr-status {
+            type enumeration {
+                enum on {
+                    description "none";
+                }
+                enum off {
+                    description "none";
+                }
+            }
+            description "The enumeration of the options for the Automatic Power Reduction Status.";
+        }
+        typedef ot-sn-ttp-problem-list {
+            type enumeration {
+                enum bdi-p {
+                    description "BDI-P (Backward Defect Indication - Payload); not co-exist with BDI-O or BDI";
+                }
+                enum bdi-o {
+                    description "BDI-O (Backward Defect Indication - Overhead); not co-exist with BDI-P or BDI";
+                }
+                enum bdi {
+                    description "BDI (Backward Defect Indication); not co-exist with BDI-P or BDI-O";
+                }
+                enum tim {
+                    description "TIM (Trail Trace Identifier Mismatch);";
+                }
+                enum los-p {
+                    description "-P (Loss of Signal - Payload); not co-exist with LOS-O or LOS";
+                }
+                enum los-o {
+                    description "LOS-O (Loss of Signal - Overhead); not co-exist with LOS-P or LOS";
+                }
+                enum los {
+                    description "LOS (Loss of Signal); not co-exist with LOS-P or LOS-O. ";
+                }
+            }
+            description "The valid list of problems for the entity.";
+        }
+        typedef ot-uk-ctp-adaptation {
+            type enumeration {
+                enum regular {
+                    description "i.e. OPSM/OTUk-a, OCh[r]/OTUk-a";
+                }
+                enum none {
+                    description "i.e. OPSM/OTUk-b, OCh[r]/OTUk-b";
+                }
+                enum vendor-specific {
+                    description "i.e. OCh[r]/OTUk-v";
+                }
+                enum functionally-standardized {
+                    description "i.e. OCh[r]/OTUkV";
+                }
+            }
+            description "The adaptation options for OTUk_ConnectionTermationPoints.";
+        }
+        typedef ot-uk-ctp-k-bit-rate {
+            type enumeration {
+                enum 2.5-g {
+                    description "none";
+                }
+                enum 10-g {
+                    description "none";
+                }
+                enum 40-g {
+                    description "none";
+                }
+                enum 100-g {
+                    description "none";
+                }
+            }
+            description "Provides an enumeration with the meaning of each 'k' value.";
+        }
+        typedef ot-uk-ctp-problem-list {
+            type enumeration {
+                enum lof {
+                    description "Loss of Frame";
+                }
+                enum ais {
+                    description "Alarm Indication Signal";
+                }
+                enum lom {
+                    description "Loss of MultiFrame";
+                }
+            }
+            description "The valid list of problems for the entity.";
+        }
+        typedef ot-uk-ttp-problem-list {
+            type enumeration {
+                enum tim {
+                    description "Trail Trace Identifier Mismatch";
+                }
+                enum deg {
+                    description "Signal Degraded";
+                }
+                enum bdi {
+                    description "Backward Defect Indication";
+                }
+                enum ssf {
+                    description "Server Signal Failure";
+                }
+            }
+            description "The valid list of problems for the entity.";
+        }
+        typedef monitored-direction {
+            type enumeration {
+                enum sink {
+                    description "none";
+                }
+                enum source {
+                    description "none";
+                }
+            }
+            description "The enumeration with the options for directionality for nonintrusive monitoring.";
+        }
+        typedef deg-thr-type {
+            type enumeration {
+                enum percentage {
+                    description "<p>Choice of % or Number of errored blocks</p>";
+                }
+                enum number-errored-blocks {
+                    description "<p>Number of % or blocks</p>";
+                }
+            }
+            description "<p>The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer.</p>";
+        }
+        typedef link-type {
+            type enumeration {
+                enum dwdm {
+                    description "none";
+                }
+                enum cwdm {
+                    description "none";
+                }
+                enum no-wdm {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef application-identifier-type {
+            type enumeration {
+                enum standard {
+                    description "none";
+                }
+                enum proprietary {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef printable-string {
+            type string;
+            description "none";
+        }
+        typedef date-and-time {
+            type string;
+            description "This primitive type defines the date and time according to the following structure:
+                'yyyyMMddhhmmss.s[Z|{+|-}HHMm]' where:
+                yyyy    '0000'..'9999'    year
+                MM        '01'..'12'            month
+                dd        '01'..'31'            day
+                hh        '00'..'23'            hour
+                mm        '00'..'59'            minute
+                ss        '00'..'59'            second
+                s        '.0'..'.9'            tenth of second (set to '.0' if EMS or NE cannot support this granularity)
+                Z        'Z'                    indicates UTC (rather than local time)
+                {+|-}    '+' or '-'            delta from UTC
+                HH        '00'..'23'            time zone difference in hours
+                Mm        '00'..'59'            time zone difference in minutes.";
+        }
+        typedef aps-channel {
+            type enumeration {
+                enum path {
+                    description "none";
+                }
+                enum tcm1 {
+                    description "none";
+                }
+                enum tcm2 {
+                    description "none";
+                }
+                enum tcm3 {
+                    description "none";
+                }
+                enum tcm4 {
+                    description "none";
+                }
+                enum tcm5 {
+                    description "none";
+                }
+                enum tcm6 {
+                    description "none";
+                }
+                enum section {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef bit-string {
+            type string;
+            description "This primitive type defines a bit oriented string.
+                The size of the BitString will be defined in the valueRange property of the attribute; according to ASN.1 (X.680).
+                The semantic of each bit position will be defined in the Documentation field of the attribute.";
+        }
+        typedef delay-measurement-role {
+            type enumeration {
+                enum controller {
+                    description "none";
+                }
+                enum responder {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef resize-operation-type {
+            type enumeration {
+                enum increase-bw {
+                    description "Increase Bandwidth";
+                }
+                enum decrease-bw {
+                    description "Decrease Bandwidth";
+                }
+            }
+            description "none";
+        }
+        typedef granularity-period-type {
+            type enumeration {
+                enum unknown {
+                    description "none";
+                }
+                enum period-15-min {
+                    description "none";
+                }
+                enum period-24-hours {
+                    description "none";
+                }
+            }
+            description "The enumeration with the options for granularity period of the performance data.";
+        }
+
+    /***********************
+    * package illustrative-object-diagrams
+    **********************/ 
+
+    /***********************
+    * package imported-information-object-classes
+    **********************/ 
+        /***********************
+        * package q.822
+        **********************/ 
+            grouping q.822-current-data-g {
+                leaf suspect-interval-flag {
+                    type boolean;
+                    description "This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are:- Suspect data were detected by the actual resource doing data collection.- Transition of the administrativeState attribute to/from the 'lock' state.- Transition of the operationalState to/from the 'disabled' state.- Scheduler setting that inhibits the collection function.- The performance counters were reset during the interval.- The currentData (or subclass) object instance was created during the monitoring period.";
+                }
+                leaf elapsed-time {
+                    type int64;
+                    description "none";
+                }
+                uses x.739-scanner-g;
+                description "none";
+            }
+            grouping q.822-history-data-g {
+                leaf history-data-id {
+                    type string;
+                    description "none";
+                }
+                leaf period-end-time {
+                    type yang:date-and-time;
+                    description "none";
+                }
+                leaf granularity-period {
+                    type granularity-period-type;
+                    description "none";
+                }
+                uses x.721-top-g;
+                description "none";
+            }
+
+        /***********************
+        * package x.739
+        **********************/ 
+            grouping x.739-scanner-g {
+                leaf scanner-id {
+                    type string;
+                    description "none";
+                }
+                leaf granularity-period {
+                    type granularity-period-type;
+                    description "none";
+                }
+                leaf administrative-state {
+                    type core-model:administrative-state;
+                    description "none";
+                }
+                uses x.721-top-g;
+                description "none";
+            }
+
+        /***********************
+        * package x.721
+        **********************/ 
+            grouping x.721-top-g {
+                leaf object-class {
+                    type object-identifier;
+                    description "ObjectClass ::= CHOICE{    globalForm    [0] OBJECT IDENTIFIER,
+                        localForm    [1] INTEGER}";
+                }
+                leaf name-binding {
+                    type object-identifier;
+                    description "none";
+                }
+                description "This is the top level of managed object class hierarchy and every other managed object class is a specialization of either this generic class (top) or a specialization of subclass of top. The parameter miscellaneousError is to be used when a processing failure has occurred and the error condition encountered does not match any of object's defined specific error types.";
+            }
+
+
+    /***********************
+    * package imported-data-types
+    **********************/ 
+        typedef object-instance {
+            type string;
+            description "none";
+        }
+        typedef name {
+            type string;
+            description "none";
+        }
+        typedef object-identifier {
+            type string;
+            description "none";
+        }
+        typedef generalized-time {
+            type string;
+            description "none";
+        }
+        typedef time-period {
+            type string;
+            description "This primitive Type is imported from X.739.";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/iana-crypt-hash@2014-08-06.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/iana-crypt-hash@2014-08-06.yang
new file mode 100644
index 0000000..f73c31b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/iana-crypt-hash@2014-08-06.yang
@@ -0,0 +1,120 @@
+module iana-crypt-hash {
+  namespace "urn:ietf:params:xml:ns:yang:iana-crypt-hash";
+  prefix ianach;
+
+  organization "IANA";
+  contact
+    "        Internet Assigned Numbers Authority
+
+     Postal: ICANN
+             12025 Waterfront Drive, Suite 300
+             Los Angeles, CA  90094-2536
+             United States
+
+     Tel:    +1 310 301 5800
+     E-Mail: iana&iana.org>";
+  description
+    "This YANG module defines a type for storing passwords
+     using a hash function and features to indicate which hash
+     functions are supported by an implementation.
+
+     The latest revision of this YANG module can be obtained from
+     the IANA web site.
+
+     Requests for new values should be made to IANA via
+     email (iana&iana.org).
+
+     Copyright (c) 2014 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     The initial version of this YANG module is part of RFC 7317;
+     see the RFC itself for full legal notices.";
+
+  revision 2014-08-06 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7317: A YANG Data Model for System Management";
+  }
+
+  typedef crypt-hash {
+    type string {
+      pattern
+        '$0$.*'
+      + '|$1$[a-zA-Z0-9./]{1,8}$[a-zA-Z0-9./]{22}'
+      + '|$5$(rounds=\d+$)?[a-zA-Z0-9./]{1,16}$[a-zA-Z0-9./]{43}'
+      + '|$6$(rounds=\d+$)?[a-zA-Z0-9./]{1,16}$[a-zA-Z0-9./]{86}';
+    }
+    description
+      "The crypt-hash type is used to store passwords using
+       a hash function.  The algorithms for applying the hash
+       function and encoding the result are implemented in
+       various UNIX systems as the function crypt(3).
+
+       A value of this type matches one of the forms:
+
+         $0$<clear text password>
+         $<id>$<salt>$<password hash>
+         $<id>$<parameter>$<salt>$<password hash>
+
+       The '$0$' prefix signals that the value is clear text.  When
+       such a value is received by the server, a hash value is
+       calculated, and the string '$<id>$<salt>$' or
+       $<id>$<parameter>$<salt>$ is prepended to the result.  This
+       value is stored in the configuration data store.
+       If a value starting with '$<id>$', where <id> is not '0', is
+       received, the server knows that the value already represents a
+       hashed value and stores it 'as is' in the data store.
+
+       When a server needs to verify a password given by a user, it
+       finds the stored password hash string for that user, extracts
+       the salt, and calculates the hash with the salt and given
+       password as input.  If the calculated hash value is the same
+       as the stored value, the password given by the client is
+       accepted.
+
+       This type defines the following hash functions:
+
+         id | hash function | feature
+         ---+---------------+-------------------
+          1 | MD5           | crypt-hash-md5
+          5 | SHA-256       | crypt-hash-sha-256
+          6 | SHA-512       | crypt-hash-sha-512
+
+       The server indicates support for the different hash functions
+       by advertising the corresponding feature.";
+    reference
+      "IEEE Std 1003.1-2008 - crypt() function
+       RFC 1321: The MD5 Message-Digest Algorithm
+       FIPS.180-4.2012: Secure Hash Standard (SHS)";
+  }
+
+  feature crypt-hash-md5 {
+    description
+      "Indicates that the device supports the MD5
+       hash function in 'crypt-hash' values.";
+    reference "RFC 1321: The MD5 Message-Digest Algorithm";
+  }
+
+  feature crypt-hash-sha-256 {
+    description
+      "Indicates that the device supports the SHA-256
+       hash function in 'crypt-hash' values.";
+    reference "FIPS.180-4.2012: Secure Hash Standard (SHS)";
+  }
+
+  feature crypt-hash-sha-512 {
+    description
+      "Indicates that the device supports the SHA-512
+       hash function in 'crypt-hash' values.";
+    reference "FIPS.180-4.2012: Secure Hash Standard (SHS)";
+  }
+
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-inet-types@2010-09-24.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-inet-types@2010-09-24.yang
new file mode 100644
index 0000000..a9fc2c8
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-inet-types@2010-09-24.yang
@@ -0,0 +1,418 @@
+module ietf-inet-types {
+
+   namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
+   prefix "inet";
+
+   organization
+    "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+   contact
+    "WG Web:   <http://tools.ietf.org/wg/netmod/>
+     WG List:  <mailto:netmod@ietf.org>
+
+     WG Chair: David Partain
+               <mailto:david.partain@ericsson.com>
+
+     WG Chair: David Kessens
+               <mailto:david.kessens@nsn.com>
+
+     Editor:   Juergen Schoenwaelder
+               <mailto:j.schoenwaelder@jacobs-university.de>";
+
+   description
+    "This module contains a collection of generally useful derived
+     YANG data types for Internet addresses and related things.
+
+     Copyright (c) 2010 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or without
+     modification, is permitted pursuant to, and subject to the license
+     terms contained in, the Simplified BSD License set forth in Section
+     4.c of the IETF Trust's Legal Provisions Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 6021; see
+     the RFC itself for full legal notices.";
+
+   revision 2010-09-24 {
+     description
+      "Initial revision.";
+     reference
+      "RFC 6021: Common YANG Data Types";
+   }
+
+   /*** collection of protocol field related types ***/
+
+   typedef ip-version {
+     type enumeration {
+       enum unknown {
+         value "0";
+         description
+          "An unknown or unspecified version of the Internet protocol.";
+       }
+       enum ipv4 {
+         value "1";
+         description
+          "The IPv4 protocol as defined in RFC 791.";
+       }
+       enum ipv6 {
+         value "2";
+         description
+          "The IPv6 protocol as defined in RFC 2460.";
+       }
+     }
+     description
+      "This value represents the version of the IP protocol.
+
+       In the value set and its semantics, this type is equivalent
+       to the InetVersion textual convention of the SMIv2.";
+     reference
+      "RFC  791: Internet Protocol
+       RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+       RFC 4001: Textual Conventions for Internet Network Addresses";
+   }
+
+   typedef dscp {
+     type uint8 {
+       range "0..63";
+     }
+     description
+      "The dscp type represents a Differentiated Services Code-Point
+       that may be used for marking packets in a traffic stream.
+
+       In the value set and its semantics, this type is equivalent
+       to the Dscp textual convention of the SMIv2.";
+     reference
+      "RFC 3289: Management Information Base for the Differentiated
+                 Services Architecture
+       RFC 2474: Definition of the Differentiated Services Field
+                 (DS Field) in the IPv4 and IPv6 Headers
+       RFC 2780: IANA Allocation Guidelines For Values In
+                 the Internet Protocol and Related Headers";
+   }
+
+   typedef ipv6-flow-label {
+     type uint32 {
+       range "0..1048575";
+     }
+     description
+      "The flow-label type represents flow identifier or Flow Label
+       in an IPv6 packet header that may be used to discriminate
+       traffic flows.
+
+       In the value set and its semantics, this type is equivalent
+       to the IPv6FlowLabel textual convention of the SMIv2.";
+     reference
+      "RFC 3595: Textual Conventions for IPv6 Flow Label
+       RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
+   }
+
+   typedef port-number {
+     type uint16 {
+       range "0..65535";
+     }
+     description
+      "The port-number type represents a 16-bit port number of an
+       Internet transport layer protocol such as UDP, TCP, DCCP, or
+       SCTP.  Port numbers are assigned by IANA.  A current list of
+       all assignments is available from <http://www.iana.org/>.
+
+       Note that the port number value zero is reserved by IANA.  In
+       situations where the value zero does not make sense, it can
+       be excluded by subtyping the port-number type.
+
+       In the value set and its semantics, this type is equivalent
+       to the InetPortNumber textual convention of the SMIv2.";
+     reference
+      "RFC  768: User Datagram Protocol
+       RFC  793: Transmission Control Protocol
+       RFC 4960: Stream Control Transmission Protocol
+       RFC 4340: Datagram Congestion Control Protocol (DCCP)
+       RFC 4001: Textual Conventions for Internet Network Addresses";
+   }
+
+   /*** collection of autonomous system related types ***/
+
+   typedef as-number {
+     type uint32;
+     description
+      "The as-number type represents autonomous system numbers
+       which identify an Autonomous System (AS).  An AS is a set
+       of routers under a single technical administration, using
+       an interior gateway protocol and common metrics to route
+       packets within the AS, and using an exterior gateway
+       protocol to route packets to other ASs'.  IANA maintains
+       the AS number space and has delegated large parts to the
+       regional registries.
+
+       Autonomous system numbers were originally limited to 16
+       bits.  BGP extensions have enlarged the autonomous system
+       number space to 32 bits.  This type therefore uses an uint32
+       base type without a range restriction in order to support
+       a larger autonomous system number space.
+
+       In the value set and its semantics, this type is equivalent
+       to the InetAutonomousSystemNumber textual convention of
+       the SMIv2.";
+     reference
+      "RFC 1930: Guidelines for creation, selection, and registration
+                 of an Autonomous System (AS)
+       RFC 4271: A Border Gateway Protocol 4 (BGP-4)
+       RFC 4893: BGP Support for Four-octet AS Number Space
+       RFC 4001: Textual Conventions for Internet Network Addresses";
+   }
+
+   /*** collection of IP address and hostname related types ***/
+
+   typedef ip-address {
+     type union {
+       type inet:ipv4-address;
+       type inet:ipv6-address;
+     }
+     description
+      "The ip-address type represents an IP address and is IP
+       version neutral.  The format of the textual representations
+       implies the IP version.";
+   }
+
+   typedef ipv4-address {
+     type string {
+       pattern
+         '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+       +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
+       + '(%[\p{N}\p{L}]+)?';
+     }
+     description
+       "The ipv4-address type represents an IPv4 address in
+        dotted-quad notation.  The IPv4 address may include a zone
+        index, separated by a % sign.
+
+        The zone index is used to disambiguate identical address
+        values.  For link-local addresses, the zone index will
+        typically be the interface index number or the name of an
+        interface.  If the zone index is not present, the default
+        zone of the device will be used.
+
+        The canonical format for the zone index is the numerical
+        format";
+   }
+
+   typedef ipv6-address {
+     type string {
+       pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+             + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+             + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
+             + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
+             + '(%[\p{N}\p{L}]+)?';
+       pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+             + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
+             + '(%.+)?';
+     }
+     description
+      "The ipv6-address type represents an IPv6 address in full,
+       mixed, shortened, and shortened-mixed notation.  The IPv6
+       address may include a zone index, separated by a % sign.
+
+       The zone index is used to disambiguate identical address
+       values.  For link-local addresses, the zone index will
+       typically be the interface index number or the name of an
+       interface.  If the zone index is not present, the default
+       zone of the device will be used.
+
+       The canonical format of IPv6 addresses uses the compressed
+       format described in RFC 4291, Section 2.2, item 2 with the
+       following additional rules: the :: substitution must be
+       applied to the longest sequence of all-zero 16-bit chunks
+       in an IPv6 address.  If there is a tie, the first sequence
+       of all-zero 16-bit chunks is replaced by ::.  Single
+       all-zero 16-bit chunks are not compressed.  The canonical
+       format uses lowercase characters and leading zeros are
+       not allowed.  The canonical format for the zone index is
+       the numerical format as described in RFC 4007, Section
+       11.2.";
+     reference
+      "RFC 4291: IP Version 6 Addressing Architecture
+       RFC 4007: IPv6 Scoped Address Architecture
+       RFC 5952: A Recommendation for IPv6 Address Text Representation";
+   }
+
+   typedef ip-prefix {
+     type union {
+       type inet:ipv4-prefix;
+       type inet:ipv6-prefix;
+     }
+     description
+      "The ip-prefix type represents an IP prefix and is IP
+       version neutral.  The format of the textual representations
+       implies the IP version.";
+   }
+
+   typedef ipv4-prefix {
+     type string {
+       pattern
+          '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+        +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
+        + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
+     }
+     description
+      "The ipv4-prefix type represents an IPv4 address prefix.
+       The prefix length is given by the number following the
+       slash character and must be less than or equal to 32.
+
+       A prefix length value of n corresponds to an IP address
+       mask that has n contiguous 1-bits from the most
+       significant bit (MSB) and all other bits set to 0.
+
+       The canonical format of an IPv4 prefix has all bits of
+       the IPv4 address set to zero that are not part of the
+       IPv4 prefix.";
+   }
+
+   typedef ipv6-prefix {
+     type string {
+       pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+             + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+             + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
+             + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
+             + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
+       pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+             + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
+             + '(/.+)';
+     }
+     description
+      "The ipv6-prefix type represents an IPv6 address prefix.
+       The prefix length is given by the number following the
+       slash character and must be less than or equal 128.
+
+       A prefix length value of n corresponds to an IP address
+       mask that has n contiguous 1-bits from the most
+       significant bit (MSB) and all other bits set to 0.
+
+       The IPv6 address should have all bits that do not belong
+       to the prefix set to zero.
+
+       The canonical format of an IPv6 prefix has all bits of
+       the IPv6 address set to zero that are not part of the
+       IPv6 prefix.  Furthermore, IPv6 address is represented
+       in the compressed format described in RFC 4291, Section
+       2.2, item 2 with the following additional rules: the ::
+       substitution must be applied to the longest sequence of
+       all-zero 16-bit chunks in an IPv6 address.  If there is
+       a tie, the first sequence of all-zero 16-bit chunks is
+       replaced by ::.  Single all-zero 16-bit chunks are not
+       compressed.  The canonical format uses lowercase
+       characters and leading zeros are not allowed.";
+     reference
+      "RFC 4291: IP Version 6 Addressing Architecture";
+   }
+
+   /*** collection of domain name and URI types ***/
+
+   typedef domain-name {
+     type string {
+       pattern '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
+            +  '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
+            +  '|\.';
+       length "1..253";
+     }
+     description
+      "The domain-name type represents a DNS domain name.  The
+       name SHOULD be fully qualified whenever possible.
+
+       Internet domain names are only loosely specified.  Section
+       3.5 of RFC 1034 recommends a syntax (modified in Section
+       2.1 of RFC 1123).  The pattern above is intended to allow
+       for current practice in domain name use, and some possible
+       future expansion.  It is designed to hold various types of
+       domain names, including names used for A or AAAA records
+       (host names) and other records, such as SRV records.  Note
+       that Internet host names have a stricter syntax (described
+       in RFC 952) than the DNS recommendations in RFCs 1034 and
+       1123, and that systems that want to store host names in
+       schema nodes using the domain-name type are recommended to
+       adhere to this stricter standard to ensure interoperability.
+
+       The encoding of DNS names in the DNS protocol is limited
+       to 255 characters.  Since the encoding consists of labels
+       prefixed by a length bytes and there is a trailing NULL
+       byte, only 253 characters can appear in the textual dotted
+       notation.
+
+       The description clause of schema nodes using the domain-name
+       type MUST describe when and how these names are resolved to
+       IP addresses.  Note that the resolution of a domain-name value
+       may require to query multiple DNS records (e.g., A for IPv4
+       and AAAA for IPv6).  The order of the resolution process and
+       which DNS record takes precedence can either be defined
+       explicitely or it may depend on the configuration of the
+       resolver.
+
+       Domain-name values use the US-ASCII encoding.  Their canonical
+       format uses lowercase US-ASCII characters.  Internationalized
+       domain names MUST be encoded in punycode as described in RFC
+       3492";
+     reference
+      "RFC  952: DoD Internet Host Table Specification
+       RFC 1034: Domain Names - Concepts and Facilities
+       RFC 1123: Requirements for Internet Hosts -- Application
+                 and Support
+       RFC 2782: A DNS RR for specifying the location of services
+                 (DNS SRV)
+       RFC 3492: Punycode: A Bootstring encoding of Unicode for
+                 Internationalized Domain Names in Applications
+                 (IDNA)
+       RFC 5891: Internationalizing Domain Names in Applications
+                 (IDNA): Protocol";
+   }
+
+   typedef host {
+     type union {
+       type inet:ip-address;
+       type inet:domain-name;
+     }
+     description
+      "The host type represents either an IP address or a DNS
+       domain name.";
+   }
+
+   typedef uri {
+     type string;
+     description
+      "The uri type represents a Uniform Resource Identifier
+       (URI) as defined by STD 66.
+
+       Objects using the uri type MUST be in US-ASCII encoding,
+       and MUST be normalized as described by RFC 3986 Sections
+       6.2.1, 6.2.2.1, and 6.2.2.2.  All unnecessary
+       percent-encoding is removed, and all case-insensitive
+       characters are set to lowercase except for hexadecimal
+       digits, which are normalized to uppercase as described in
+       Section 6.2.2.1.
+
+       The purpose of this normalization is to help provide
+       unique URIs.  Note that this normalization is not
+       sufficient to provide uniqueness.  Two URIs that are
+       textually distinct after this normalization may still be
+       equivalent.
+
+       Objects using the uri type may restrict the schemes that
+       they permit.  For example, 'data:' and 'urn:' schemes
+       might not be appropriate.
+
+       A zero-length URI is not a valid URI.  This can be used to
+       express 'URI absent' where required.
+
+       In the value set and its semantics, this type is equivalent
+       to the Uri SMIv2 textual convention defined in RFC 5017.";
+     reference
+      "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
+       RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
+                 Group: Uniform Resource Identifiers (URIs), URLs,
+                 and Uniform Resource Names (URNs): Clarifications
+                 and Recommendations
+       RFC 5017: MIB Textual Conventions for Uniform Resource
+                 Identifiers (URIs)";
+   }
+
+ }
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-inet-types@2013-07-15.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-inet-types@2013-07-15.yang
new file mode 100644
index 0000000..0ca5628
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-inet-types@2013-07-15.yang
@@ -0,0 +1,457 @@
+module ietf-inet-types {
+
+  namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
+  prefix "inet";
+
+  organization
+   "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+  contact
+   "WG Web:   <http://tools.ietf.org/wg/netmod/>
+    WG List:  <mailto:netmod@ietf.org>
+
+    WG Chair: David Kessens
+              <mailto:david.kessens@nsn.com>
+
+    WG Chair: Juergen Schoenwaelder
+              <mailto:j.schoenwaelder@jacobs-university.de>
+
+    Editor:   Juergen Schoenwaelder
+              <mailto:j.schoenwaelder@jacobs-university.de>";
+
+  description
+   "This module contains a collection of generally useful derived
+    YANG data types for Internet addresses and related things.
+
+    Copyright (c) 2013 IETF Trust and the persons identified as
+    authors of the code.  All rights reserved.
+
+    Redistribution and use in source and binary forms, with or
+    without modification, is permitted pursuant to, and subject
+    to the license terms contained in, the Simplified BSD License
+    set forth in Section 4.c of the IETF Trust's Legal Provisions
+    Relating to IETF Documents
+    (http://trustee.ietf.org/license-info).
+
+    This version of this YANG module is part of RFC 6991; see
+    the RFC itself for full legal notices.";
+
+  revision 2013-07-15 {
+    description
+     "This revision adds the following new data types:
+      - ip-address-no-zone
+      - ipv4-address-no-zone
+      - ipv6-address-no-zone";
+    reference
+     "RFC 6991: Common YANG Data Types";
+  }
+
+  revision 2010-09-24 {
+    description
+     "Initial revision.";
+    reference
+     "RFC 6021: Common YANG Data Types";
+  }
+
+  /*** collection of types related to protocol fields ***/
+
+  typedef ip-version {
+    type enumeration {
+      enum unknown {
+        value "0";
+        description
+         "An unknown or unspecified version of the Internet
+          protocol.";
+      }
+      enum ipv4 {
+        value "1";
+        description
+         "The IPv4 protocol as defined in RFC 791.";
+      }
+      enum ipv6 {
+        value "2";
+        description
+         "The IPv6 protocol as defined in RFC 2460.";
+      }
+    }
+    description
+     "This value represents the version of the IP protocol.
+
+      In the value set and its semantics, this type is equivalent
+      to the InetVersion textual convention of the SMIv2.";
+    reference
+     "RFC  791: Internet Protocol
+      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+      RFC 4001: Textual Conventions for Internet Network Addresses";
+  }
+
+  typedef dscp {
+    type uint8 {
+      range "0..63";
+    }
+    description
+     "The dscp type represents a Differentiated Services Code Point
+      that may be used for marking packets in a traffic stream.
+      In the value set and its semantics, this type is equivalent
+      to the Dscp textual convention of the SMIv2.";
+    reference
+     "RFC 3289: Management Information Base for the Differentiated
+                Services Architecture
+      RFC 2474: Definition of the Differentiated Services Field
+                (DS Field) in the IPv4 and IPv6 Headers
+      RFC 2780: IANA Allocation Guidelines For Values In
+                the Internet Protocol and Related Headers";
+  }
+
+  typedef ipv6-flow-label {
+    type uint32 {
+      range "0..1048575";
+    }
+    description
+     "The ipv6-flow-label type represents the flow identifier or Flow
+      Label in an IPv6 packet header that may be used to
+      discriminate traffic flows.
+
+      In the value set and its semantics, this type is equivalent
+      to the IPv6FlowLabel textual convention of the SMIv2.";
+    reference
+     "RFC 3595: Textual Conventions for IPv6 Flow Label
+      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
+  }
+
+  typedef port-number {
+    type uint16 {
+      range "0..65535";
+    }
+    description
+     "The port-number type represents a 16-bit port number of an
+      Internet transport-layer protocol such as UDP, TCP, DCCP, or
+      SCTP.  Port numbers are assigned by IANA.  A current list of
+      all assignments is available from <http://www.iana.org/>.
+
+      Note that the port number value zero is reserved by IANA.  In
+      situations where the value zero does not make sense, it can
+      be excluded by subtyping the port-number type.
+      In the value set and its semantics, this type is equivalent
+      to the InetPortNumber textual convention of the SMIv2.";
+    reference
+     "RFC  768: User Datagram Protocol
+      RFC  793: Transmission Control Protocol
+      RFC 4960: Stream Control Transmission Protocol
+      RFC 4340: Datagram Congestion Control Protocol (DCCP)
+      RFC 4001: Textual Conventions for Internet Network Addresses";
+  }
+
+  /*** collection of types related to autonomous systems ***/
+
+  typedef as-number {
+    type uint32;
+    description
+     "The as-number type represents autonomous system numbers
+      which identify an Autonomous System (AS).  An AS is a set
+      of routers under a single technical administration, using
+      an interior gateway protocol and common metrics to route
+      packets within the AS, and using an exterior gateway
+      protocol to route packets to other ASes.  IANA maintains
+      the AS number space and has delegated large parts to the
+      regional registries.
+
+      Autonomous system numbers were originally limited to 16
+      bits.  BGP extensions have enlarged the autonomous system
+      number space to 32 bits.  This type therefore uses an uint32
+      base type without a range restriction in order to support
+      a larger autonomous system number space.
+
+      In the value set and its semantics, this type is equivalent
+      to the InetAutonomousSystemNumber textual convention of
+      the SMIv2.";
+    reference
+     "RFC 1930: Guidelines for creation, selection, and registration
+                of an Autonomous System (AS)
+      RFC 4271: A Border Gateway Protocol 4 (BGP-4)
+      RFC 4001: Textual Conventions for Internet Network Addresses
+      RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
+                Number Space";
+  }
+
+  /*** collection of types related to IP addresses and hostnames ***/
+
+  typedef ip-address {
+    type union {
+      type inet:ipv4-address;
+      type inet:ipv6-address;
+    }
+    description
+     "The ip-address type represents an IP address and is IP
+      version neutral.  The format of the textual representation
+      implies the IP version.  This type supports scoped addresses
+      by allowing zone identifiers in the address format.";
+    reference
+     "RFC 4007: IPv6 Scoped Address Architecture";
+  }
+
+  typedef ipv4-address {
+    type string {
+      pattern
+        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+      +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
+      + '(%[\p{N}\p{L}]+)?';
+    }
+    description
+      "The ipv4-address type represents an IPv4 address in
+       dotted-quad notation.  The IPv4 address may include a zone
+       index, separated by a % sign.
+
+       The zone index is used to disambiguate identical address
+       values.  For link-local addresses, the zone index will
+       typically be the interface index number or the name of an
+       interface.  If the zone index is not present, the default
+       zone of the device will be used.
+
+       The canonical format for the zone index is the numerical
+       format";
+  }
+
+  typedef ipv6-address {
+    type string {
+      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
+            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
+            + '(%[\p{N}\p{L}]+)?';
+      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
+            + '(%.+)?';
+    }
+    description
+     "The ipv6-address type represents an IPv6 address in full,
+      mixed, shortened, and shortened-mixed notation.  The IPv6
+      address may include a zone index, separated by a % sign.
+
+      The zone index is used to disambiguate identical address
+      values.  For link-local addresses, the zone index will
+      typically be the interface index number or the name of an
+      interface.  If the zone index is not present, the default
+      zone of the device will be used.
+
+      The canonical format of IPv6 addresses uses the textual
+      representation defined in Section 4 of RFC 5952.  The
+      canonical format for the zone index is the numerical
+      format as described in Section 11.2 of RFC 4007.";
+    reference
+     "RFC 4291: IP Version 6 Addressing Architecture
+      RFC 4007: IPv6 Scoped Address Architecture
+      RFC 5952: A Recommendation for IPv6 Address Text
+                Representation";
+  }
+
+  typedef ip-address-no-zone {
+    type union {
+      type inet:ipv4-address-no-zone;
+      type inet:ipv6-address-no-zone;
+    }
+    description
+     "The ip-address-no-zone type represents an IP address and is
+      IP version neutral.  The format of the textual representation
+      implies the IP version.  This type does not support scoped
+      addresses since it does not allow zone identifiers in the
+      address format.";
+    reference
+     "RFC 4007: IPv6 Scoped Address Architecture";
+  }
+
+  typedef ipv4-address-no-zone {
+    type inet:ipv4-address {
+      pattern '[0-9\.]*';
+    }
+    description
+      "An IPv4 address without a zone index.  This type, derived from
+       ipv4-address, may be used in situations where the zone is
+       known from the context and hence no zone index is needed.";
+  }
+
+  typedef ipv6-address-no-zone {
+    type inet:ipv6-address {
+      pattern '[0-9a-fA-F:\.]*';
+    }
+    description
+      "An IPv6 address without a zone index.  This type, derived from
+       ipv6-address, may be used in situations where the zone is
+       known from the context and hence no zone index is needed.";
+    reference
+     "RFC 4291: IP Version 6 Addressing Architecture
+      RFC 4007: IPv6 Scoped Address Architecture
+      RFC 5952: A Recommendation for IPv6 Address Text
+                Representation";
+  }
+
+  typedef ip-prefix {
+    type union {
+      type inet:ipv4-prefix;
+      type inet:ipv6-prefix;
+    }
+    description
+     "The ip-prefix type represents an IP prefix and is IP
+      version neutral.  The format of the textual representations
+      implies the IP version.";
+  }
+
+  typedef ipv4-prefix {
+    type string {
+      pattern
+         '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+       +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
+       + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
+    }
+    description
+     "The ipv4-prefix type represents an IPv4 address prefix.
+      The prefix length is given by the number following the
+      slash character and must be less than or equal to 32.
+
+      A prefix length value of n corresponds to an IP address
+      mask that has n contiguous 1-bits from the most
+      significant bit (MSB) and all other bits set to 0.
+
+      The canonical format of an IPv4 prefix has all bits of
+      the IPv4 address set to zero that are not part of the
+      IPv4 prefix.";
+  }
+
+  typedef ipv6-prefix {
+    type string {
+      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
+            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
+            + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
+      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
+            + '(/.+)';
+    }
+    description
+     "The ipv6-prefix type represents an IPv6 address prefix.
+      The prefix length is given by the number following the
+      slash character and must be less than or equal to 128.
+
+      A prefix length value of n corresponds to an IP address
+      mask that has n contiguous 1-bits from the most
+      significant bit (MSB) and all other bits set to 0.
+
+      The IPv6 address should have all bits that do not belong
+      to the prefix set to zero.
+
+      The canonical format of an IPv6 prefix has all bits of
+      the IPv6 address set to zero that are not part of the
+      IPv6 prefix.  Furthermore, the IPv6 address is represented
+      as defined in Section 4 of RFC 5952.";
+    reference
+     "RFC 5952: A Recommendation for IPv6 Address Text
+                Representation";
+  }
+
+  /*** collection of domain name and URI types ***/
+
+  typedef domain-name {
+    type string {
+      pattern
+        '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
+      + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
+      + '|\.';
+      length "1..253";
+    }
+    description
+     "The domain-name type represents a DNS domain name.  The
+      name SHOULD be fully qualified whenever possible.
+
+      Internet domain names are only loosely specified.  Section
+      3.5 of RFC 1034 recommends a syntax (modified in Section
+      2.1 of RFC 1123).  The pattern above is intended to allow
+      for current practice in domain name use, and some possible
+      future expansion.  It is designed to hold various types of
+      domain names, including names used for A or AAAA records
+      (host names) and other records, such as SRV records.  Note
+      that Internet host names have a stricter syntax (described
+      in RFC 952) than the DNS recommendations in RFCs 1034 and
+      1123, and that systems that want to store host names in
+      schema nodes using the domain-name type are recommended to
+      adhere to this stricter standard to ensure interoperability.
+
+      The encoding of DNS names in the DNS protocol is limited
+      to 255 characters.  Since the encoding consists of labels
+      prefixed by a length bytes and there is a trailing NULL
+      byte, only 253 characters can appear in the textual dotted
+      notation.
+
+      The description clause of schema nodes using the domain-name
+      type MUST describe when and how these names are resolved to
+      IP addresses.  Note that the resolution of a domain-name value
+      may require to query multiple DNS records (e.g., A for IPv4
+      and AAAA for IPv6).  The order of the resolution process and
+      which DNS record takes precedence can either be defined
+      explicitly or may depend on the configuration of the
+      resolver.
+
+      Domain-name values use the US-ASCII encoding.  Their canonical
+      format uses lowercase US-ASCII characters.  Internationalized
+      domain names MUST be A-labels as per RFC 5890.";
+    reference
+     "RFC  952: DoD Internet Host Table Specification
+      RFC 1034: Domain Names - Concepts and Facilities
+      RFC 1123: Requirements for Internet Hosts -- Application
+                and Support
+      RFC 2782: A DNS RR for specifying the location of services
+                (DNS SRV)
+      RFC 5890: Internationalized Domain Names in Applications
+                (IDNA): Definitions and Document Framework";
+  }
+
+  typedef host {
+    type union {
+      type inet:ip-address;
+      type inet:domain-name;
+    }
+    description
+     "The host type represents either an IP address or a DNS
+      domain name.";
+  }
+
+  typedef uri {
+    type string;
+    description
+     "The uri type represents a Uniform Resource Identifier
+      (URI) as defined by STD 66.
+
+      Objects using the uri type MUST be in US-ASCII encoding,
+      and MUST be normalized as described by RFC 3986 Sections
+      6.2.1, 6.2.2.1, and 6.2.2.2.  All unnecessary
+      percent-encoding is removed, and all case-insensitive
+      characters are set to lowercase except for hexadecimal
+      digits, which are normalized to uppercase as described in
+      Section 6.2.2.1.
+
+      The purpose of this normalization is to help provide
+      unique URIs.  Note that this normalization is not
+      sufficient to provide uniqueness.  Two URIs that are
+      textually distinct after this normalization may still be
+      equivalent.
+
+      Objects using the uri type may restrict the schemes that
+      they permit.  For example, 'data:' and 'urn:' schemes
+      might not be appropriate.
+
+      A zero-length URI is not a valid URI.  This can be used to
+      express 'URI absent' where required.
+
+      In the value set and its semantics, this type is equivalent
+      to the Uri SMIv2 textual convention defined in RFC 5017.";
+    reference
+     "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
+      RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
+                Group: Uniform Resource Identifiers (URIs), URLs,
+                and Uniform Resource Names (URNs): Clarifications
+                and Recommendations
+      RFC 5017: MIB Textual Conventions for Uniform Resource
+                Identifiers (URIs)";
+  }
+
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-acm@2012-02-22.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-acm@2012-02-22.yang
new file mode 100644
index 0000000..05be765
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-acm@2012-02-22.yang
@@ -0,0 +1,449 @@
+module ietf-netconf-acm {
+
+  namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-acm";
+
+  prefix "nacm";
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+
+  contact
+    "WG Web:   <http://tools.ietf.org/wg/netconf/>
+     WG List:  <mailto:netconf@ietf.org>
+
+     WG Chair: Mehmet Ersue
+               <mailto:mehmet.ersue@nsn.com>
+
+     WG Chair: Bert Wijnen
+               <mailto:bertietf@bwijnen.net>
+
+     Editor:   Andy Bierman
+               <mailto:andy@yumaworks.com>
+
+     Editor:   Martin Bjorklund
+               <mailto:mbj@tail-f.com>";
+
+  description
+    "NETCONF Access Control Model.
+
+     Copyright (c) 2012 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD
+     License set forth in Section 4.c of the IETF Trust's
+     Legal Provisions Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 6536; see
+     the RFC itself for full legal notices.";
+
+  revision "2012-02-22" {
+    description
+      "Initial version";
+    reference
+      "RFC 6536: Network Configuration Protocol (NETCONF)
+                 Access Control Model";
+  }
+
+  /*
+   * Extension statements
+   */
+
+  extension default-deny-write {
+    description
+      "Used to indicate that the data model node
+       represents a sensitive security system parameter.
+
+       If present, and the NACM module is enabled (i.e.,
+       /nacm/enable-nacm object equals 'true'), the NETCONF server
+       will only allow the designated 'recovery session' to have
+       write access to the node.  An explicit access control rule is
+       required for all other users.
+
+       The 'default-deny-write' extension MAY appear within a data
+       definition statement.  It is ignored otherwise.";
+  }
+
+  extension default-deny-all {
+    description
+      "Used to indicate that the data model node
+       controls a very sensitive security system parameter.
+
+       If present, and the NACM module is enabled (i.e.,
+       /nacm/enable-nacm object equals 'true'), the NETCONF server
+       will only allow the designated 'recovery session' to have
+       read, write, or execute access to the node.  An explicit
+       access control rule is required for all other users.
+
+       The 'default-deny-all' extension MAY appear within a data
+       definition statement, 'rpc' statement, or 'notification'
+       statement.  It is ignored otherwise.";
+  }
+
+  /*
+   * Derived types
+   */
+
+  typedef user-name-type {
+    type string {
+      length "1..max";
+    }
+    description
+      "General Purpose Username string.";
+  }
+
+  typedef matchall-string-type {
+    type string {
+      pattern "\*";
+    }
+    description
+      "The string containing a single asterisk '*' is used
+       to conceptually represent all possible values
+       for the particular leaf using this data type.";
+  }
+
+  typedef access-operations-type {
+    type bits {
+      bit create {
+        description
+          "Any protocol operation that creates a
+           new data node.";
+      }
+      bit read {
+        description
+          "Any protocol operation or notification that
+           returns the value of a data node.";
+      }
+      bit update {
+        description
+          "Any protocol operation that alters an existing
+           data node.";
+      }
+      bit delete {
+        description
+          "Any protocol operation that removes a data node.";
+      }
+      bit exec {
+        description
+          "Execution access to the specified protocol operation.";
+      }
+    }
+    description
+      "NETCONF Access Operation.";
+  }
+
+  typedef group-name-type {
+    type string {
+      length "1..max";
+      pattern "[^\*].*";
+    }
+    description
+      "Name of administrative group to which
+       users can be assigned.";
+  }
+
+  typedef action-type {
+    type enumeration {
+      enum permit {
+        description
+          "Requested action is permitted.";
+      }
+      enum deny {
+        description
+          "Requested action is denied.";
+      }
+    }
+    description
+      "Action taken by the server when a particular
+       rule matches.";
+  }
+
+  typedef node-instance-identifier {
+    type yang:xpath1.0;
+    description
+      "Path expression used to represent a special
+       data node instance identifier string.
+
+       A node-instance-identifier value is an
+       unrestricted YANG instance-identifier expression.
+       All the same rules as an instance-identifier apply
+       except predicates for keys are optional.  If a key
+       predicate is missing, then the node-instance-identifier
+       represents all possible server instances for that key.
+
+       This XPath expression is evaluated in the following context:
+
+        o  The set of namespace declarations are those in scope on
+           the leaf element where this type is used.
+
+        o  The set of variable bindings contains one variable,
+           'USER', which contains the name of the user of the current
+            session.
+
+        o  The function library is the core function library, but
+           note that due to the syntax restrictions of an
+           instance-identifier, no functions are allowed.
+
+        o  The context node is the root node in the data tree.";
+  }
+
+  /*
+   * Data definition statements
+   */
+
+  container nacm {
+    nacm:default-deny-all;
+
+    description
+      "Parameters for NETCONF Access Control Model.";
+
+    leaf enable-nacm {
+      type boolean;
+      default true;
+      description
+        "Enables or disables all NETCONF access control
+         enforcement.  If 'true', then enforcement
+         is enabled.  If 'false', then enforcement
+         is disabled.";
+    }
+
+    leaf read-default {
+      type action-type;
+      default "permit";
+      description
+        "Controls whether read access is granted if
+         no appropriate rule is found for a
+         particular read request.";
+    }
+
+    leaf write-default {
+      type action-type;
+      default "deny";
+      description
+        "Controls whether create, update, or delete access
+         is granted if no appropriate rule is found for a
+         particular write request.";
+    }
+
+    leaf exec-default {
+      type action-type;
+      default "permit";
+      description
+        "Controls whether exec access is granted if no appropriate
+         rule is found for a particular protocol operation request.";
+    }
+
+    leaf enable-external-groups {
+      type boolean;
+      default true;
+      description
+        "Controls whether the server uses the groups reported by the
+         NETCONF transport layer when it assigns the user to a set of
+         NACM groups.  If this leaf has the value 'false', any group
+         names reported by the transport layer are ignored by the
+         server.";
+    }
+
+    leaf denied-operations {
+      type yang:zero-based-counter32;
+      config false;
+      mandatory true;
+      description
+        "Number of times since the server last restarted that a
+         protocol operation request was denied.";
+    }
+
+    leaf denied-data-writes {
+      type yang:zero-based-counter32;
+      config false;
+      mandatory true;
+      description
+        "Number of times since the server last restarted that a
+         protocol operation request to alter
+         a configuration datastore was denied.";
+    }
+
+    leaf denied-notifications {
+      type yang:zero-based-counter32;
+      config false;
+      mandatory true;
+      description
+        "Number of times since the server last restarted that
+         a notification was dropped for a subscription because
+         access to the event type was denied.";
+    }
+
+    container groups {
+      description
+        "NETCONF Access Control Groups.";
+
+      list group {
+        key name;
+
+        description
+          "One NACM Group Entry.  This list will only contain
+           configured entries, not any entries learned from
+           any transport protocols.";
+
+        leaf name {
+          type group-name-type;
+          description
+            "Group name associated with this entry.";
+        }
+
+        leaf-list user-name {
+          type user-name-type;
+          description
+            "Each entry identifies the username of
+             a member of the group associated with
+             this entry.";
+        }
+      }
+    }
+
+    list rule-list {
+      key "name";
+      ordered-by user;
+      description
+        "An ordered collection of access control rules.";
+
+      leaf name {
+        type string {
+          length "1..max";
+        }
+        description
+          "Arbitrary name assigned to the rule-list.";
+      }
+      leaf-list group {
+        type union {
+          type matchall-string-type;
+          type group-name-type;
+        }
+        description
+          "List of administrative groups that will be
+           assigned the associated access rights
+           defined by the 'rule' list.
+
+           The string '*' indicates that all groups apply to the
+           entry.";
+      }
+
+      list rule {
+        key "name";
+        ordered-by user;
+        description
+          "One access control rule.
+
+           Rules are processed in user-defined order until a match is
+           found.  A rule matches if 'module-name', 'rule-type', and
+           'access-operations' match the request.  If a rule
+           matches, the 'action' leaf determines if access is granted
+           or not.";
+
+        leaf name {
+          type string {
+            length "1..max";
+          }
+          description
+            "Arbitrary name assigned to the rule.";
+        }
+
+        leaf module-name {
+          type union {
+            type matchall-string-type;
+            type string;
+          }
+          default "*";
+          description
+            "Name of the module associated with this rule.
+
+             This leaf matches if it has the value '*' or if the
+             object being accessed is defined in the module with the
+             specified module name.";
+        }
+        choice rule-type {
+          description
+            "This choice matches if all leafs present in the rule
+             match the request.  If no leafs are present, the
+             choice matches all requests.";
+          case protocol-operation {
+            leaf rpc-name {
+              type union {
+                type matchall-string-type;
+                type string;
+              }
+              description
+                "This leaf matches if it has the value '*' or if
+                 its value equals the requested protocol operation
+                 name.";
+            }
+          }
+          case notification {
+            leaf notification-name {
+              type union {
+                type matchall-string-type;
+                type string;
+              }
+              description
+                "This leaf matches if it has the value '*' or if its
+                 value equals the requested notification name.";
+            }
+          }
+          case data-node {
+            leaf path {
+              type node-instance-identifier;
+              mandatory true;
+              description
+                "Data Node Instance Identifier associated with the
+                 data node controlled by this rule.
+
+                 Configuration data or state data instance
+                 identifiers start with a top-level data node.  A
+                 complete instance identifier is required for this
+                 type of path value.
+
+                 The special value '/' refers to all possible
+                 datastore contents.";
+            }
+          }
+        }
+
+        leaf access-operations {
+          type union {
+            type matchall-string-type;
+            type access-operations-type;
+          }
+          default "*";
+          description
+            "Access operations associated with this rule.
+
+             This leaf matches if it has the value '*' or if the
+             bit corresponding to the requested operation is set.";
+        }
+
+        leaf action {
+          type action-type;
+          mandatory true;
+          description
+            "The access control action associated with the
+             rule.  If a rule is determined to match a
+             particular request, then this object is used
+             to determine whether to permit or deny the
+             request.";
+        }
+
+        leaf comment {
+          type string;
+          description
+            "A textual description of the access rule.";
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-monitoring@2010-10-04.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-monitoring@2010-10-04.yang
new file mode 100644
index 0000000..48a0e56
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-monitoring@2010-10-04.yang
@@ -0,0 +1,558 @@
+module ietf-netconf-monitoring {
+
+  namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring";
+  prefix "ncm";
+
+  import ietf-yang-types { prefix yang; }
+  import ietf-inet-types { prefix inet; }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+
+  contact
+    "WG Web:   <http://tools.ietf.org/wg/netconf/>
+     WG List:  <mailto:netconf@ietf.org>
+
+     WG Chair: Mehmet Ersue
+               <mailto:mehmet.ersue@nsn.com>
+
+     WG Chair: Bert Wijnen
+               <mailto:bertietf@bwijnen.net>
+
+     Editor:   Mark Scott
+               <mailto:mark.scott@ericsson.com>
+
+     Editor:   Martin Bjorklund
+               <mailto:mbj@tail-f.com>";
+
+  description
+    "NETCONF Monitoring Module.
+     All elements in this module are read-only.
+
+     Copyright (c) 2010 IETF Trust and the persons identified as
+     authors of the code. All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD
+     License set forth in Section 4.c of the IETF Trust's
+     Legal Provisions Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 6022; see
+     the RFC itself for full legal notices.";
+
+  revision 2010-10-04 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 6022: YANG Module for NETCONF Monitoring";
+  }
+
+  typedef netconf-datastore-type {
+    type enumeration {
+      enum running;
+      enum candidate;
+      enum startup;
+    }
+    description
+      "Enumeration of possible NETCONF datastore types.";
+    reference
+      "RFC 4741: NETCONF Configuration Protocol";
+  }
+
+  identity transport {
+    description
+      "Base identity for NETCONF transport types.";
+  }
+
+  identity netconf-ssh {
+    base transport;
+    description
+      "NETCONF over Secure Shell (SSH).";
+    reference
+      "RFC 4742: Using the NETCONF Configuration Protocol
+                 over Secure SHell (SSH)";
+  }
+
+  identity netconf-soap-over-beep {
+    base transport;
+    description
+      "NETCONF over Simple Object Access Protocol (SOAP) over
+       Blocks Extensible Exchange Protocol (BEEP).";
+    reference
+      "RFC 4743: Using NETCONF over the Simple Object
+                 Access Protocol (SOAP)";
+  }
+
+  identity netconf-soap-over-https {
+    base transport;
+    description
+      "NETCONF over Simple Object Access Protocol (SOAP)
+      over Hypertext Transfer Protocol Secure (HTTPS).";
+    reference
+      "RFC 4743: Using NETCONF over the Simple Object
+                 Access Protocol (SOAP)";
+  }
+
+  identity netconf-beep {
+    base transport;
+    description
+      "NETCONF over Blocks Extensible Exchange Protocol (BEEP).";
+    reference
+      "RFC 4744: Using the NETCONF Protocol over the
+                 Blocks Extensible Exchange Protocol (BEEP)";
+  }
+
+  identity netconf-tls {
+    base transport;
+    description
+      "NETCONF over Transport Layer Security (TLS).";
+    reference
+      "RFC 5539: NETCONF over Transport Layer Security (TLS)";
+  }
+
+  identity schema-format {
+    description
+      "Base identity for data model schema languages.";
+  }
+
+  identity xsd {
+    base schema-format;
+    description
+      "W3C XML Schema Definition.";
+    reference
+      "W3C REC REC-xmlschema-1-20041028:
+         XML Schema Part 1: Structures";
+  }
+
+  identity yang {
+    base schema-format;
+    description
+      "The YANG data modeling language for NETCONF.";
+    reference
+      "RFC 6020:  YANG - A Data Modeling Language for the
+                  Network Configuration Protocol (NETCONF)";
+  }
+
+  identity yin {
+    base schema-format;
+    description
+      "The YIN syntax for YANG.";
+    reference
+      "RFC 6020:  YANG - A Data Modeling Language for the
+                  Network Configuration Protocol (NETCONF)";
+  }
+
+  identity rng {
+    base schema-format;
+    description
+      "Regular Language for XML Next Generation (RELAX NG).";
+    reference
+      "ISO/IEC 19757-2:2008: RELAX NG";
+  }
+
+  identity rnc {
+    base schema-format;
+    description
+      "Relax NG Compact Syntax";
+    reference
+      "ISO/IEC 19757-2:2008: RELAX NG";
+  }
+
+  grouping common-counters {
+    description
+      "Counters that exist both per session, and also globally,
+       accumulated from all sessions.";
+
+    leaf in-rpcs {
+      type yang:zero-based-counter32;
+      description
+        "Number of correct <rpc> messages received.";
+    }
+    leaf in-bad-rpcs {
+      type yang:zero-based-counter32;
+      description
+        "Number of messages received when an <rpc> message was expected,
+         that were not correct <rpc> messages.  This includes XML parse
+         errors and errors on the rpc layer.";
+    }
+    leaf out-rpc-errors {
+      type yang:zero-based-counter32;
+      description
+        "Number of <rpc-reply> messages sent that contained an
+         <rpc-error> element.";
+    }
+    leaf out-notifications {
+      type yang:zero-based-counter32;
+      description
+        "Number of <notification> messages sent.";
+    }
+  }
+
+  container netconf-state {
+    config false;
+    description
+      "The netconf-state container is the root of the monitoring
+       data model.";
+
+    container capabilities {
+      description
+        "Contains the list of NETCONF capabilities supported by the
+         server.";
+
+      leaf-list capability {
+        type inet:uri;
+        description
+          "List of NETCONF capabilities supported by the server.";
+      }
+    }
+
+    container datastores {
+      description
+        "Contains the list of NETCONF configuration datastores.";
+
+      list datastore {
+        key name;
+        description
+          "List of NETCONF configuration datastores supported by
+           the NETCONF server and related information.";
+
+        leaf name {
+          type netconf-datastore-type;
+          description
+            "Name of the datastore associated with this list entry.";
+        }
+        container locks {
+          presence
+            "This container is present only if the datastore
+             is locked.";
+          description
+            "The NETCONF <lock> and <partial-lock> operations allow
+             a client to lock specific resources in a datastore.  The
+             NETCONF server will prevent changes to the locked
+             resources by all sessions except the one that acquired
+             the lock(s).
+
+             Monitoring information is provided for each datastore
+             entry including details such as the session that acquired
+             the lock, the type of lock (global or partial) and the
+             list of locked resources.  Multiple locks per datastore
+             are supported.";
+
+          grouping lock-info {
+            description
+              "Lock related parameters, common to both global and
+               partial locks.";
+
+            leaf locked-by-session {
+              type uint32;
+              mandatory true;
+              description
+                "The session ID of the session that has locked
+                 this resource.  Both a global lock and a partial
+                 lock MUST contain the NETCONF session-id.
+
+                 If the lock is held by a session that is not managed
+                 by the NETCONF server (e.g., a CLI session), a session
+                 id of 0 (zero) is reported.";
+              reference
+                "RFC 4741: NETCONF Configuration Protocol";
+            }
+            leaf locked-time {
+              type yang:date-and-time;
+              mandatory true;
+              description
+                "The date and time of when the resource was
+                 locked.";
+            }
+          }
+
+          choice lock-type {
+            description
+              "Indicates if a global lock or a set of partial locks
+               are set.";
+
+            container global-lock {
+              description
+                "Present if the global lock is set.";
+              uses lock-info;
+            }
+
+            list partial-lock {
+              key lock-id;
+              description
+                "List of partial locks.";
+              reference
+                "RFC 5717: Partial Lock Remote Procedure Call (RPC) for
+                           NETCONF";
+
+              leaf lock-id {
+                type uint32;
+                description
+                  "This is the lock id returned in the <partial-lock>
+                   response.";
+              }
+              uses lock-info;
+              leaf-list select {
+                type yang:xpath1.0;
+                min-elements 1;
+                description
+                  "The xpath expression that was used to request
+                   the lock.  The select expression indicates the
+                   original intended scope of the lock.";
+              }
+              leaf-list locked-node {
+                type instance-identifier;
+                description
+                  "The list of instance-identifiers (i.e., the
+                   locked nodes).
+
+                   The scope of the partial lock is defined by the list
+                   of locked nodes.";
+              }
+            }
+          }
+        }
+      }
+    }
+
+    container schemas {
+      description
+        "Contains the list of data model schemas supported by the
+         server.";
+
+      list schema {
+        key "identifier version format";
+
+        description
+          "List of data model schemas supported by the server.";
+
+        leaf identifier {
+          type string;
+          description
+            "Identifier to uniquely reference the schema.  The
+             identifier is used in the <get-schema> operation and may
+             be used for other purposes such as file retrieval.
+
+             For modeling languages that support or require a data
+             model name (e.g., YANG module name) the identifier MUST
+             match that name.  For YANG data models, the identifier is
+             the name of the module or submodule.  In other cases, an
+             identifier such as a filename MAY be used instead.";
+        }
+        leaf version {
+          type string;
+          description
+            "Version of the schema supported.  Multiple versions MAY be
+             supported simultaneously by a NETCONF server.  Each
+             version MUST be reported individually in the schema list,
+             i.e., with same identifier, possibly different location,
+             but different version.
+
+             For YANG data models, version is the value of the most
+             recent YANG 'revision' statement in the module or
+             submodule, or the empty string if no 'revision' statement
+             is present.";
+        }
+        leaf format {
+          type identityref {
+            base schema-format;
+          }
+          description
+            "The data modeling language the schema is written
+             in (currently xsd, yang, yin, rng, or rnc).
+             For YANG data models, 'yang' format MUST be supported and
+             'yin' format MAY also be provided.";
+        }
+        leaf namespace {
+          type inet:uri;
+          mandatory true;
+          description
+            "The XML namespace defined by the data model.
+
+             For YANG data models, this is the module's namespace.
+             If the list entry describes a submodule, this field
+             contains the namespace of the module to which the
+             submodule belongs.";
+        }
+        leaf-list location {
+          type union {
+            type enumeration {
+              enum "NETCONF";
+            }
+            type inet:uri;
+          }
+          description
+            "One or more locations from which the schema can be
+             retrieved.  This list SHOULD contain at least one
+             entry per schema.
+
+             A schema entry may be located on a remote file system
+             (e.g., reference to file system for ftp retrieval) or
+             retrieved directly from a server supporting the
+             <get-schema> operation (denoted by the value 'NETCONF').";
+        }
+      }
+    }
+
+    container sessions {
+      description
+        "The sessions container includes session-specific data for
+         NETCONF management sessions.  The session list MUST include
+         all currently active NETCONF sessions.";
+
+      list session {
+        key session-id;
+        description
+          "All NETCONF sessions managed by the NETCONF server
+           MUST be reported in this list.";
+
+        leaf session-id {
+          type uint32 {
+            range "1..max";
+          }
+          description
+            "Unique identifier for the session.  This value is the
+             NETCONF session identifier, as defined in RFC 4741.";
+          reference
+            "RFC 4741: NETCONF Configuration Protocol";
+        }
+        leaf transport {
+          type identityref {
+            base transport;
+          }
+          mandatory true;
+          description
+            "Identifies the transport for each session, e.g.,
+            'netconf-ssh', 'netconf-soap', etc.";
+        }
+        leaf username  {
+          type string;
+          mandatory true;
+          description
+            "The username is the client identity that was authenticated
+            by the NETCONF transport protocol.  The algorithm used to
+            derive the username is NETCONF transport protocol specific
+            and in addition specific to the authentication mechanism
+            used by the NETCONF transport protocol.";
+        }
+        leaf source-host {
+          type inet:host;
+          description
+            "Host identifier of the NETCONF client.  The value
+             returned is implementation specific (e.g., hostname,
+             IPv4 address, IPv6 address)";
+        }
+        leaf login-time {
+          type yang:date-and-time;
+          mandatory true;
+          description
+            "Time at the server at which the session was established.";
+        }
+        uses common-counters {
+          description
+            "Per-session counters.  Zero based with following reset
+             behaviour:
+               - at start of a session
+               - when max value is reached";
+        }
+      }
+    }
+
+    container statistics {
+      description
+        "Statistical data pertaining to the NETCONF server.";
+
+      leaf netconf-start-time {
+        type yang:date-and-time;
+        description
+          "Date and time at which the management subsystem was
+           started.";
+      }
+      leaf in-bad-hellos {
+        type yang:zero-based-counter32;
+        description
+          "Number of sessions silently dropped because an
+          invalid <hello> message was received.  This includes <hello>
+          messages with a 'session-id' attribute, bad namespace, and
+          bad capability declarations.";
+      }
+      leaf in-sessions {
+        type yang:zero-based-counter32;
+        description
+          "Number of sessions started.  This counter is incremented
+           when a <hello> message with a <session-id> is sent.
+
+          'in-sessions' - 'in-bad-hellos' =
+              'number of correctly started netconf sessions'";
+      }
+      leaf dropped-sessions {
+        type yang:zero-based-counter32;
+        description
+          "Number of sessions that were abnormally terminated, e.g.,
+           due to idle timeout or transport close.  This counter is not
+           incremented when a session is properly closed by a
+           <close-session> operation, or killed by a <kill-session>
+           operation.";
+      }
+      uses common-counters {
+        description
+          "Global counters, accumulated from all sessions.
+           Zero based with following reset behaviour:
+             - re-initialization of NETCONF server
+             - when max value is reached";
+      }
+    }
+  }
+
+  rpc get-schema {
+    description
+      "This operation is used to retrieve a schema from the
+       NETCONF server.
+
+       Positive Response:
+         The NETCONF server returns the requested schema.
+
+       Negative Response:
+         If requested schema does not exist, the <error-tag> is
+         'invalid-value'.
+
+         If more than one schema matches the requested parameters, the
+         <error-tag> is 'operation-failed', and <error-app-tag> is
+         'data-not-unique'.";
+
+    input {
+      leaf identifier {
+        type string;
+        mandatory true;
+        description
+          "Identifier for the schema list entry.";
+      }
+      leaf version {
+        type string;
+        description
+          "Version of the schema requested.  If this parameter is not
+           present, and more than one version of the schema exists on
+           the server, a 'data-not-unique' error is returned, as
+           described above.";
+      }
+      leaf format {
+        type identityref {
+          base schema-format;
+        }
+        description
+           "The data modeling language of the schema.  If this
+            parameter is not present, and more than one formats of
+            the schema exists on the server, a 'data-not-unique' error
+            is returned, as described above.";
+      }
+    }
+    output {
+        anyxml data {
+          description
+            "Contains the schema content.";
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-partial-lock@2009-10-19.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-partial-lock@2009-10-19.yang
new file mode 100644
index 0000000..13658ac
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-partial-lock@2009-10-19.yang
@@ -0,0 +1,83 @@
+module ietf-netconf-partial-lock {
+
+  namespace urn:ietf:params:xml:ns:netconf:partial-lock:1.0;
+  prefix pl;
+
+  // needed to force data type of select string to be corect
+  import ietf-yang-types { prefix yang; }
+
+  organization "IETF Network Configuration (netconf) Working Group";
+
+  contact
+   "Netconf Working Group
+    Mailing list: netconf@ietf.org
+    Web: http://www.ietf.org/html.charters/netconf-charter.html
+
+    Balazs Lengyel
+    Ericsson
+    balazs.lengyel@ericsson.com";
+
+  description
+   "This YANG module defines the <partial-lock> and
+    <partial-unlock> operations.";
+
+  revision 2009-10-19 {
+    description
+     "Initial version, published as RFC 5717.";
+  }
+
+  typedef lock-id-type {
+    type uint32;
+    description
+     "A number identifying a specific partial-lock granted to a session.
+      It is allocated by the system, and SHOULD be used in the
+      partial-unlock operation.";
+  }
+
+  rpc partial-lock {
+    description
+     "A NETCONF operation that locks parts of the running datastore.";
+    input {
+      leaf-list select {
+        //type string;
+        type yang:xpath1.0;
+        min-elements 1;
+        description
+         "XPath expression that specifies the scope of the lock.
+          An Instance Identifier expression MUST be used unless the
+          :xpath capability is supported, in which case any XPath 1.0
+          expression is allowed.";
+      }
+    }
+    output {
+      leaf lock-id {
+        type lock-id-type;
+        mandatory true;
+        description
+         "Identifies the lock, if granted.  The lock-id SHOULD be
+          used in the partial-unlock rpc.";
+      }
+      leaf-list locked-node {
+        type instance-identifier;
+        min-elements 1;
+        description
+         "List of locked nodes in the running datastore";
+      }
+    }
+  }
+
+  rpc partial-unlock {
+    description
+     "A NETCONF operation that releases a previously acquired
+      partial-lock.";
+    input {
+      leaf lock-id {
+        type lock-id-type;
+        mandatory true;
+        description
+         "Identifies the lock to be released.  MUST be the value
+          received in the response to a partial-lock operation.";
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-with-defaults@2011-06-01.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-with-defaults@2011-06-01.yang
new file mode 100644
index 0000000..81d7f0b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-with-defaults@2011-06-01.yang
@@ -0,0 +1,140 @@
+module ietf-netconf-with-defaults {
+
+   namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults";
+
+   prefix ncwd;
+
+   import ietf-netconf { prefix nc; }
+
+   organization
+    "IETF NETCONF (Network Configuration Protocol) Working Group";
+
+   contact
+    "WG Web:   <http://tools.ietf.org/wg/netconf/>
+
+     WG List:  <netconf@ietf.org>
+
+     WG Chair: Bert Wijnen
+               <bertietf@bwijnen.net>
+
+     WG Chair: Mehmet Ersue
+               <mehmet.ersue@nsn.com>
+
+     Editor: Andy Bierman
+             <andy.bierman@brocade.com>
+
+     Editor: Balazs Lengyel
+             <balazs.lengyel@ericsson.com>";
+
+   description
+    "This module defines an extension to the NETCONF protocol
+     that allows the NETCONF client to control how default
+     values are handled by the server in particular NETCONF
+     operations.
+
+     Copyright (c) 2011 IETF Trust and the persons identified as
+     the document authors.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 6243; see
+     the RFC itself for full legal notices.";
+
+   revision 2011-06-01 {
+     description
+       "Initial version.";
+     reference
+      "RFC 6243: With-defaults Capability for NETCONF";
+   }
+
+   typedef with-defaults-mode {
+      description
+        "Possible modes to report default data.";
+      reference
+         "RFC 6243; Section 3.";
+      type enumeration {
+         enum report-all {
+             description
+               "All default data is reported.";
+             reference
+               "RFC 6243; Section 3.1";
+         }
+         enum report-all-tagged {
+             description
+               "All default data is reported.
+                Any nodes considered to be default data
+                will contain a 'default' XML attribute,
+                set to 'true' or '1'.";
+             reference
+               "RFC 6243; Section 3.4";
+         }
+         enum trim {
+             description
+               "Values are not reported if they contain the default.";
+             reference
+               "RFC 6243; Section 3.2";
+         }
+         enum explicit {
+             description
+               "Report values that contain the definition of
+                explicitly set data.";
+             reference
+               "RFC 6243; Section 3.3";
+         }
+     }
+   }
+
+   grouping with-defaults-parameters {
+     description
+       "Contains the <with-defaults> parameter for control
+        of defaults in NETCONF retrieval operations.";
+
+     leaf with-defaults {
+       description
+         "The explicit defaults processing mode requested.";
+       reference
+         "RFC 6243; Section 4.5.1";
+
+       type with-defaults-mode;
+     }
+   }
+
+   // extending the get-config operation
+   augment /nc:get-config/nc:input {
+       description
+         "Adds the <with-defaults> parameter to the
+          input of the NETCONF <get-config> operation.";
+       reference
+         "RFC 6243; Section 4.5.1";
+
+       uses with-defaults-parameters;
+   }
+
+   // extending the get operation
+   augment /nc:get/nc:input {
+       description
+         "Adds the <with-defaults> parameter to
+          the input of the NETCONF <get> operation.";
+       reference
+         "RFC 6243; Section 4.5.1";
+
+       uses with-defaults-parameters;
+   }
+
+   // extending the copy-config operation
+   augment /nc:copy-config/nc:input {
+       description
+         "Adds the <with-defaults> parameter to
+          the input of the NETCONF <copy-config> operation.";
+       reference
+         "RFC 6243; Section 4.5.1";
+
+       uses with-defaults-parameters;
+   }
+
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf@2011-06-01.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf@2011-06-01.yang
new file mode 100644
index 0000000..6449421
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf@2011-06-01.yang
@@ -0,0 +1,934 @@
+module ietf-netconf {
+
+  // the namespace for NETCONF XML definitions is unchanged
+  // from RFC 4741, which this document replaces
+  namespace "urn:ietf:params:xml:ns:netconf:base:1.0";
+
+  prefix nc;
+
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  import ietf-netconf-acm { prefix nacm; }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+
+  contact
+    "WG Web:   <http://tools.ietf.org/wg/netconf/>
+     WG List:  <netconf@ietf.org>
+
+     WG Chair: Bert Wijnen
+               <bertietf@bwijnen.net>
+
+     WG Chair: Mehmet Ersue
+               <mehmet.ersue@nsn.com>
+
+     Editor:   Martin Bjorklund
+               <mbj@tail-f.com>
+
+     Editor:   Juergen Schoenwaelder
+               <j.schoenwaelder@jacobs-university.de>
+
+     Editor:   Andy Bierman
+               <andy.bierman@brocade.com>";
+  description
+    "NETCONF Protocol Data Types and Protocol Operations.
+
+     Copyright (c) 2011 IETF Trust and the persons identified as
+     the document authors.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 6241; see
+     the RFC itself for full legal notices.";
+
+  revision 2011-06-01 {
+    description
+      "Initial revision;
+       2013-09-29: Updated to include NACM attributes, 
+       as specified in RFC 6536: sec 3.2.5 and 3.2.8";
+    reference
+      "RFC 6241: Network Configuration Protocol";
+  }
+
+  extension get-filter-element-attributes {
+    description
+      "If this extension is present within an 'anyxml'
+       statement named 'filter', which must be conceptually
+       defined within the RPC input section for the <get>
+       and <get-config> protocol operations, then the
+       following unqualified XML attribute is supported
+       within the <filter> element, within a <get> or
+       <get-config> protocol operation:
+
+         type : optional attribute with allowed
+                value strings 'subtree' and 'xpath'.
+                If missing, the default value is 'subtree'.
+
+       If the 'xpath' feature is supported, then the
+       following unqualified XML attribute is
+       also supported:
+
+         select: optional attribute containing a
+                 string representing an XPath expression.
+                 The 'type' attribute must be equal to 'xpath'
+                 if this attribute is present.";
+  }
+
+  // NETCONF capabilities defined as features
+  feature writable-running {
+    description
+      "NETCONF :writable-running capability;
+       If the server advertises the :writable-running
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.2";
+  }
+
+  feature candidate {
+    description
+      "NETCONF :candidate capability;
+       If the server advertises the :candidate
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.3";
+  }
+
+  feature confirmed-commit {
+    if-feature candidate;
+    description
+      "NETCONF :confirmed-commit:1.1 capability;
+       If the server advertises the :confirmed-commit:1.1
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+
+    reference "RFC 6241, Section 8.4";
+  }
+
+  feature rollback-on-error {
+    description
+      "NETCONF :rollback-on-error capability;
+       If the server advertises the :rollback-on-error
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.5";
+  }
+
+  feature validate {
+    description
+      "NETCONF :validate:1.1 capability;
+       If the server advertises the :validate:1.1
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.6";
+  }
+
+  feature startup {
+    description
+      "NETCONF :startup capability;
+       If the server advertises the :startup
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.7";
+  }
+
+  feature url {
+    description
+      "NETCONF :url capability;
+       If the server advertises the :url
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.8";
+  }
+
+  feature xpath {
+    description
+      "NETCONF :xpath capability;
+       If the server advertises the :xpath
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.9";
+  }
+
+  // NETCONF Simple Types
+
+  typedef session-id-type {
+    type uint32 {
+      range "1..max";
+    }
+    description
+      "NETCONF Session Id";
+  }
+
+  typedef session-id-or-zero-type {
+    type uint32;
+    description
+      "NETCONF Session Id or Zero to indicate none";
+  }
+  typedef error-tag-type {
+    type enumeration {
+       enum in-use {
+         description
+           "The request requires a resource that
+            already is in use.";
+       }
+       enum invalid-value {
+         description
+           "The request specifies an unacceptable value for one
+            or more parameters.";
+       }
+       enum too-big {
+         description
+           "The request or response (that would be generated) is
+            too large for the implementation to handle.";
+       }
+       enum missing-attribute {
+         description
+           "An expected attribute is missing.";
+       }
+       enum bad-attribute {
+         description
+           "An attribute value is not correct; e.g., wrong type,
+            out of range, pattern mismatch.";
+       }
+       enum unknown-attribute {
+         description
+           "An unexpected attribute is present.";
+       }
+       enum missing-element {
+         description
+           "An expected element is missing.";
+       }
+       enum bad-element {
+         description
+           "An element value is not correct; e.g., wrong type,
+            out of range, pattern mismatch.";
+       }
+       enum unknown-element {
+         description
+           "An unexpected element is present.";
+       }
+       enum unknown-namespace {
+         description
+           "An unexpected namespace is present.";
+       }
+       enum access-denied {
+         description
+           "Access to the requested protocol operation or
+            data model is denied because authorization failed.";
+       }
+       enum lock-denied {
+         description
+           "Access to the requested lock is denied because the
+            lock is currently held by another entity.";
+       }
+       enum resource-denied {
+         description
+           "Request could not be completed because of
+            insufficient resources.";
+       }
+       enum rollback-failed {
+         description
+           "Request to roll back some configuration change (via
+            rollback-on-error or <discard-changes> operations)
+            was not completed for some reason.";
+
+       }
+       enum data-exists {
+         description
+           "Request could not be completed because the relevant
+            data model content already exists.  For example,
+            a 'create' operation was attempted on data that
+            already exists.";
+       }
+       enum data-missing {
+         description
+           "Request could not be completed because the relevant
+            data model content does not exist.  For example,
+            a 'delete' operation was attempted on
+            data that does not exist.";
+       }
+       enum operation-not-supported {
+         description
+           "Request could not be completed because the requested
+            operation is not supported by this implementation.";
+       }
+       enum operation-failed {
+         description
+           "Request could not be completed because the requested
+            operation failed for some reason not covered by
+            any other error condition.";
+       }
+       enum partial-operation {
+         description
+           "This error-tag is obsolete, and SHOULD NOT be sent
+            by servers conforming to this document.";
+       }
+       enum malformed-message {
+         description
+           "A message could not be handled because it failed to
+            be parsed correctly.  For example, the message is not
+            well-formed XML or it uses an invalid character set.";
+       }
+     }
+     description "NETCONF Error Tag";
+     reference "RFC 6241, Appendix A";
+  }
+
+  typedef error-severity-type {
+    type enumeration {
+      enum error {
+        description "Error severity";
+      }
+      enum warning {
+        description "Warning severity";
+      }
+    }
+    description "NETCONF Error Severity";
+    reference "RFC 6241, Section 4.3";
+  }
+
+  typedef edit-operation-type {
+    type enumeration {
+      enum merge {
+        description
+          "The configuration data identified by the
+           element containing this attribute is merged
+           with the configuration at the corresponding
+           level in the configuration datastore identified
+           by the target parameter.";
+      }
+      enum replace {
+        description
+          "The configuration data identified by the element
+           containing this attribute replaces any related
+           configuration in the configuration datastore
+           identified by the target parameter.  If no such
+           configuration data exists in the configuration
+           datastore, it is created.  Unlike a
+           <copy-config> operation, which replaces the
+           entire target configuration, only the configuration
+           actually present in the config parameter is affected.";
+      }
+      enum create {
+        description
+          "The configuration data identified by the element
+           containing this attribute is added to the
+           configuration if and only if the configuration
+           data does not already exist in the configuration
+           datastore.  If the configuration data exists, an
+           <rpc-error> element is returned with an
+           <error-tag> value of 'data-exists'.";
+      }
+      enum delete {
+        description
+          "The configuration data identified by the element
+           containing this attribute is deleted from the
+           configuration if and only if the configuration
+           data currently exists in the configuration
+           datastore.  If the configuration data does not
+           exist, an <rpc-error> element is returned with
+           an <error-tag> value of 'data-missing'.";
+      }
+      enum remove {
+        description
+          "The configuration data identified by the element
+           containing this attribute is deleted from the
+           configuration if the configuration
+           data currently exists in the configuration
+           datastore.  If the configuration data does not
+           exist, the 'remove' operation is silently ignored
+           by the server.";
+      }
+    }
+    default "merge";
+    description "NETCONF 'operation' attribute values";
+    reference "RFC 6241, Section 7.2";
+  }
+
+  // NETCONF Standard Protocol Operations
+
+  rpc get-config {
+    description
+      "Retrieve all or part of a specified configuration.";
+
+    reference "RFC 6241, Section 7.1";
+
+    input {
+      container source {
+        description
+          "Particular configuration to retrieve.";
+
+        choice config-source {
+          mandatory true;
+          description
+            "The configuration to retrieve.";
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config source.";
+          }
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config source.";
+          }
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config source.
+               This is optional-to-implement on the server because
+               not all servers will support filtering for this
+               datastore.";
+          }
+        }
+      }
+
+      anyxml filter {
+        description
+          "Subtree or XPath filter to use.";
+        nc:get-filter-element-attributes;
+      }
+    }
+
+    output {
+      anyxml data {
+        description
+          "Copy of the source datastore subset that matched
+           the filter criteria (if any).  An empty data container
+           indicates that the request did not produce any results.";
+      }
+    }
+  }
+
+  rpc edit-config {
+    description
+      "The <edit-config> operation loads all or part of a specified
+       configuration to the specified target configuration.";
+
+    reference "RFC 6241, Section 7.2";
+
+    input {
+      container target {
+        description
+          "Particular configuration to edit.";
+
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target.";
+
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config target.";
+          }
+          leaf running {
+            if-feature writable-running;
+            type empty;
+            description
+              "The running configuration is the config source.";
+          }
+        }
+      }
+
+      leaf default-operation {
+        type enumeration {
+          enum merge {
+            description
+              "The default operation is merge.";
+          }
+          enum replace {
+            description
+              "The default operation is replace.";
+          }
+          enum none {
+            description
+              "There is no default operation.";
+          }
+        }
+        default "merge";
+        description
+          "The default operation to use.";
+      }
+
+      leaf test-option {
+        if-feature validate;
+        type enumeration {
+          enum test-then-set {
+            description
+              "The server will test and then set if no errors.";
+          }
+          enum set {
+            description
+              "The server will set without a test first.";
+          }
+
+          enum test-only {
+            description
+              "The server will only test and not set, even
+               if there are no errors.";
+          }
+        }
+        default "test-then-set";
+        description
+          "The test option to use.";
+      }
+
+      leaf error-option {
+        type enumeration {
+          enum stop-on-error {
+            description
+              "The server will stop on errors.";
+          }
+          enum continue-on-error {
+            description
+              "The server may continue on errors.";
+          }
+          enum rollback-on-error {
+            description
+              "The server will roll back on errors.
+               This value can only be used if the 'rollback-on-error'
+               feature is supported.";
+          }
+        }
+        default "stop-on-error";
+        description
+          "The error option to use.";
+      }
+
+      choice edit-content {
+        mandatory true;
+        description
+          "The content for the edit operation.";
+
+        anyxml config {
+          description
+            "Inline Config content.";
+        }
+        leaf url {
+          if-feature url;
+          type inet:uri;
+          description
+            "URL-based config content.";
+        }
+      }
+    }
+  }
+
+  rpc copy-config {
+    description
+      "Create or replace an entire configuration datastore with the
+       contents of another complete configuration datastore.";
+
+    reference "RFC 6241, Section 7.3";
+
+    input {
+      container target {
+        description
+          "Particular configuration to copy to.";
+
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target of the copy operation.";
+
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config target.";
+          }
+          leaf running {
+            if-feature writable-running;
+            type empty;
+            description
+              "The running configuration is the config target.
+               This is optional-to-implement on the server.";
+          }
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config target.";
+          }
+          leaf url {
+            if-feature url;
+            type inet:uri;
+            description
+              "The URL-based configuration is the config target.";
+          }
+        }
+      }
+
+      container source {
+        description
+          "Particular configuration to copy from.";
+
+        choice config-source {
+          mandatory true;
+          description
+            "The configuration source for the copy operation.";
+
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config source.";
+          }
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config source.";
+          }
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config source.";
+          }
+          leaf url {
+            if-feature url;
+            type inet:uri;
+            description
+              "The URL-based configuration is the config source.";
+          }
+          anyxml config {
+            description
+              "Inline Config content: <config> element.  Represents
+               an entire configuration datastore, not
+               a subset of the running datastore.";
+          }
+        }
+      }
+    }
+  }
+
+  rpc delete-config {
+    nacm:default-deny-all;
+    description
+      "Delete a configuration datastore.";
+
+    reference "RFC 6241, Section 7.4";
+
+    input {
+      container target {
+        description
+          "Particular configuration to delete.";
+
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target to delete.";
+
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config target.";
+          }
+          leaf url {
+            if-feature url;
+            type inet:uri;
+            description
+              "The URL-based configuration is the config target.";
+          }
+        }
+      }
+    }
+  }
+
+  rpc lock {
+    description
+      "The lock operation allows the client to lock the configuration
+       system of a device.";
+
+    reference "RFC 6241, Section 7.5";
+
+    input {
+      container target {
+        description
+          "Particular configuration to lock.";
+
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target to lock.";
+
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config target.";
+          }
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config target.";
+          }
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config target.";
+          }
+        }
+      }
+    }
+  }
+
+  rpc unlock {
+    description
+      "The unlock operation is used to release a configuration lock,
+       previously obtained with the 'lock' operation.";
+
+    reference "RFC 6241, Section 7.6";
+
+    input {
+      container target {
+        description
+          "Particular configuration to unlock.";
+
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target to unlock.";
+
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config target.";
+          }
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config target.";
+          }
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config target.";
+          }
+        }
+      }
+    }
+  }
+
+  rpc get {
+    description
+      "Retrieve running configuration and device state information.";
+
+    reference "RFC 6241, Section 7.7";
+
+    input {
+      anyxml filter {
+        description
+          "This parameter specifies the portion of the system
+           configuration and state data to retrieve.";
+        nc:get-filter-element-attributes;
+      }
+    }
+
+    output {
+      anyxml data {
+        description
+          "Copy of the running datastore subset and/or state
+           data that matched the filter criteria (if any).
+           An empty data container indicates that the request did not
+           produce any results.";
+      }
+    }
+  }
+
+  rpc close-session {
+    description
+      "Request graceful termination of a NETCONF session.";
+
+    reference "RFC 6241, Section 7.8";
+  }
+
+  rpc kill-session {
+    nacm:default-deny-all;
+    description
+      "Force the termination of a NETCONF session.";
+
+    reference "RFC 6241, Section 7.9";
+
+    input {
+      leaf session-id {
+        type session-id-type;
+        mandatory true;
+        description
+          "Particular session to kill.";
+      }
+    }
+  }
+
+  rpc commit {
+    if-feature candidate;
+
+    description
+      "Commit the candidate configuration as the device's new
+       current configuration.";
+
+    reference "RFC 6241, Section 8.3.4.1";
+
+    input {
+      leaf confirmed {
+        if-feature confirmed-commit;
+        type empty;
+        description
+          "Requests a confirmed commit.";
+        reference "RFC 6241, Section 8.3.4.1";
+      }
+
+      leaf confirm-timeout {
+        if-feature confirmed-commit;
+        type uint32 {
+          range "1..max";
+        }
+        units "seconds";
+        default "600";   // 10 minutes
+        description
+          "The timeout interval for a confirmed commit.";
+        reference "RFC 6241, Section 8.3.4.1";
+      }
+
+      leaf persist {
+        if-feature confirmed-commit;
+        type string;
+        description
+          "This parameter is used to make a confirmed commit
+           persistent.  A persistent confirmed commit is not aborted
+           if the NETCONF session terminates.  The only way to abort
+           a persistent confirmed commit is to let the timer expire,
+           or to use the <cancel-commit> operation.
+
+           The value of this parameter is a token that must be given
+           in the 'persist-id' parameter of <commit> or
+           <cancel-commit> operations in order to confirm or cancel
+           the persistent confirmed commit.
+
+           The token should be a random string.";
+        reference "RFC 6241, Section 8.3.4.1";
+      }
+
+      leaf persist-id {
+        if-feature confirmed-commit;
+        type string;
+        description
+          "This parameter is given in order to commit a persistent
+           confirmed commit.  The value must be equal to the value
+           given in the 'persist' parameter to the <commit> operation.
+           If it does not match, the operation fails with an
+          'invalid-value' error.";
+        reference "RFC 6241, Section 8.3.4.1";
+      }
+
+    }
+  }
+
+  rpc discard-changes {
+    if-feature candidate;
+
+    description
+      "Revert the candidate configuration to the current
+       running configuration.";
+    reference "RFC 6241, Section 8.3.4.2";
+  }
+
+  rpc cancel-commit {
+    if-feature confirmed-commit;
+    description
+      "This operation is used to cancel an ongoing confirmed commit.
+       If the confirmed commit is persistent, the parameter
+       'persist-id' must be given, and it must match the value of the
+       'persist' parameter.";
+    reference "RFC 6241, Section 8.4.4.1";
+
+    input {
+      leaf persist-id {
+        type string;
+        description
+          "This parameter is given in order to cancel a persistent
+           confirmed commit.  The value must be equal to the value
+           given in the 'persist' parameter to the <commit> operation.
+           If it does not match, the operation fails with an
+          'invalid-value' error.";
+      }
+    }
+  }
+
+  rpc validate {
+    if-feature validate;
+
+    description
+      "Validates the contents of the specified configuration.";
+
+    reference "RFC 6241, Section 8.6.4.1";
+
+    input {
+      container source {
+        description
+          "Particular configuration to validate.";
+
+        choice config-source {
+          mandatory true;
+          description
+            "The configuration source to validate.";
+
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config source.";
+          }
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config source.";
+          }
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config source.";
+          }
+          leaf url {
+            if-feature url;
+            type inet:uri;
+            description
+              "The URL-based configuration is the config source.";
+          }
+          anyxml config {
+            description
+              "Inline Config content: <config> element.  Represents
+               an entire configuration datastore, not
+               a subset of the running datastore.";
+          }
+        }
+      }
+    }
+  }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-ptp-dataset@2017-02-08.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-ptp-dataset@2017-02-08.yang
new file mode 100644
index 0000000..d899e56
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-ptp-dataset@2017-02-08.yang
@@ -0,0 +1,605 @@
+   module ietf-ptp-dataset{
+     namespace "urn:ietf:params:xml:ns:yang:ietf-ptp-dataset";
+     prefix "ptp-dataset";
+     organization "IETF TICTOC Working Group";
+     contact
+         "WG Web:   http://tools.ietf.org/wg/tictoc/
+          WG List:  <mailto:tictoc@ietf.org>
+          WG Chair: Karen O'Donoghue
+                    <mailto:odonoghue@isoc.org>
+          WG Chair: Yaakov Stein
+                    <mailto: Yaakov_s@rad.com>
+          Editor:   Yuanlong Jiang
+                    <mailto:jiangyuanlong@huawei.com>
+          Editor:   Rodney Cummings
+                    <mailto:rodney.cummings@ni.com>";
+     description
+       "This YANG module defines a data model for the configuration
+       of IEEE 1588-2008 clocks, and also for retrieval of the state
+       data of IEEE 1588-2008 clocks.";
+
+     revision "2017-02-08" {
+       description "Version 4.0";
+       reference "draft-ietf-tictoc-1588v2-yang";
+      }
+
+     typedef delay-mechanism-enumeration {
+       type enumeration {
+         enum E2E {
+           value 1;
+           description
+             "The port uses the delay request-response
+              mechanism.";
+         }
+         enum P2P {
+           value 2;
+           description
+             "The port uses the peer delay mechanism.";
+         }
+         enum DISABLED {
+           value 254;
+           description
+             "The port does not implement any delay
+              mechanism.";
+         }
+       }
+       description
+         "The propagation delay measuring option used by the
+         port. Values for this enumeration are specified
+         by the IEEE 1588 standard exclusively.";
+       reference
+         "IEEE Std 1588-2008: 8.2.5.4.4";
+     }
+
+     typedef port-state-enumeration {
+       type enumeration {
+         enum INITIALIZING {
+           value 1;
+           description
+             "The port is initializing its data sets, hardware, and
+             communication facilities.";
+         }
+         enum FAULTY {
+           value 2;
+           description
+             "The port is in the fault state.";
+         }
+         enum DISABLED {
+           value 3;
+           description
+             "The port is disabled, and is not communicating PTP
+             messages (other than possibly PTP management
+             messages).";
+         }
+         enum LISTENING {
+           value 4;
+           description
+             "The port is listening for an Announce message.";
+         }
+         enum PRE_MASTER {
+           value 5;
+           description
+             "The port is in the pre-master state.";
+         }
+         enum MASTER {
+           value 6;
+           description
+             "The port is behaving as a master port.";
+         }
+         enum PASSIVE {
+           value 7;
+           description
+             "The port is in the passive state.";
+         }
+         enum UNCALIBRATED {
+           value 8;
+           description
+             "A master port has been selected, but the port is still
+             in the uncalibrated state.";
+         }
+         enum SLAVE {
+           value 9;
+           description
+             "The port is synchronizing to the selected
+             master port.";
+         }
+       }
+       description
+         "The current state of the protocol engine associated
+         with the port.  Values for this enumeration are specified
+         by the IEEE 1588 standard exclusively.";
+       reference
+         "IEEE Std 1588-2008: 8.2.5.3.1, 9.2.5";
+     }
+
+     typedef time-interval-type {
+       type int64;
+       description
+         "Derived data type for time interval,
+         represented in units of nanoseconds and
+         multipled by 2^16";
+       reference
+         "IEEE Std 1588-2008: 5.3.2";
+     }
+
+     typedef clock-identity-type {
+       type binary {
+         length "8";
+       }
+       description
+         "Derived data type to identify a clock";
+       reference
+         "IEEE Std 1588-2008: 5.3.4";
+     }
+
+     grouping port-identity-grouping {
+       description
+         "Derived data type to identify a port, which contains
+         two members: clockIdentity and portNumber.";
+       reference
+         "IEEE Std 1588-2008: 5.3.5";
+
+       leaf clock-identity {
+         type clock-identity-type;
+         description
+           "Identity of the clock";
+       }
+
+       leaf port-number {
+         type uint16;
+         description
+           "Port number";
+       }
+     }
+
+     grouping clock-quality-grouping {
+       description
+         "Derived data type for quality of a clock, which contains
+         clockClass, clockAccuracy and offsetScaledLogVariance.";
+       reference
+         "IEEE Std 1588-2008: 5.3.7";
+
+       leaf clock-class {
+         type uint8;
+         default 248;
+         description
+           "The clockClass denotes the traceability of the time
+           or frequency distributed by the clock.";
+       }
+
+       leaf clock-accuracy {
+         type uint8;
+         description
+           "The clockAccuracy indicates the expected accuracy
+            of the clock.";
+       }
+
+       leaf offset-scaled-log-variance {
+         type uint16;
+         description
+           "The offsetScaledLogVariance provides an
+           estimate of the variations of the clock
+           from a linear timescale when it is not synchronized
+           to another clock using the protocol.";
+       }
+     }
+
+     grouping default-ds-entry {
+       description
+         "Collection of members of the default data set.";
+
+       leaf two-step-flag {
+         type boolean;
+         description
+               "When set, the clock is a two-step clock; otherwise,
+               the clock is a one-step clock.";
+       }
+
+       leaf clock-identity {
+         type clock-identity-type;
+         description
+           "The clockIdentity of the local clock";
+       }
+
+       leaf number-ports {
+         type uint16;
+         description
+           "The number of PTP ports on the device.";
+       }
+
+       container clock-quality {
+         description
+           "The clockQuality of the local clock.";
+
+         uses clock-quality-grouping;
+       }
+
+       leaf priority1 {
+         type uint8;
+         description
+           "The priority1 attribute of the local clock.";
+       }
+
+       leaf priority2{
+         type uint8;
+         description
+           "The priority2 attribute of the local clock. ";
+       }
+
+       leaf domain-number {
+         type uint8;
+         description
+                "The domain number of the current syntonization
+               domain.";
+       }
+
+       leaf slave-only {
+         type boolean;
+         description
+           "When set, the clock is a slave-only clock.";
+       }
+     }
+
+     grouping current-ds-entry {
+       description
+         "Collection of members of current data set.";
+
+       leaf steps-removed {
+         type uint16;
+         default 0;
+         description
+           "The number of communication paths traversed
+           between the local clock and the grandmaster clock.";
+       }
+       leaf offset-from-master {
+         type time-interval-type;
+         description
+           "The current value of the time difference between
+           a master and a slave clock as computed by the slave.";
+       }
+
+       leaf mean-path-delay {
+         type time-interval-type;
+         description
+           "The current value of the mean propagation time between
+           a master and a slave clock as computed by the slave.";
+
+       }
+     }
+
+     grouping parent-ds-entry {
+       description
+         "Collection of members of the parent data set.";
+
+       container parent-port-identity {
+         description
+           "The portIdentity of the port on the master";
+         uses port-identity-grouping;
+       }
+       leaf parent-stats {
+         type boolean;
+         default false;
+         description
+           "When set, the values of
+            observedParentOffsetScaledLogVariance and
+            observedParentClockPhaseChangeRate of parentDS
+            have been measured and are valid.";
+       }
+       leaf observed-parent-offset-scaled-log-variance {
+         type uint16;
+         default 0xFFFF;
+         description
+           "An estimate of the parent clock's PTP variance
+            as observed by the slave clock.";
+       }
+       leaf observed-parent-clock-phase-change-rate {
+         type int32;
+         description
+           "An estimate of the parent clock's phase change rate
+            as observed by the slave clock.";
+       }
+       leaf grandmaster-identity {
+         type binary{
+           length "8";
+         }
+
+         description
+          "The clockIdentity attribute of the grandmaster clock.";
+
+       }
+       container grandmaster-clock-quality {
+         description
+           "The clockQuality of the grandmaster clock.";
+         uses clock-quality-grouping;
+       }
+       leaf grandmaster-priority1 {
+         type uint8;
+         description
+           "The priority1 attribute of the grandmaster clock.";
+       }
+       leaf grandmaster-priority2 {
+         type uint8;
+         description
+           "The priority2 attribute of the grandmaster clock.";
+       }
+     }
+
+     grouping time-properties-ds-entry {
+       description
+         "Collection of members of the timeProperties data set.";
+       leaf current-utc-offset-valid {
+         type boolean;
+         description
+           "When set, the current UTC offset is valid.";
+       }
+       leaf current-utc-offset {
+         type int16;
+         description
+           "The offset between TAI and UTC when the epoch of the
+            PTP system is the PTP epoch, i.e., when ptp-timescale
+            is TRUE; otherwise, the value has no meaning.";
+       }
+       leaf leap59 {
+         type boolean;
+         description
+               "When set, the last minute of the current UTC day
+               contains 59 seconds.";
+       }
+       leaf leap61 {
+         type boolean;
+         description
+               "When set, the last minute of the current UTC day
+               contains 61 seconds.";
+       }
+       leaf time-traceable {
+         type boolean;
+         description
+           "When set, the timescale and the currentUtcOffset are
+               traceable to a primary reference.";
+       }
+       leaf frequency-traceable {
+         type boolean;
+         description
+           "When set, the frequency determining the timescale
+            is traceable to a primary reference.";
+       }
+       leaf ptp-timescale {
+         type boolean;
+         description
+           "When set, the clock timescale of the grandmaster
+                clock is PTP; otherwise, the timescale is ARB
+               (arbitrary).";
+       }
+       leaf time-source {
+         type uint8;
+         description
+           "The source of time used by the grandmaster clock.";
+
+       }
+     }
+
+     grouping port-ds-entry {
+       description
+         "Collection of members of the port data set.";
+
+       container port-identity {
+         description
+           "The portIdentity attribute of the local port.";
+         uses port-identity-grouping;
+       }
+
+       leaf port-state {
+         type port-state-enumeration;
+         default "INITIALIZING";
+         description
+           "Current state associated with the port.";
+       }
+
+       leaf log-min-delay-req-interval {
+         type int8;
+         description
+           "The base-two logarithm of the minDelayReqInterval
+            (the minimum permitted mean time interval between
+            successive Delay_Req messages).";
+       }
+
+       leaf peer-mean-path-delay {
+         type time-interval-type;
+         default 0;
+         description
+           "An estimate of the current one-way propagation delay
+            on the link when the delayMechanism is P2P; otherwise,
+            it is zero.";
+       }
+
+       leaf log-announce-interval {
+         type int8;
+         description
+           "The base-two logarithm of the mean
+            announceInterval (mean time interval between
+            successive Announce messages).";
+       }
+
+       leaf announce-receipt-timeout {
+         type uint8;
+         description
+           "The number of announceInterval that have to pass
+            without receipt of an Announce message before the
+            occurrence of the event ANNOUNCE_RECEIPT_TIMEOUT_
+            EXPIRES.";
+       }
+
+       leaf log-sync-interval {
+         type int8;
+         description
+           "The base-two logarithm of the mean SyncInterval
+            for multicast messages.  The rates for unicast
+            transmissions are negotiated separately on a per port
+            basis and are not constrained by this attribute.";
+       }
+
+       leaf delay-mechanism {
+         type delay-mechanism-enumeration;
+         description
+           "The propagation delay measuring option used by the
+            port in computing meanPathDelay.";
+       }
+
+       leaf log-min-pdelay-req-interval {
+         type int8;
+         description
+           "The base-two logarithm of the
+            minPdelayReqInterval (minimum permitted mean time
+            interval between successive Pdelay_Req messages).";
+
+       }
+
+       leaf version-number {
+         type uint8;
+         description
+           "The PTP version in use on the port.";
+       }
+     }
+
+     grouping transparent-clock-default-ds-entry {
+       description
+         "Collection of members of the transparentClockDefault data
+           set (default data set for a transparent clock).";
+
+       leaf clock-identity {
+         type clock-identity-type;
+         description
+           "The clockIdentity of the transparent clock.";
+       }
+       leaf number-ports {
+         type uint16;
+         description
+           "The number of PTP ports on the device.";
+       }
+       leaf delay-mechanism {
+         type delay-mechanism-enumeration;
+         description
+           "The propagation delay measuring option
+            used by the transparent clock.";
+       }
+       leaf primary-domain {
+         type uint8;
+         default 0;
+         description
+          "The domainNumber of the primary syntonization domain.";
+
+       }
+     }
+
+     grouping transparent-clock-port-ds-entry {
+       description
+         "Collection of members of the transparentClockPort data
+          set (port data set for a transparent clock).";
+
+       container port-identity {
+         description
+           "The portIdentity of the local port.";
+
+         uses port-identity-grouping;
+       }
+       leaf log-min-pdelay-req-interval {
+         type int8;
+         description
+           "The logarithm to the base 2 of the
+            minPdelayReqInterval (minimum permitted mean time
+            interval between successive Pdelay_Req messages).";
+       }
+       leaf faulty-flag {
+         type boolean;
+         default false;
+         description
+           "When set, the port is faulty.";
+       }
+       leaf peer-mean-path-delay {
+         type time-interval-type;
+         default 0;
+         description
+           "An estimate of the current one-way propagation delay
+            on the link when the delayMechanism is P2P; otherwise,
+            it is zero.";
+       }
+     }
+
+     list instance-list {
+
+       key "instance-number";
+
+       description
+         "List of one or more PTP datasets in the device, one for
+         each domain (see IEEE 1588-2008 subclause 6.3).
+         Each PTP dataset represents a distinct instance of
+         PTP implementation in the device (i.e. distinct
+         Ordinary Clock or Boundary Clock).";
+
+       leaf instance-number {
+         type uint16;
+         description
+           "The instance number of the current PTP instance";
+       }
+        container default-ds {
+          description
+            "The default data set of the clock.";
+          uses default-ds-entry;
+        }
+
+        container current-ds {
+          description
+            "The current data set of the clock.";
+          uses current-ds-entry;
+        }
+
+        container parent-ds {
+          description
+            "The parent data set of the clock.";
+          uses parent-ds-entry;
+        }
+
+        container time-properties-ds {
+          description
+            "The timeProperties data set of the clock.";
+          uses time-properties-ds-entry;
+        }
+
+        list port-ds-list {
+          key "port-number";
+          description
+            "List of port data sets of the clock.";
+          leaf port-number{
+            type leafref{
+              path "../port-identity/port-number";
+            }
+            description
+              "Refers to the portNumber memer of
+              portDS.portIdentity.";
+          }
+          uses port-ds-entry;
+        }
+     }
+
+     container transparent-clock-default-ds {
+       description
+         "The members of the transparentClockDefault Data Set";
+       uses transparent-clock-default-ds-entry;
+     }
+
+     list transparent-clock-port-ds-list {
+       key "port-number";
+       description
+         "List of transparentClockPort data sets
+          of the transparent clock.";
+       leaf port-number {
+         type leafref {
+           path "../port-identity/port-number";
+         }
+          description
+            "Refers to the portNumber memer
+             of transparentClockPortDS.portIdentity.";
+        }
+        uses transparent-clock-port-ds-entry;
+      }
+   }
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-restconf@2013-10-19.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-restconf@2013-10-19.yang
new file mode 100644
index 0000000..83bb378
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-restconf@2013-10-19.yang
@@ -0,0 +1,689 @@
+module ietf-restconf {
+  namespace "urn:ietf:params:xml:ns:yang:ietf-restconf";
+  prefix "restconf";
+
+  import ietf-yang-types { prefix yang; revision-date 2013-07-15; }
+  import ietf-inet-types { prefix inet; }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+
+  contact
+    "Editor:   Andy Bierman
+               <mailto:andy@yumaworks.com>
+
+     Editor:   Martin Bjorklund
+               <mailto:mbj@tail-f.com>
+
+     Editor:   Kent Watsen
+               <mailto:kwatsen@juniper.net>
+
+     Editor:   Rex Fernando
+               <mailto:rex@cisco.com>";
+
+  description
+    "This module contains conceptual YANG specifications
+     for the YANG Patch and error content that is used in
+     RESTCONF protocol messages. A conceptual container
+     representing the RESTCONF API nodes (media type 
+     application/yang.api).
+
+     Note that the YANG definitions within this module do not
+     represent configuration data of any kind.
+     The YANG grouping statements provide a normative syntax
+     for XML and JSON message encoding purposes.
+
+     Copyright (c) 2013 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC XXXX; see
+     the RFC itself for full legal notices.";
+
+  // RFC Ed.: replace XXXX with actual RFC number and remove this
+  // note.
+
+  // RFC Ed.: remove this note
+  // Note: extracted from draft-bierman-netconf-restconf-02.txt
+
+  // RFC Ed.: update the date below with the date of RFC publication
+  // and remove this note.
+  revision 2013-10-19 {
+    description
+      "Initial revision.";
+    reference
+      "RFC XXXX: RESTCONF Protocol.";
+  }
+
+  typedef data-resource-identifier {
+    type string {
+      length "1 .. max";
+    }
+    description
+      "Contains a Data Resource Identifier formatted string
+       to identify a specific data node. The data node that
+       uses this data type SHOULD define the document root
+       for data resource identifiers.  The default document
+       root is the target datastore conceptual root node.
+       Data resource identifiers are defined relative to
+       this document root.";
+    reference
+      "RFC XXXX: [sec. 5.3.1.1 ABNF For Data Resource Identifiers]";
+  }
+
+  // this typedef is TBD; not currently used
+  typedef datastore-identifier {
+    type union {
+      type enumeration {
+        enum candidate {
+          description
+            "Identifies the NETCONF shared candidate datastore.";
+          reference
+            "RFC 6241, section 8.3";
+        }
+        enum running {
+          description
+            "Identifies the NETCONF running datastore.";
+          reference
+            "RFC 6241, section 5.1";
+        }
+        enum startup {
+          description
+            "Identifies the NETCONF startup datastore.";
+          reference
+            "RFC 6241, section 8.7";
+        }
+      }
+      type string;
+    }
+    description
+      "Contains a string to identify a specific datastore.
+       The enumerated datastore identifier values are
+       reserved for standard datastore names.";
+  }
+
+  typedef revision-identifier {
+    type string {
+      pattern '\d{4}-\d{2}-\d{2}';
+    }
+    description
+      "Represents a specific date in YYYY-MM-DD format.
+       TBD: make pattern more precise to exclude leading zeros.";
+  }
+
+  grouping yang-patch {
+
+    description
+      "A grouping that contains a YANG container
+       representing the syntax and semantics of a
+       YANG Patch edit request message.";
+
+    container yang-patch {
+      description
+        "Represents a conceptual sequence of datastore edits,
+         called a patch. Each patch is given a client-assigned
+         patch identifier. Each edit MUST be applied
+         in ascending order, and all edits MUST be applied.
+         If any errors occur, then the target datastore MUST NOT
+         be changed by the patch operation.
+  
+         A patch MUST be validated by the server to be a 
+         well-formed message before any of the patch edits
+         are validated or attempted.
+  
+         YANG datastore validation (defined in RFC 6020, section
+         8.3.3) is performed after all edits have been
+         individually validated.
+  
+         It is possible for a datastore constraint violation to occur
+         due to any node in the datastore, including nodes not
+         included in the edit list. Any validation errors MUST
+         be reported in the reply message.";
+  
+      reference
+        "RFC 6020, section 8.3.";
+  
+      leaf patch-id {
+        type string;
+        description
+          "An arbitrary string provided by the client to identify
+           the entire patch.  This value SHOULD be present in any
+           audit logging records generated by the server for the
+           patch. Error messages returned by the server pertaining
+           to this patch will be identified by this patch-id value.";
+      }
+
+      leaf comment {
+        type string {
+          length "0 .. 1024";
+        }
+        description
+          "An arbitrary string provided by the client to describe
+           the entire patch.  This value SHOULD be present in any
+           audit logging records generated by the server for the
+           patch.";
+      }
+  
+      list edit {
+        key edit-id;
+        ordered-by user;
+
+        description
+          "Represents one edit within the YANG Patch
+           request message.";
+
+        leaf edit-id {
+          type string;
+          description
+            "Arbitrary string index for the edit.
+             Error messages returned by the server pertaining
+             to a specific edit will be identified by this
+             value.";
+        }
+  
+        leaf operation {
+          type enumeration {
+            enum create {
+              description
+                "The target data node is created using the
+                 supplied value, only if it does not already
+                 exist.";
+            }
+            enum delete {
+              description
+                "Delete the target node, only if the data resource
+                 currently exists, otherwise return an error.";
+            }
+            enum insert {
+              description
+                "Insert the supplied value into a user-ordered
+                 list or leaf-list entry. The target node must
+                 represent a new data resource.";
+            }
+            enum merge {
+              description
+                "The supplied value is merged with the target data
+                 node.";
+            }
+            enum move {
+              description
+                "Move the target node. Reorder a user-ordered
+                 list or leaf-list. The target node must represent
+                 an existing data resource.";
+            }
+            enum replace {
+              description
+                "The supplied value is used to replace the target
+                 data node.";
+            }
+            enum remove {
+              description
+                "Delete the target node if it currently exists.";
+            }
+          }
+          mandatory true;
+          description
+            "The datastore operation requested for the associated
+             edit entry";
+        }
+  
+        leaf target {
+          type data-resource-identifier;
+          mandatory true;
+          description
+            "Identifies the target data resource for the edit
+             operation.";
+        }
+  
+        leaf point {
+          when "(../operation = 'insert' or " +
+            "../operation = 'move') and " +
+            "(../where = 'before' or ../where = 'after')" {
+            description
+              "Point leaf only applies for insert or move
+               operations, before or after an existing entry.";
+          }
+          type data-resource-identifier;
+          description
+            "The absolute URL path for the data node that is being
+             used as the insertion point or move point for the
+             target of this edit entry.";
+        }
+  
+        leaf where {
+          when "../operation = 'insert' or ../operation = 'move'" {
+            description
+              "Where leaf only applies for insert or move
+               operations.";
+          }
+          type enumeration {
+            enum before {
+              description
+                "Insert or move a data node before the data resource
+                 identified by the 'point' parameter.";
+            }
+            enum after {
+              description
+                "Insert or move a data node after the data resource
+                 identified by the 'point' parameter.";
+            }
+            enum first {
+              description
+                "Insert or move a data node so it becomes ordered
+                 as the first entry.";
+            }
+            enum last {
+              description
+                "Insert or move a data node so it becomes ordered
+                 as the last entry.";
+            }
+  
+          }
+          default last;
+          description
+            "Identifies where a data resource will be inserted or
+             moved. YANG only allows these operations for
+             list and leaf-list data nodes that are ordered-by
+             user.";
+        }
+  
+        anyxml value {
+          when "(../operation = 'create' or " +
+            "../operation = 'merge' " +
+            "or ../operation = 'replace' or " +
+            "../operation = 'insert')" {
+            description
+              "Value node only used for create, merge,
+               replace, and insert operations";
+          }
+          description
+            "Value used for this edit operation.";
+        }
+      }
+    }
+
+  } // grouping yang-patch
+
+
+  grouping yang-patch-status {
+
+    description
+      "A grouping that contains a YANG container
+       representing the syntax and semantics of
+       YANG Patch status response message.";
+    
+    container yang-patch-status {
+      description
+        "A container representing the response message
+         sent by the server after a YANG Patch edit
+         request message has been processed.";
+
+      leaf patch-id {
+        type string;
+        description
+          "The patch-id value used in the request";
+      }
+
+      choice global-status {
+        description
+          "Report global errors or complete success.
+           If there is no case selected then errors
+           are reported in the edit-status container.";
+
+        case global-errors {
+          uses errors;
+          description
+            "This container will be present if global
+             errors unrelated to a specific edit occurred.";
+        }
+        leaf ok {
+          type empty;
+          description
+            "This leaf will be present if the request succeeded
+             and there are no errors reported in the edit-status
+             container.";
+        }
+      }
+
+      container edit-status {
+        description
+          "This container will be present if there are
+           edit-specific status responses to report.";
+      
+        list edit {
+          key edit-id;
+
+          description
+            "Represents a list of status responses,
+             corresponding to edits in the YANG Patch
+             request message.  If an edit entry was
+             skipped or not reached by the server,
+             then this list will not contain a corresponding
+             entry for that edit.";
+
+          leaf edit-id {
+            type string;
+             description
+               "Response status is for the edit list entry
+                with this edit-id value.";
+          }
+          choice edit-status-choice {
+            description
+              "A choice between different types of status
+               responses for each edit entry.";
+            leaf ok {
+              type empty;
+              description
+                "This edit entry was invoked without any
+                 errors detected by the server associated
+                 with this edit.";
+            }
+            leaf location {
+              type inet:uri;
+              description
+                "Contains the Location header value that would be
+                 returned if this edit causes a new resource to be
+                 created. If the edit identified by the same edit-id
+                 value was successfully invoked and a new resource
+                 was created, then this field will be returned
+                 instead of 'ok'.";
+            }
+            case errors {
+              uses errors;
+              description
+                "The server detected errors associated with the
+                  edit identified by the same edit-id value.";
+            }
+          }
+        }
+      }
+    }
+  }  // grouping yang-patch-status
+
+
+  grouping errors {
+
+    description
+      "A grouping that contains a YANG container
+       representing the syntax and semantics of a
+       YANG Patch errors report within a response message.";
+
+    container errors {
+      config false;  // needed so list error does not need a key
+      description
+        "Represents an error report returned by the server if
+         a request results in an error.";
+  
+      list error {
+        description
+          "An entry containing information about one
+           specific error that occurred while processing
+           a RESTCONF request.";
+        reference "RFC 6241, Section 4.3";
+  
+        leaf error-type { 
+          type enumeration {
+            enum transport {
+              description "The transport layer";
+            }
+            enum rpc {
+              description "The rpc or notification layer";
+            }
+            enum protocol {
+              description "The protocol operation layer";
+            }
+            enum application {
+              description "The server application layer";
+            }
+          }
+          mandatory true;
+          description
+            "The protocol layer where the error occurred.";
+        }
+  
+        leaf error-tag {
+          type string;
+          mandatory true;
+          description
+            "The enumerated error tag.";
+        }
+  
+        leaf error-app-tag { 
+          type string;
+          description
+            "The application-specific error tag.";
+        }
+  
+        leaf error-path { 
+          type data-resource-identifier;
+          description
+            "The target data resource identifier associated
+             with the error, if any.";
+        }
+  
+        leaf error-message { 
+          type string;
+          description
+            "A message describing the error.";
+        }
+  
+        container error-info { 
+           description
+             "A container allowing additional information
+              to be included in the error report.";
+           // arbitrary anyxml content here
+        }
+      }
+    }
+  } // grouping errors
+
+
+  grouping restconf {
+
+    description
+      "A grouping that contains a YANG container
+       representing the syntax and semantics of
+       the RESTCONF API resource.";
+
+    container restconf {
+      description
+        "Conceptual container representing the
+         application/yang.api resource type.";
+  
+      container config {
+        description
+          "Container representing the application/yang.datastore
+           resource type. Represents the conceptual root of the
+           unified configuration datastore containing YANG data
+           nodes. The child nodes of this container are
+           configuration data resources (application/yang.data)
+           defined as top-level YANG data nodes from the modules
+           advertised by the server in /restconf/modules.";
+      }
+
+      container operational {
+        description
+          "Container representing the application/yang.datastore
+           resource type. Represents the conceptual root of the
+           operational data supported by the server.  The child
+           nodes of this container are operational data resources 
+           (application/yang.data) defined as top-level
+           YANG data nodes from the modules advertised by
+           the server in /restconf/modules.";
+      }
+
+      container modules {
+        description
+          "Contains a list of module description entries.
+           These modules are currently loaded into the server.";
+  
+        list module {
+          key "name revision";
+          description
+            "Each entry represents one module currently
+             supported by the server.";
+
+          leaf name {
+            type yang:yang-identifier;
+            description "The YANG module name.";
+          }
+          leaf revision {
+            type union {
+              type revision-identifier;
+              type string { length 0; }
+            }
+            description
+              "The YANG module revision date. An empty string is
+               used if no revision statement is present in the
+               YANG module.";
+          }
+          leaf namespace {
+            type inet:uri;
+            mandatory true;
+            description
+              "The XML namespace identifier for this module.";
+          }
+          leaf-list feature {
+            type yang:yang-identifier;
+            description
+              "List of YANG feature names from this module that are
+               supported by the server.";
+          }
+          leaf-list deviation {
+            type yang:yang-identifier;
+            description
+              "List of YANG deviation module names used by this
+               server to modify the conformance of the module
+               associated with this entry.";
+          }
+        }
+      }
+
+      container operations {
+        description
+          "Container for all operation resources
+           (application/yang.operation),
+
+           Each resource is represented as an empty leaf with the
+           name of the RPC operation from the YANG rpc statement.
+  
+           E.g.;
+  
+              POST /restconf/operations/show-log-errors
+  
+              leaf show-log-errors {
+                type empty;
+              }
+          ";
+      }
+
+      container streams {
+        description
+          "Container representing the notification event streams
+           supported by the server.";
+         reference
+           "RFC 5277, Section 3.4, <streams> element.";
+
+        list stream {
+          key name;
+          description
+            "Each entry describes an event stream supported by
+             the server.";
+
+          leaf name {
+            type string;
+            description "The stream name";
+            reference "RFC 5277, Section 3.4, <name> element.";
+          }
+
+          leaf description {
+            type string;
+            description "Description of stream content";
+            reference
+              "RFC 5277, Section 3.4, <description> element.";
+          }
+
+          leaf replay-support {
+            type boolean;
+            description
+              "Indicates if replay buffer supported for this stream";
+            reference
+              "RFC 5277, Section 3.4, <replaySupport> element.";
+          }
+
+          leaf replay-log-creation-time {
+            type yang:date-and-time;
+            description
+              "Indicates the time the replay log for this stream
+               was created.";
+            reference
+              "RFC 5277, Section 3.4, <replayLogCreationTime>
+               element.";
+          }
+
+          leaf events {
+            type empty;
+            description
+              "Represents the entry point for establishing
+               notification delivery via server sent events.";
+          }
+        }
+      }
+
+      leaf version {
+        type enumeration {
+          enum "1.0" {
+            description 
+              "Version 1.0 of the RESTCONF protocol.";
+          }
+        }
+        config false;
+        description
+          "Contains the RESTCONF protocol version.";
+      }
+    }
+  }  // grouping restconf
+
+
+  grouping notification {
+    description
+      "Contains the notification message wrapper definition.";
+
+    container notification {
+      description
+        "RESTCONF notification message wrapper.";
+
+      leaf event-time {
+        type yang:date-and-time;
+        mandatory true;
+        description
+          "The time the event was generated by the
+           event source.";
+        reference
+          "RFC 5277, section 4, <eventTime> element.";
+      }
+
+      /* The YANG-specific notification container is encoded
+       * after the 'event-time' element.  The format
+       * corresponds to the notificationContent element
+       * in RFC 5277, section 4. For example:
+       *
+       *  module example-one {
+       *     ...
+       *     notification event1 { ... }
+       *
+       *  }
+       *
+       *  Encoded as element 'event1' in the namespace
+       *  for module 'example-one'.
+       */
+    }
+  }  // grouping notification
+
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-system@2014-08-06.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-system@2014-08-06.yang
new file mode 100644
index 0000000..de3096c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-system@2014-08-06.yang
@@ -0,0 +1,842 @@
+module ietf-system {
+  namespace "urn:ietf:params:xml:ns:yang:ietf-system";
+  prefix "sys";
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  import ietf-netconf-acm {
+    prefix nacm;
+  }
+
+  import iana-crypt-hash {
+    prefix ianach;
+  }
+
+  organization
+    "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+
+
+
+
+
+
+  contact
+    "WG Web:   <http://tools.ietf.org/wg/netmod/>
+     WG List:  <mailto:netmod@ietf.org>
+
+     WG Chair: Thomas Nadeau
+               <mailto:tnadeau@lucidvision.com>
+
+     WG Chair: Juergen Schoenwaelder
+               <mailto:j.schoenwaelder@jacobs-university.de>
+
+     Editor:   Andy Bierman
+               <mailto:andy@yumaworks.com>
+
+     Editor:   Martin Bjorklund
+               <mailto:mbj@tail-f.com>";
+
+  description
+    "This module contains a collection of YANG definitions for the
+     configuration and identification of some common system
+     properties within a device containing a NETCONF server.  This
+     includes data node definitions for system identification,
+     time-of-day management, user management, DNS resolver
+     configuration, and some protocol operations for system
+     management.
+
+     Copyright (c) 2014 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 7317; see
+     the RFC itself for full legal notices.";
+
+  revision 2014-08-06 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7317: A YANG Data Model for System Management";
+  }
+
+
+
+
+ /*
+  * Typedefs
+  */
+
+  typedef timezone-name {
+    type string;
+    description
+      "A time zone name as used by the Time Zone Database,
+       sometimes referred to as the 'Olson Database'.
+
+       The exact set of valid values is an implementation-specific
+       matter.  Client discovery of the exact set of time zone names
+       for a particular server is out of scope.";
+    reference
+      "RFC 6557: Procedures for Maintaining the Time Zone Database";
+   }
+
+  /*
+   * Features
+   */
+
+  feature radius {
+    description
+      "Indicates that the device can be configured as a RADIUS
+       client.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
+  }
+
+  feature authentication {
+    description
+      "Indicates that the device supports configuration of
+       user authentication.";
+  }
+
+  feature local-users {
+    if-feature authentication;
+    description
+      "Indicates that the device supports configuration of
+       local user authentication.";
+  }
+
+
+
+
+
+
+
+  feature radius-authentication {
+    if-feature radius;
+    if-feature authentication;
+    description
+      "Indicates that the device supports configuration of user
+       authentication over RADIUS.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)
+       RFC 5607: Remote Authentication Dial-In User Service (RADIUS)
+                 Authorization for Network Access Server (NAS)
+                 Management";
+  }
+
+  feature ntp {
+    description
+      "Indicates that the device can be configured to use one or
+       more NTP servers to set the system date and time.";
+  }
+
+  feature ntp-udp-port {
+    if-feature ntp;
+    description
+      "Indicates that the device supports the configuration of
+       the UDP port for NTP servers.
+
+       This is a 'feature', since many implementations do not support
+       any port other than the default port.";
+  }
+
+  feature timezone-name {
+    description
+      "Indicates that the local time zone on the device
+       can be configured to use the TZ database
+       to set the time zone and manage daylight saving time.";
+    reference
+      "RFC 6557: Procedures for Maintaining the Time Zone Database";
+  }
+
+  feature dns-udp-tcp-port {
+    description
+      "Indicates that the device supports the configuration of
+       the UDP and TCP port for DNS servers.
+
+       This is a 'feature', since many implementations do not support
+       any port other than the default port.";
+  }
+
+
+  /*
+   * Identities
+   */
+
+  identity authentication-method {
+    description
+      "Base identity for user authentication methods.";
+  }
+
+  identity radius {
+    base authentication-method;
+    description
+      "Indicates user authentication using RADIUS.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)
+       RFC 5607: Remote Authentication Dial-In User Service (RADIUS)
+                 Authorization for Network Access Server (NAS)
+                 Management";
+  }
+
+  identity local-users {
+    base authentication-method;
+    description
+      "Indicates password-based authentication of locally
+       configured users.";
+  }
+
+  identity radius-authentication-type {
+    description
+      "Base identity for RADIUS authentication types.";
+  }
+
+  identity radius-pap {
+    base radius-authentication-type;
+    description
+      "The device requests Password Authentication Protocol (PAP)
+       authentication from the RADIUS server.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
+  }
+
+
+
+
+
+
+
+
+  identity radius-chap {
+    base radius-authentication-type;
+    description
+      "The device requests Challenge Handshake Authentication
+       Protocol (CHAP) authentication from the RADIUS server.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
+  }
+
+  /*
+   * Configuration data nodes
+   */
+
+  container system {
+    description
+      "System group configuration.";
+
+    leaf contact {
+      type string;
+      description
+        "The administrator contact information for the system.
+
+         A server implementation MAY map this leaf to the sysContact
+         MIB object.  Such an implementation needs to use some
+         mechanism to handle the differences in size and characters
+         allowed between this leaf and sysContact.  The definition of
+         such a mechanism is outside the scope of this document.";
+      reference
+        "RFC 3418: Management Information Base (MIB) for the
+                   Simple Network Management Protocol (SNMP)
+                   SNMPv2-MIB.sysContact";
+    }
+    leaf hostname {
+      type inet:domain-name;
+     description
+       "The name of the host.  This name can be a single domain
+        label or the fully qualified domain name of the host.";
+    }
+    leaf location {
+      type string;
+      description
+        "The system location.
+
+         A server implementation MAY map this leaf to the sysLocation
+         MIB object.  Such an implementation needs to use some
+         mechanism to handle the differences in size and characters
+         allowed between this leaf and sysLocation.  The definition
+         of such a mechanism is outside the scope of this document.";
+      reference
+        "RFC 3418: Management Information Base (MIB) for the
+                   Simple Network Management Protocol (SNMP)
+                   SNMPv2-MIB.sysLocation";
+    }
+
+    container clock {
+      description
+        "Configuration of the system date and time properties.";
+
+      choice timezone {
+        description
+          "The system time zone information.";
+
+        case timezone-name {
+          if-feature timezone-name;
+          leaf timezone-name {
+            type timezone-name;
+            description
+              "The TZ database name to use for the system, such
+               as 'Europe/Stockholm'.";
+          }
+        }
+        case timezone-utc-offset {
+          leaf timezone-utc-offset {
+            type int16 {
+              range "-1500 .. 1500";
+            }
+            units "minutes";
+            description
+              "The number of minutes to add to UTC time to
+               identify the time zone for this system.  For example,
+               'UTC - 8:00 hours' would be represented as '-480'.
+               Note that automatic daylight saving time adjustment
+               is not provided if this object is used.";
+          }
+        }
+      }
+    }
+
+    container ntp {
+      if-feature ntp;
+      presence
+        "Enables the NTP client unless the 'enabled' leaf
+         (which defaults to 'true') is set to 'false'";
+      description
+        "Configuration of the NTP client.";
+
+      leaf enabled {
+        type boolean;
+        default true;
+        description
+          "Indicates that the system should attempt to
+           synchronize the system clock with an NTP server
+           from the 'ntp/server' list.";
+      }
+      list server {
+        key name;
+        description
+          "List of NTP servers to use for system clock
+           synchronization.  If '/system/ntp/enabled'
+           is 'true', then the system will attempt to
+           contact and utilize the specified NTP servers.";
+
+        leaf name {
+          type string;
+          description
+            "An arbitrary name for the NTP server.";
+        }
+        choice transport {
+          mandatory true;
+          description
+            "The transport-protocol-specific parameters for this
+             server.";
+
+          case udp {
+            container udp {
+              description
+                "Contains UDP-specific configuration parameters
+                 for NTP.";
+              leaf address {
+                type inet:host;
+                mandatory true;
+                description
+                  "The address of the NTP server.";
+              }
+              leaf port {
+                if-feature ntp-udp-port;
+                type inet:port-number;
+                default 123;
+                description
+                  "The port number of the NTP server.";
+              }
+            }
+          }
+        }
+        leaf association-type {
+          type enumeration {
+            enum server {
+              description
+                "Use client association mode.  This device
+                 will not provide synchronization to the
+                 configured NTP server.";
+            }
+            enum peer {
+              description
+                "Use symmetric active association mode.
+                 This device may provide synchronization
+                 to the configured NTP server.";
+            }
+            enum pool {
+              description
+                "Use client association mode with one or
+                 more of the NTP servers found by DNS
+                 resolution of the domain name given by
+                 the 'address' leaf.  This device will not
+                 provide synchronization to the servers.";
+            }
+          }
+          default server;
+          description
+            "The desired association type for this NTP server.";
+        }
+        leaf iburst {
+          type boolean;
+          default false;
+          description
+            "Indicates whether this server should enable burst
+             synchronization or not.";
+        }
+        leaf prefer {
+          type boolean;
+          default false;
+          description
+            "Indicates whether this server should be preferred
+             or not.";
+        }
+      }
+    }
+
+    container dns-resolver {
+      description
+        "Configuration of the DNS resolver.";
+
+      leaf-list search {
+        type inet:domain-name;
+        ordered-by user;
+        description
+          "An ordered list of domains to search when resolving
+           a host name.";
+      }
+      list server {
+        key name;
+        ordered-by user;
+        description
+          "List of the DNS servers that the resolver should query.
+
+           When the resolver is invoked by a calling application, it
+           sends the query to the first name server in this list.  If
+           no response has been received within 'timeout' seconds,
+           the resolver continues with the next server in the list.
+           If no response is received from any server, the resolver
+           continues with the first server again.  When the resolver
+           has traversed the list 'attempts' times without receiving
+           any response, it gives up and returns an error to the
+           calling application.
+
+           Implementations MAY limit the number of entries in this
+           list.";
+
+        leaf name {
+          type string;
+          description
+            "An arbitrary name for the DNS server.";
+        }
+        choice transport {
+          mandatory true;
+          description
+            "The transport-protocol-specific parameters for this
+             server.";
+
+          case udp-and-tcp {
+            container udp-and-tcp {
+              description
+                "Contains UDP- and TCP-specific configuration
+                 parameters for DNS.";
+              reference
+                "RFC 1035: Domain Names - Implementation and
+                           Specification
+                 RFC 5966: DNS Transport over TCP - Implementation
+                           Requirements";
+
+              leaf address {
+                type inet:ip-address;
+                mandatory true;
+                description
+                  "The address of the DNS server.";
+              }
+              leaf port {
+                if-feature dns-udp-tcp-port;
+                type inet:port-number;
+                default 53;
+                description
+                  "The UDP and TCP port number of the DNS server.";
+              }
+            }
+          }
+        }
+      }
+      container options {
+        description
+          "Resolver options.  The set of available options has been
+           limited to those that are generally available across
+           different resolver implementations and generally useful.";
+        leaf timeout {
+          type uint8 {
+            range "1..max";
+          }
+          units "seconds";
+          default "5";
+          description
+            "The amount of time the resolver will wait for a
+             response from each remote name server before
+             retrying the query via a different name server.";
+        }
+        leaf attempts {
+          type uint8 {
+            range "1..max";
+          }
+          default "2";
+          description
+            "The number of times the resolver will send a query to
+             all of its name servers before giving up and returning
+             an error to the calling application.";
+        }
+      }
+    }
+
+
+
+    container radius {
+      if-feature radius;
+
+      description
+        "Configuration of the RADIUS client.";
+
+      list server {
+        key name;
+        ordered-by user;
+        description
+          "List of RADIUS servers used by the device.
+
+           When the RADIUS client is invoked by a calling
+           application, it sends the query to the first server in
+           this list.  If no response has been received within
+           'timeout' seconds, the client continues with the next
+           server in the list.  If no response is received from any
+           server, the client continues with the first server again.
+           When the client has traversed the list 'attempts' times
+           without receiving any response, it gives up and returns an
+           error to the calling application.";
+
+        leaf name {
+          type string;
+          description
+            "An arbitrary name for the RADIUS server.";
+        }
+        choice transport {
+          mandatory true;
+          description
+            "The transport-protocol-specific parameters for this
+             server.";
+
+          case udp {
+            container udp {
+              description
+                "Contains UDP-specific configuration parameters
+                 for RADIUS.";
+              leaf address {
+                type inet:host;
+                mandatory true;
+                description
+                  "The address of the RADIUS server.";
+              }
+
+
+
+
+              leaf authentication-port {
+                type inet:port-number;
+                default "1812";
+                description
+                  "The port number of the RADIUS server.";
+              }
+              leaf shared-secret {
+                type string;
+                mandatory true;
+                nacm:default-deny-all;
+                description
+                  "The shared secret, which is known to both the
+                   RADIUS client and server.";
+                reference
+                  "RFC 2865: Remote Authentication Dial In User
+                             Service (RADIUS)";
+              }
+            }
+          }
+        }
+        leaf authentication-type {
+          type identityref {
+            base radius-authentication-type;
+          }
+          default radius-pap;
+          description
+            "The authentication type requested from the RADIUS
+             server.";
+        }
+      }
+      container options {
+        description
+          "RADIUS client options.";
+
+        leaf timeout {
+          type uint8 {
+            range "1..max";
+          }
+          units "seconds";
+          default "5";
+          description
+            "The number of seconds the device will wait for a
+             response from each RADIUS server before trying with a
+             different server.";
+        }
+
+
+
+        leaf attempts {
+          type uint8 {
+            range "1..max";
+          }
+          default "2";
+          description
+            "The number of times the device will send a query to
+             all of its RADIUS servers before giving up.";
+        }
+      }
+    }
+
+    container authentication {
+      nacm:default-deny-write;
+      if-feature authentication;
+
+       description
+         "The authentication configuration subtree.";
+
+       leaf-list user-authentication-order {
+         type identityref {
+           base authentication-method;
+         }
+         must '(. != "sys:radius" or ../../radius/server)' {
+           error-message
+             "When 'radius' is used, a RADIUS server"
+           + " must be configured.";
+           description
+             "When 'radius' is used as an authentication method,
+              a RADIUS server must be configured.";
+         }
+         ordered-by user;
+
+         description
+           "When the device authenticates a user with a password,
+            it tries the authentication methods in this leaf-list in
+            order.  If authentication with one method fails, the next
+            method is used.  If no method succeeds, the user is
+            denied access.
+
+            An empty user-authentication-order leaf-list still allows
+            authentication of users using mechanisms that do not
+            involve a password.
+
+            If the 'radius-authentication' feature is advertised by
+            the NETCONF server, the 'radius' identity can be added to
+            this list.
+
+            If the 'local-users' feature is advertised by the
+            NETCONF server, the 'local-users' identity can be
+            added to this list.";
+       }
+
+       list user {
+         if-feature local-users;
+         key name;
+         description
+           "The list of local users configured on this device.";
+
+         leaf name {
+           type string;
+           description
+            "The user name string identifying this entry.";
+         }
+         leaf password {
+           type ianach:crypt-hash;
+           description
+             "The password for this entry.";
+         }
+         list authorized-key {
+           key name;
+           description
+             "A list of public SSH keys for this user.  These keys
+              are allowed for SSH authentication, as described in
+              RFC 4253.";
+           reference
+             "RFC 4253: The Secure Shell (SSH) Transport Layer
+                        Protocol";
+
+           leaf name {
+             type string;
+             description
+               "An arbitrary name for the SSH key.";
+           }
+
+
+
+
+
+
+
+
+
+
+
+
+           leaf algorithm {
+             type string;
+             mandatory true;
+             description
+               "The public key algorithm name for this SSH key.
+
+                Valid values are the values in the IANA 'Secure Shell
+                (SSH) Protocol Parameters' registry, Public Key
+                Algorithm Names.";
+             reference
+               "IANA 'Secure Shell (SSH) Protocol Parameters'
+                registry, Public Key Algorithm Names";
+           }
+           leaf key-data {
+             type binary;
+             mandatory true;
+             description
+               "The binary public key data for this SSH key, as
+                specified by RFC 4253, Section 6.6, i.e.:
+
+                  string    certificate or public key format
+                            identifier
+                  byte[n]   key/certificate data.";
+             reference
+               "RFC 4253: The Secure Shell (SSH) Transport Layer
+                          Protocol";
+           }
+         }
+       }
+     }
+  }
+
+  /*
+   * Operational state data nodes
+   */
+
+  container system-state {
+    config false;
+    description
+      "System group operational state.";
+
+    container platform {
+      description
+        "Contains vendor-specific information for
+         identifying the system platform and operating system.";
+      reference
+        "IEEE Std 1003.1-2008 - sys/utsname.h";
+
+      leaf os-name {
+        type string;
+        description
+          "The name of the operating system in use -
+           for example, 'Linux'.";
+        reference
+          "IEEE Std 1003.1-2008 - utsname.sysname";
+      }
+      leaf os-release {
+        type string;
+        description
+          "The current release level of the operating
+           system in use.  This string MAY indicate
+           the OS source code revision.";
+        reference
+          "IEEE Std 1003.1-2008 - utsname.release";
+      }
+      leaf os-version {
+        type string;
+        description
+          "The current version level of the operating
+           system in use.  This string MAY indicate
+           the specific OS build date and target variant
+           information.";
+        reference
+          "IEEE Std 1003.1-2008 - utsname.version";
+      }
+      leaf machine {
+        type string;
+        description
+          "A vendor-specific identifier string representing
+           the hardware in use.";
+        reference
+          "IEEE Std 1003.1-2008 - utsname.machine";
+      }
+    }
+
+    container clock {
+      description
+        "Monitoring of the system date and time properties.";
+
+      leaf current-datetime {
+        type yang:date-and-time;
+        description
+          "The current system date and time.";
+      }
+
+
+      leaf boot-datetime {
+        type yang:date-and-time;
+        description
+          "The system date and time when the system last restarted.";
+      }
+    }
+  }
+
+  rpc set-current-datetime {
+    nacm:default-deny-all;
+    description
+      "Set the /system-state/clock/current-datetime leaf
+       to the specified value.
+
+       If the system is using NTP (i.e., /system/ntp/enabled
+       is set to 'true'), then this operation will fail with
+       error-tag 'operation-failed' and error-app-tag value of
+       'ntp-active'.";
+    input {
+      leaf current-datetime {
+        type yang:date-and-time;
+        mandatory true;
+        description
+          "The current system date and time.";
+      }
+    }
+  }
+
+  rpc system-restart {
+    nacm:default-deny-all;
+    description
+      "Request that the entire system be restarted immediately.
+       A server SHOULD send an rpc reply to the client before
+       restarting the system.";
+  }
+
+  rpc system-shutdown {
+    nacm:default-deny-all;
+    description
+      "Request that the entire system be shut down immediately.
+       A server SHOULD send an rpc reply to the client before
+       shutting down the system.";
+  }
+
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-yang-library@2016-04-09.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-yang-library@2016-04-09.yang
new file mode 100644
index 0000000..31fc9ee
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-yang-library@2016-04-09.yang
@@ -0,0 +1,263 @@
+module ietf-yang-library {
+    namespace "urn:ietf:params:xml:ns:yang:ietf-yang-library";
+    prefix "yanglib";
+
+    import ietf-yang-types {
+      prefix yang;
+    }
+    import ietf-inet-types {
+      prefix inet;
+    }
+
+    organization
+      "IETF NETCONF (Network Configuration) Working Group";
+
+    contact
+      "WG Web:   <http://tools.ietf.org/wg/netconf/>
+       WG List:  <mailto:netconf@ietf.org>
+
+       WG Chair: Mehmet Ersue
+                 <mailto:mehmet.ersue@nsn.com>
+
+       WG Chair: Mahesh Jethanandani
+                 <mailto:mjethanandani@gmail.com>
+
+       Editor:   Andy Bierman
+                 <mailto:andy@yumaworks.com>
+
+       Editor:   Martin Bjorklund
+                 <mailto:mbj@tail-f.com>
+
+       Editor:   Kent Watsen
+                 <mailto:kwatsen@juniper.net>";
+
+    description
+      "This module contains monitoring information about the YANG
+       modules and submodules that are used within a YANG-based
+       server.
+
+       Copyright (c) 2016 IETF Trust and the persons identified as
+       authors of the code.  All rights reserved.
+
+       Redistribution and use in source and binary forms, with or
+       without modification, is permitted pursuant to, and subject
+       to the license terms contained in, the Simplified BSD License
+       set forth in Section 4.c of the IETF Trust's Legal Provisions
+       Relating to IETF Documents
+       (http://trustee.ietf.org/license-info).
+
+       This version of this YANG module is part of RFC XXXX; see
+       the RFC itself for full legal notices.";
+
+    // RFC Ed.: replace XXXX with actual RFC number and remove this
+    // note.
+
+    // RFC Ed.: remove this note
+    // Note: extracted from draft-ietf-netconf-yang-library-06.txt
+
+    // RFC Ed.: update the date below with the date of RFC publication
+    // and remove this note.
+    revision 2016-04-09 {
+      description
+        "Initial revision.";
+      reference
+        "RFC XXXX: YANG Module Library.";
+    }
+
+    /*
+     * Typedefs
+     */
+
+    // FIXME inline this union after https://bugs.opendaylight.org/show_bug.cgi?id=5826 is fixed
+    typedef optional-revision {
+      type union {
+        type revision-identifier;
+        type string { length 0; }
+      }
+      description
+        "The YANG module or submodule revision date.
+         A zero-length string is used if no revision statement
+         is present in the YANG module or submodule.";
+    }
+
+    typedef revision-identifier {
+      type string {
+        pattern '\d{4}-\d{2}-\d{2}';
+      }
+      description
+        "Represents a specific date in YYYY-MM-DD format.";
+    }
+
+    /*
+     * Groupings
+     */
+
+    grouping module-list {
+      description
+        "The module data structure is represented as a grouping
+         so it can be reused in configuration or another monitoring
+         data structure.";
+
+      grouping common-leafs {
+        description
+          "Common parameters for YANG modules and submodules.";
+
+        leaf name {
+          type yang:yang-identifier;
+          description
+            "The YANG module or submodule name.";
+        }
+        leaf revision {
+          type optional-revision;
+        }
+      }
+
+      grouping schema-leaf {
+        description
+          "Common schema leaf parameter for modules and submodules.";
+
+        leaf schema {
+          type inet:uri;
+          description
+            "Contains a URL that represents the YANG schema
+             resource for this module or submodule.
+
+             This leaf will only be present if there is a URL
+             available for retrieval of the schema for this entry.";
+        }
+      }
+
+      list module {
+        key "name revision";
+        description
+          "Each entry represents one revision of one module
+           currently supported by the server.";
+
+        uses common-leafs;
+        uses schema-leaf;
+
+        leaf namespace {
+          type inet:uri;
+          mandatory true;
+          description
+            "The XML namespace identifier for this module.";
+        }
+        leaf-list feature {
+          type yang:yang-identifier;
+          description
+            "List of YANG feature names from this module that are
+             supported by the server, regardless whether they are
+             defined in the module or any included submodule.";
+        }
+        list deviation {
+          key "name revision";
+          description
+            "List of YANG deviation module names and revisions
+             used by this server to modify the conformance of
+             the module associated with this entry.  Note that
+             the same module can be used for deviations for
+             multiple modules, so the same entry MAY appear
+             within multiple 'module' entries.
+
+             The deviation module MUST be present in the 'module'
+             list, with the same name and revision values.
+             The 'conformance-type' value will be 'implement' for
+             the deviation module.";
+          uses common-leafs;
+        }
+        leaf conformance-type {
+          type enumeration {
+            enum implement {
+              description
+                "Indicates that the server implements one or more
+                 protocol-accessible objects defined in the YANG module
+                 identified in this entry.  This includes deviation
+                 statements defined in the module.
+
+                 For YANG version 1.1 modules, there is at most one
+                 module entry with conformance type 'implement' for a
+                 particular module name, since YANG 1.1 requires that
+                 at most one revision of a module is implemented.
+
+                 For YANG version 1 modules, there SHOULD NOT be more
+                 than one module entry for a particular module name.";
+            }
+            enum import {
+              description
+                "Indicates that the server imports reusable definitions
+                 from the specified revision of the module, but does
+                 not implement any protocol accessible objects from
+                 this revision.
+
+                 Multiple module entries for the same module name MAY
+                 exist. This can occur if multiple modules import the
+                 same module, but specify different revision-dates in
+                 the import statements.";
+            }
+          }
+          mandatory true;
+          description
+            "Indicates the type of conformance the server is claiming
+             for the YANG module identified by this entry.";
+        }
+        container submodules {
+          description
+            "Contains information about all the submodules used
+             by the parent module entry";
+
+          list submodule {
+            key "name revision";
+            description
+              "Each entry represents one submodule within the
+               parent module.";
+            uses common-leafs;
+            uses schema-leaf;
+          }
+        }
+      }
+    }
+
+    /*
+     * Operational state data nodes
+     */
+
+    container modules-state {
+      config false;
+      description
+        "Contains YANG module monitoring information.";
+
+      leaf module-set-id {
+        type string;
+        mandatory true;
+        description
+          "Contains a server-specific identifier representing
+           the current set of modules and submodules.  The
+           server MUST change the value of this leaf if the
+           information represented by the 'module' list instances
+           has changed.";
+      }
+
+      uses module-list;
+    }
+
+    /*
+     * Notifications
+     */
+
+    notification yang-library-change {
+      description
+       "Generated when the set of modules and submodules supported
+        by the server has changed.";
+      leaf module-set-id {
+        type leafref {
+          path "/yanglib:modules-state/yanglib:module-set-id";
+        }
+        mandatory true;
+        description
+          "Contains the module-set-id value representing the
+           set of modules and submodules supported at the server at
+           the time the notification is generated.";
+      }
+    }
+
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-yang-types@2013-07-15.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-yang-types@2013-07-15.yang
new file mode 100644
index 0000000..bdff18c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-yang-types@2013-07-15.yang
@@ -0,0 +1,467 @@
+module ietf-yang-types {
+
+     namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
+     prefix "yang";
+
+     organization
+      "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+     contact
+      "WG Web:   <http://tools.ietf.org/wg/netmod/>
+       WG List:  <mailto:netmod@ietf.org>
+       WG Chair: David Kessens
+                 <mailto:david.kessens@nsn.com>
+
+       WG Chair: Juergen Schoenwaelder
+                 <mailto:j.schoenwaelder@jacobs-university.de>
+
+       Editor:   Juergen Schoenwaelder
+                 <mailto:j.schoenwaelder@jacobs-university.de>";
+
+     description
+      "This module contains a collection of generally useful derived
+       YANG data types.
+
+       Copyright (c) 2013 IETF Trust and the persons identified as
+       authors of the code.  All rights reserved.
+
+       Redistribution and use in source and binary forms, with or
+       without modification, is permitted pursuant to, and subject
+       to the license terms contained in, the Simplified BSD License
+       set forth in Section 4.c of the IETF Trust's Legal Provisions
+       Relating to IETF Documents
+       (http://trustee.ietf.org/license-info).
+
+       This version of this YANG module is part of RFC 6991; see
+       the RFC itself for full legal notices.";
+
+     revision 2013-07-15 {
+       description
+        "This revision adds the following new data types:
+         - yang-identifier
+         - hex-string
+         - uuid
+         - dotted-quad";
+       reference
+        "RFC 6991: Common YANG Data Types";
+     }
+
+     revision 2010-09-24 {
+       description
+        "Initial revision.";
+       reference
+        "RFC 6021: Common YANG Data Types";
+     }
+
+     /*** collection of counter and gauge types ***/
+
+     typedef counter32 {
+       type uint32;
+       description
+        "The counter32 type represents a non-negative integer
+         that monotonically increases until it reaches a
+         maximum value of 2^32-1 (4294967295 decimal), when it
+         wraps around and starts increasing again from zero.
+
+         Counters have no defined 'initial' value, and thus, a
+         single value of a counter has (in general) no information
+         content.  Discontinuities in the monotonically increasing
+         value normally occur at re-initialization of the
+         management system, and at other times as specified in the
+         description of a schema node using this type.  If such
+         other times can occur, for example, the creation of
+         a schema node of type counter32 at times other than
+         re-initialization, then a corresponding schema node
+         should be defined, with an appropriate type, to indicate
+         the last discontinuity.
+
+         The counter32 type should not be used for configuration
+         schema nodes.  A default statement SHOULD NOT be used in
+         combination with the type counter32.
+
+         In the value set and its semantics, this type is equivalent
+         to the Counter32 type of the SMIv2.";
+       reference
+        "RFC 2578: Structure of Management Information Version 2
+                   (SMIv2)";
+     }
+
+     typedef zero-based-counter32 {
+       type yang:counter32;
+       default "0";
+       description
+        "The zero-based-counter32 type represents a counter32
+         that has the defined 'initial' value zero.
+
+         A schema node of this type will be set to zero (0) on creation
+         and will thereafter increase monotonically until it reaches
+         a maximum value of 2^32-1 (4294967295 decimal), when it
+         wraps around and starts increasing again from zero.
+
+         Provided that an application discovers a new schema node
+         of this type within the minimum time to wrap, it can use the
+         'initial' value as a delta.  It is important for a management
+         station to be aware of this minimum time and the actual time
+         between polls, and to discard data if the actual time is too
+         long or there is no defined minimum time.
+        In the value set and its semantics, this type is equivalent
+         to the ZeroBasedCounter32 textual convention of the SMIv2.";
+       reference
+         "RFC 4502: Remote Network Monitoring Management Information
+                    Base Version 2";
+     }
+
+     typedef counter64 {
+       type uint64;
+       description
+        "The counter64 type represents a non-negative integer
+         that monotonically increases until it reaches a
+         maximum value of 2^64-1 (18446744073709551615 decimal),
+         when it wraps around and starts increasing again from zero.
+
+         Counters have no defined 'initial' value, and thus, a
+         single value of a counter has (in general) no information
+         content.  Discontinuities in the monotonically increasing
+         value normally occur at re-initialization of the
+         management system, and at other times as specified in the
+         description of a schema node using this type.  If such
+         other times can occur, for example, the creation of
+         a schema node of type counter64 at times other than
+         re-initialization, then a corresponding schema node
+         should be defined, with an appropriate type, to indicate
+         the last discontinuity.
+
+         The counter64 type should not be used for configuration
+         schema nodes.  A default statement SHOULD NOT be used in
+         combination with the type counter64.
+
+         In the value set and its semantics, this type is equivalent
+         to the Counter64 type of the SMIv2.";
+       reference
+        "RFC 2578: Structure of Management Information Version 2
+                   (SMIv2)";
+     }
+
+     typedef zero-based-counter64 {
+       type yang:counter64;
+       default "0";
+       description
+        "The zero-based-counter64 type represents a counter64 that
+         has the defined 'initial' value zero.
+         A schema node of this type will be set to zero (0) on creation
+         and will thereafter increase monotonically until it reaches
+         a maximum value of 2^64-1 (18446744073709551615 decimal),
+         when it wraps around and starts increasing again from zero.
+
+         Provided that an application discovers a new schema node
+         of this type within the minimum time to wrap, it can use the
+         'initial' value as a delta.  It is important for a management
+         station to be aware of this minimum time and the actual time
+         between polls, and to discard data if the actual time is too
+         long or there is no defined minimum time.
+
+         In the value set and its semantics, this type is equivalent
+         to the ZeroBasedCounter64 textual convention of the SMIv2.";
+       reference
+        "RFC 2856: Textual Conventions for Additional High Capacity
+                   Data Types";
+     }
+
+     typedef gauge32 {
+       type uint32;
+       description
+        "The gauge32 type represents a non-negative integer, which
+         may increase or decrease, but shall never exceed a maximum
+         value, nor fall below a minimum value.  The maximum value
+         cannot be greater than 2^32-1 (4294967295 decimal), and
+         the minimum value cannot be smaller than 0.  The value of
+         a gauge32 has its maximum value whenever the information
+         being modeled is greater than or equal to its maximum
+         value, and has its minimum value whenever the information
+         being modeled is smaller than or equal to its minimum value.
+         If the information being modeled subsequently decreases
+         below (increases above) the maximum (minimum) value, the
+         gauge32 also decreases (increases).
+
+         In the value set and its semantics, this type is equivalent
+         to the Gauge32 type of the SMIv2.";
+       reference
+        "RFC 2578: Structure of Management Information Version 2
+                   (SMIv2)";
+     }
+
+     typedef gauge64 {
+       type uint64;
+       description
+        "The gauge64 type represents a non-negative integer, which
+         may increase or decrease, but shall never exceed a maximum
+         value, nor fall below a minimum value.  The maximum value
+         cannot be greater than 2^64-1 (18446744073709551615), and
+         the minimum value cannot be smaller than 0.  The value of
+         a gauge64 has its maximum value whenever the information
+         being modeled is greater than or equal to its maximum
+         value, and has its minimum value whenever the information
+         being modeled is smaller than or equal to its minimum value.
+         If the information being modeled subsequently decreases
+         below (increases above) the maximum (minimum) value, the
+         gauge64 also decreases (increases).
+
+         In the value set and its semantics, this type is equivalent
+         to the CounterBasedGauge64 SMIv2 textual convention defined
+         in RFC 2856";
+       reference
+        "RFC 2856: Textual Conventions for Additional High Capacity
+                   Data Types";
+     }
+
+     /*** collection of identifier-related types ***/
+
+     typedef object-identifier {
+       type string {
+         pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))'
+               + '(\.(0|([1-9]\d*)))*';
+       }
+       description
+        "The object-identifier type represents administratively
+         assigned names in a registration-hierarchical-name tree.
+
+         Values of this type are denoted as a sequence of numerical
+         non-negative sub-identifier values.  Each sub-identifier
+         value MUST NOT exceed 2^32-1 (4294967295).  Sub-identifiers
+         are separated by single dots and without any intermediate
+         whitespace.
+
+         The ASN.1 standard restricts the value space of the first
+         sub-identifier to 0, 1, or 2.  Furthermore, the value space
+         of the second sub-identifier is restricted to the range
+         0 to 39 if the first sub-identifier is 0 or 1.  Finally,
+         the ASN.1 standard requires that an object identifier
+         has always at least two sub-identifiers.  The pattern
+         captures these restrictions.
+
+         Although the number of sub-identifiers is not limited,
+         module designers should realize that there may be
+         implementations that stick with the SMIv2 limit of 128
+         sub-identifiers.
+         This type is a superset of the SMIv2 OBJECT IDENTIFIER type
+         since it is not restricted to 128 sub-identifiers.  Hence,
+         this type SHOULD NOT be used to represent the SMIv2 OBJECT
+         IDENTIFIER type; the object-identifier-128 type SHOULD be
+         used instead.";
+       reference
+        "ISO9834-1: Information technology -- Open Systems
+         Interconnection -- Procedures for the operation of OSI
+         Registration Authorities: General procedures and top
+         arcs of the ASN.1 Object Identifier tree";
+     }
+
+     typedef object-identifier-128 {
+       type object-identifier {
+         pattern '\d*(\.\d*){1,127}';
+       }
+       description
+        "This type represents object-identifiers restricted to 128
+         sub-identifiers.
+
+         In the value set and its semantics, this type is equivalent
+         to the OBJECT IDENTIFIER type of the SMIv2.";
+       reference
+        "RFC 2578: Structure of Management Information Version 2
+                   (SMIv2)";
+     }
+
+     typedef yang-identifier {
+       type string {
+         length "1..max";
+         pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
+         pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
+       }
+       description
+         "A YANG identifier string as defined by the 'identifier'
+          rule in Section 12 of RFC 6020.  An identifier must
+          start with an alphabetic character or an underscore
+          followed by an arbitrary sequence of alphabetic or
+          numeric characters, underscores, hyphens, or dots.
+
+          A YANG identifier MUST NOT start with any possible
+          combination of the lowercase or uppercase character
+          sequence 'xml'.";
+       reference
+         "RFC 6020: YANG - A Data Modeling Language for the Network
+                    Configuration Protocol (NETCONF)";
+     }
+     /*** collection of types related to date and time***/
+
+     typedef date-and-time {
+       type string {
+         pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
+               + '(Z|[\+\-]\d{2}:\d{2})';
+       }
+       description
+        "The date-and-time type is a profile of the ISO 8601
+         standard for representation of dates and times using the
+         Gregorian calendar.  The profile is defined by the
+         date-time production in Section 5.6 of RFC 3339.
+
+         The date-and-time type is compatible with the dateTime XML
+         schema type with the following notable exceptions:
+
+         (a) The date-and-time type does not allow negative years.
+
+         (b) The date-and-time time-offset -00:00 indicates an unknown
+             time zone (see RFC 3339) while -00:00 and +00:00 and Z
+             all represent the same time zone in dateTime.
+
+         (c) The canonical format (see below) of data-and-time values
+             differs from the canonical format used by the dateTime XML
+             schema type, which requires all times to be in UTC using
+             the time-offset 'Z'.
+
+         This type is not equivalent to the DateAndTime textual
+         convention of the SMIv2 since RFC 3339 uses a different
+         separator between full-date and full-time and provides
+         higher resolution of time-secfrac.
+
+         The canonical format for date-and-time values with a known time
+         zone uses a numeric time zone offset that is calculated using
+         the device's configured known offset to UTC time.  A change of
+         the device's offset to UTC time will cause date-and-time values
+         to change accordingly.  Such changes might happen periodically
+         in case a server follows automatically daylight saving time
+         (DST) time zone offset changes.  The canonical format for
+         date-and-time values with an unknown time zone (usually
+         referring to the notion of local time) uses the time-offset
+         -00:00.";
+       reference
+        "RFC 3339: Date and Time on the Internet: Timestamps
+         RFC 2579: Textual Conventions for SMIv2
+         XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
+     }
+     typedef timeticks {
+       type uint32;
+       description
+        "The timeticks type represents a non-negative integer that
+         represents the time, modulo 2^32 (4294967296 decimal), in
+         hundredths of a second between two epochs.  When a schema
+         node is defined that uses this type, the description of
+         the schema node identifies both of the reference epochs.
+
+         In the value set and its semantics, this type is equivalent
+         to the TimeTicks type of the SMIv2.";
+       reference
+        "RFC 2578: Structure of Management Information Version 2
+                   (SMIv2)";
+     }
+
+     typedef timestamp {
+       type yang:timeticks;
+       description
+        "The timestamp type represents the value of an associated
+         timeticks schema node at which a specific occurrence
+         happened.  The specific occurrence must be defined in the
+         description of any schema node defined using this type.  When
+         the specific occurrence occurred prior to the last time the
+         associated timeticks attribute was zero, then the timestamp
+         value is zero.  Note that this requires all timestamp values
+         to be reset to zero when the value of the associated timeticks
+         attribute reaches 497+ days and wraps around to zero.
+
+         The associated timeticks schema node must be specified
+         in the description of any schema node using this type.
+
+         In the value set and its semantics, this type is equivalent
+         to the TimeStamp textual convention of the SMIv2.";
+       reference
+        "RFC 2579: Textual Conventions for SMIv2";
+     }
+
+     /*** collection of generic address types ***/
+
+     typedef phys-address {
+       type string {
+         pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+       }
+       description
+        "Represents media- or physical-level addresses represented
+         as a sequence octets, each octet represented by two hexadecimal
+         numbers.  Octets are separated by colons.  The canonical
+         representation uses lowercase characters.
+
+         In the value set and its semantics, this type is equivalent
+         to the PhysAddress textual convention of the SMIv2.";
+       reference
+        "RFC 2579: Textual Conventions for SMIv2";
+     }
+
+     typedef mac-address {
+       type string {
+         pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
+       }
+       description
+        "The mac-address type represents an IEEE 802 MAC address.
+         The canonical representation uses lowercase characters.
+
+         In the value set and its semantics, this type is equivalent
+         to the MacAddress textual convention of the SMIv2.";
+       reference
+        "IEEE 802: IEEE Standard for Local and Metropolitan Area
+                   Networks: Overview and Architecture
+         RFC 2579: Textual Conventions for SMIv2";
+     }
+
+     /*** collection of XML-specific types ***/
+
+     typedef xpath1.0 {
+       type string;
+       description
+        "This type represents an XPATH 1.0 expression.
+
+         When a schema node is defined that uses this type, the
+         description of the schema node MUST specify the XPath
+         context in which the XPath expression is evaluated.";
+       reference
+        "XPATH: XML Path Language (XPath) Version 1.0";
+     }
+
+     /*** collection of string types ***/
+
+     typedef hex-string {
+       type string {
+         pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+       }
+       description
+        "A hexadecimal string with octets represented as hex digits
+         separated by colons.  The canonical representation uses
+         lowercase characters.";
+     }
+
+     typedef uuid {
+       type string {
+         pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'
+               + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
+       }
+       description
+        "A Universally Unique IDentifier in the string representation
+         defined in RFC 4122.  The canonical representation uses
+         lowercase characters.
+
+         The following is an example of a UUID in string representation:
+         f81d4fae-7dec-11d0-a765-00a0c91e6bf6
+         ";
+       reference
+        "RFC 4122: A Universally Unique IDentifier (UUID) URN
+                   Namespace";
+     }
+
+     typedef dotted-quad {
+       type string {
+         pattern
+           '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+         + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
+       }
+       description
+         "An unsigned 32-bit number expressed in the dotted-quad
+          notation, i.e., four octets written as decimal numbers
+          and separated with the '.' (full stop) character.";
+     }
+   }
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/microwave-model@2017-03-24.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/microwave-model@2017-03-24.yang
new file mode 100644
index 0000000..e6b6bb3
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/microwave-model@2017-03-24.yang
@@ -0,0 +1,2262 @@
+module microwave-model {
+    namespace "urn:onf:params:xml:ns:yang:microwave-model";
+    prefix microwave-model;
+
+    import core-model {
+        prefix core-model;
+    }
+    import g.874.1-model {
+        prefix g;
+    }
+    import ietf-yang-types {
+        prefix yang;
+    }
+
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "This module contains a collection of YANG definitions for managing wireless networks.";
+    revision 2017-03-24 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    /***********************
+    * package type-definitions
+    **********************/ 
+        typedef loop-back-type {
+            type enumeration {
+                enum none {
+                    description "none";
+                }
+                enum if {
+                    description "Intermediate Frequency on the interface between indoor and outdoor unit.";
+                }
+                enum rf {
+                    description "Radio Frequency on the interface between outdoor unit and outdoor unit at the remote site.";
+                }
+            }
+            description "none";
+        }
+        typedef severity-type {
+            type enumeration {
+                enum non-alarmed {
+                    description "none";
+                }
+                enum warning {
+                    description "none";
+                }
+                enum minor {
+                    description "none";
+                }
+                enum major {
+                    description "none";
+                }
+                enum critical {
+                    description "none";
+                }
+            }
+            description "According to ITU-T M.3160";
+        }
+        grouping channel-plan-type-g {
+            leaf supported-channel-plan {
+                type string;
+                default "Channel plan name not defined.";
+                config false;
+                description "Unique name (e.g. ECC/REC/(01)04_Annex 5) of a document, which describes a frequency grid that can be adjusted at the air interface. Corresponding channel plans to be delivered by the hardware vendor and to be stored by the operator in an controller/application attached database.";
+            }
+            leaf duplex-distance-is-variable {
+                type boolean;
+                default false;
+                config false;
+                description "To be set on  'true', if the distance between transmitted and received frequency is variable.";
+            }
+            leaf duplex-distance {
+                type int32;
+                units "kHz";
+                default -1;
+                config false;
+                description "Distance between transmitted and received frequency.";
+            }
+            leaf auto-freq-select-is-avail {
+                type boolean;
+                default false;
+                config false;
+                description "In case the microwave radio is capable of automatically selecting the transmit frequency in unlicensed bands, this field shall contain a 'true'.";
+            }
+            list transmission-mode-list {
+                key 'transmission-mode-id';
+                config false;
+                min-elements 1;
+                uses transmission-mode-type-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping transmission-mode-type-g {
+            leaf transmission-mode-id {
+                type core-model:universal-id;
+                config false;
+                description "Indentifies the transmissionMode for internal reference.";
+            }
+            leaf channel-bandwidth {
+                type int32;
+                units "kHz";
+                default -1;
+                config false;
+                description "Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;";
+            }
+            leaf modulation-scheme {
+                type int16;
+                units "symbols";
+                default -1;
+                config false;
+                description "Modulation scheme, which is base to the other characteristics described in the same transmissionModeType data type. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256').";
+            }
+            leaf code-rate {
+                type int8;
+                units "%";
+                default -1;
+                config false;
+                description "Code rate of the coding scheme in % (Net bit rate ? Gross bit rate ? code rate).";
+            }
+            leaf tx-power-min {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Value of the minimum transmit power the modem can operate in dBm.";
+            }
+            leaf tx-power-max {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Value of the maximum transmit power the modem can operate in dBm.";
+            }
+            leaf rx-threshold {
+                type int16;
+                units "dBm";
+                default 99;
+                config false;
+                description "Value of the receive level required to decode the received signal with a Bit Error Rate of 1e-6 or less.";
+            }
+            leaf am-upshift-level {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Value of the receive level that has to be exceeded to shift into a higher modulation scheme.";
+            }
+            leaf am-downshift-level {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Value of the receive level that has to be exceeded for not shifting into a lower modulation scheme.";
+            }
+            leaf xpic-is-avail {
+                type boolean;
+                default false;
+                config false;
+                description "In case this air interface type is capable of XPIC, this field shall contain a 'true'. This information shall purely relate to capabilities of the equipment type, but not to the operational capability of a specific hardware composition on site. Means for example that this attribute might contain a 'true' statement, even if an additional cable would have been required to actually operate XPIC in a specific case.";
+            }
+            description "none";
+        }
+        typedef polarization-type {
+            type enumeration {
+                enum not-specified {
+                    description "none";
+                }
+                enum horizontal {
+                    description "none";
+                }
+                enum vertical {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping air-interface-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                default "Problem kind name not defined.";
+                description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping air-interface-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping air-interface-performance-type-g {
+            leaf es {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Number of errored seconds.";
+            }
+            leaf ses {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Number of severely errored seconds.";
+            }
+            leaf cses {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Number of consecutive severely errored seconds.";
+            }
+            leaf unavailability {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Total time of unavailability in seconds.";
+            }
+            leaf tx-level-min {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Minimum transmit power. Signed integers are required.";
+            }
+            leaf tx-level-max {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Maximum transmit power. Signed integers are required.";
+            }
+            leaf tx-level-avg {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Averaged transmit power. Signed integers are required.";
+            }
+            leaf rx-level-min {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Minimum receive level. Signed integers are required.";
+            }
+            leaf rx-level-max {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Maximum receive level. Signed integers are required.";
+            }
+            leaf rx-level-avg {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Averaged receive level. Signed integers are required.";
+            }
+            leaf time2-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Sum of all seconds the transmitter operated in e.g. BPSK.";
+            }
+            leaf time4-states-s {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time4-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time8-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time16-states-s {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time16-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time32-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time64-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time128-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time256-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time512-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time512-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time1024-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time1024-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time2048-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time2048-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time4096-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time4096-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time8192-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time8192-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf snir-min {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Minimum signal to (noise+interference) ratio.";
+            }
+            leaf snir-max {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Maximum signal to (noise+interference) ratio.";
+            }
+            leaf snir-avg {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Averaged signal to (noise+interference) ratio.";
+            }
+            leaf xpd-min {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Minimum cross polarization discrimination.";
+            }
+            leaf xpd-max {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Maximum cross polarization discrimination.";
+            }
+            leaf xpd-avg {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Averaged cross polarization discrimination.";
+            }
+            leaf rf-temp-min {
+                type int8;
+                units "C";
+                default -99;
+                config false;
+                description "Lowest temperature (in degree Celsius) of the radio module inside the outdoor unit.";
+            }
+            leaf rf-temp-max {
+                type int8;
+                units "C";
+                default -99;
+                config false;
+                description "Highest temperature (in degree Celsius) of the radio module inside the outdoor unit.";
+            }
+            leaf rf-temp-avg {
+                type int8;
+                units "C";
+                default -99;
+                config false;
+                description "Averaged temperature (in degree Celsius) of the radio module inside the outdoor unit.";
+            }
+            leaf defect-blocks-sum {
+                type int16;
+                units "blocks";
+                default -1;
+                config false;
+                description "Total number of blocks that were defect after receiving and could not be corrected by the FEC.";
+            }
+            leaf time-period {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Total length of the measurement period.";
+            }
+            description "Consolidated performance information of the air interface.";
+        }
+        grouping air-interface-current-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping air-interface-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        typedef protection-type {
+            type enumeration {
+                enum hsb {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef role-type {
+            type enumeration {
+                enum working {
+                    description "none";
+                }
+                enum protection {
+                    description "none";
+                }
+                enum protected {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping diversity-type-g {
+            leaf diversity-name {
+                type string;
+                default "Diversity name not defined.";
+                config false;
+                description "Names to be chosen from the following list: 'spaceDiversity', 'frequencyDiversity'";
+            }
+            leaf number-of-air-interfaces-max {
+                type int8;
+                units "air interfaces";
+                default 1;
+                config false;
+                description "Maximum number of air interfaces that could be part of this kind of diversity.";
+            }
+            description "none";
+        }
+        typedef air-interface-diversity-status-type {
+            type enumeration {
+                enum group-down {
+                    description "All air interfaces that are members of the diversity configuration are down.";
+                }
+                enum not-all-ai-active {
+                    description "At least one, but not all of the air interfaces that are part of the diversity configuration is not working.";
+                }
+                enum all-ai-active {
+                    description "All air interfaces that are part of the diversity configuration are working.";
+                }
+            }
+            description "none";
+        }
+        grouping air-interface-diversity-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                default "Problem kind name not defined.";
+                description "Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping air-interface-diversity-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping air-interface-diversity-performance-type-g {
+            leaf snir-min {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Minimum signal to (noise+interference) ratio of the combined signals.";
+            }
+            leaf snir-max {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Maximum signal to (noise+interference) ratio of the combined signals.";
+            }
+            leaf snir-avg {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Average signal to (noise+interference) ratio of the combined signals.";
+            }
+            description "Consolidated performance information of the air interface diversity group.";
+        }
+        grouping air-interface-diversity-current-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-diversity-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping air-interface-diversity-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-diversity-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        grouping tdm-structure-type-g {
+            leaf tdm-structure-name {
+                type string;
+                default "TDM structure name not defined.";
+                config false;
+                description "Names to be chosen from the following list: 'e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'";
+            }
+            leaf tdm-segment-size {
+                type int32;
+                units "kbit/s";
+                default -1;
+                config false;
+                description "Size of the TDM segment in kbit/s. Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;";
+            }
+            leaf max-number-of-segments-reservable {
+                type int8;
+                units "segments";
+                default -1;
+                config false;
+                description "Device specific maximum number of segments (not depending on current air interface configuration) that can be reserved for this type of segment on a single air interface.";
+            }
+            description "none";
+        }
+        grouping structure-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                default "Problem kind name not defined.";
+                description "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping structure-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        typedef structure-performance-type {
+            type int32;
+            description "Consolidated performance information of the Structure.";
+        }
+        grouping structure-current-performance-type-g {
+            leaf performance-data {
+                type structure-performance-type;
+                config false;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping structure-historical-performance-type-g {
+            leaf performance-data {
+                type structure-performance-type;
+                config false;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        grouping container-type-g {
+            leaf container-name {
+                type string;
+                default "Container name not yet defined.";
+                config false;
+                description "Names to be chosen from the following list: 'ethernet','e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'";
+            }
+            leaf number-of-time-slots-required {
+                type int16;
+                units "timeslots";
+                default -1;
+                config false;
+                description "Number of time slots required for transporting this type of container. Value must be calculated by the vendor after defining the timeSlotCapacity. For containers of fixed size: numberOfTimeSlotsRequired = required bandwidth of the container divided by timeSlotCapacity. For containers of variable size the minimum (most probably 1) is to be stated.";
+            }
+            leaf tdm-time-slots-is-required {
+                type boolean;
+                default false;
+                config false;
+                description "Shall be set to '1', if this container type requires bandwidth (times slots) reserved for TDM transport.";
+            }
+            leaf bundling-is-avail {
+                type boolean;
+                default false;
+                config false;
+                description "If it is possible to combine transport resources of several radio links to transport this container type, this attribute shall be set to '1'.";
+            }
+            description "none";
+        }
+        grouping tdm-container-type-g {
+            leaf tdm-container-name {
+                type string;
+                default "TDM container name not defined.";
+                config false;
+                description "Names to be chosen from the following list: 'e1','t1','j1','e3','t3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'";
+            }
+            leaf tdm-container-size {
+                type int32;
+                units "kbit/s";
+                default -1;
+                config false;
+                description "Capacity required for transporting this type of container (in kbit/s). Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;";
+            }
+            description "none";
+        }
+        grouping segment-id-type-g {
+            leaf structure-id-ref {
+                type core-model:universal-id;
+                description "none";
+            }
+            leaf segment-id-ref {
+                type int16;
+                description "Combinations of structureId and segmentId must be unique inside the device to assure that every resource is used just once.";
+            }
+            description "Identifies the segments, which are used to transport the container.";
+        }
+        grouping segment-status-type-g {
+            leaf segment-status-type-id {
+                type int16;
+                config false;
+                description "none";
+            }
+            leaf segment-is-reserved-for-tdm {
+                type boolean;
+                default false;
+                config false;
+                description "The number of segments, which is configured by Structure::StructureConfiguration::tdmReservedNumberOfSegements, has to be reserved for TDM. Starting from the lowest index value, these segments have to be marked with a 'true' in segmentIsReservedForTdm.
+                    ";
+            }
+            leaf operational-status {
+                type core-model:operational-state;
+                default disabled;
+                config false;
+                description "Current operational status of each segment.";
+            }
+            leaf obsolete-priority-class {
+                type int8;
+                default -1;
+                config false;
+                description "PriorityClass as inherited from the associated Container::ContainerConfiguration::priorityClass. In case the device is capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, priorityClass shall be considered, while calculating the dropOrderRank.";
+            }
+            leaf obsolete-drop-order-rank {
+                type int16;
+                default -1;
+                config false;
+                description "In case the device is NOT capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, dropOrderRank is number of segments minus sequence number of the segment. In case the device is capable of adapting the sequence, dropOrderRank has to be calculated by the device in dependency to the assigned priorityClass. 
+                    _unique: within Structure::StructureStatus::segmentStatusList";
+            }
+            description "none";
+        }
+        grouping container-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                default "Problem kind name not defined.";
+                description "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping container-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping container-performance-type-g {
+            leaf tx-ethernet-bytes-max-s {
+                type int32;
+                units "Bytes/s";
+                default -1;
+                config false;
+                description "Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a second and keeps the highest value within the measurement period. Field to be left blank for all types of TDM containers.";
+            }
+            leaf tx-ethernet-bytes-max-m {
+                type int64;
+                units "Bytes/min";
+                default -1;
+                config false;
+                description "Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a minute and keeps the highest value with in the measurement period. Field to be left blank for all types of TDM containers.";
+            }
+            leaf tx-ethernet-bytes-sum {
+                type int64;
+                units "Bytes";
+                default -1;
+                config false;
+                description "Total number of Bytes of Ethernet traffic (before header compression) transmitted (in direction out of the device) during the measurement period. Field to be left blank for all types of TDM containers.";
+            }
+            leaf time-period {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Total length of the measurement period in seconds.";
+            }
+            description "Consolidated performance information of the Container.";
+        }
+        grouping container-current-performance-type-g {
+            container performance-data {
+                config false;
+                uses container-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping container-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses container-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+
+    /***********************
+    * package object-classes
+    **********************/ 
+        /***********************
+        * package air-interface
+        **********************/ 
+            list mw-air-interface-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container air-interface-capability {
+                    config false;
+                    uses air-interface-capability-g;
+                    description "none";
+                }
+                container air-interface-configuration {
+                    uses air-interface-configuration-g;
+                    description "none";
+                }
+                container air-interface-status {
+                    config false;
+                    uses air-interface-status-g;
+                    description "none";
+                }
+                container air-interface-current-problems {
+                    config false;
+                    uses air-interface-current-problems-g;
+                    description "none";
+                }
+                container air-interface-current-performance {
+                    config false;
+                    uses air-interface-current-performance-g;
+                    description "none";
+                }
+                container air-interface-historical-performances {
+                    config false;
+                    uses air-interface-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-capability-g {
+                leaf type-of-equipment {
+                    type string;
+                    default "Type of equipment not yet defined.";
+                    config false;
+                    description "This parameter indicates the equipment type. Instead of uploading the complete set of capabilities, capabilities of the same equipment type could be reused. Should be unique for a combination of modem, radio and their respective firmware.";
+                }
+                leaf tx-frequency-min {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    config false;
+                    description "Value of the minimum transmit frequency tunable at the air interface.";
+                }
+                leaf tx-frequency-max {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    config false;
+                    description "Value of the maximum transmit frequency tunable at the air interface.";
+                }
+                leaf rx-frequency-min {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    config false;
+                    description "Value of the minimum receive frequency tunable at the air interface.";
+                }
+                leaf rx-frequency-max {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    config false;
+                    description "Value of the maximum receive frequency tunable at the air interface.";
+                }
+                leaf adaptive-modulation-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case the device is capable of adaptive modulation, this field shall contain a 'true'.";
+                }
+                leaf mimo-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case the device is capable of MIMO, this field shall contain a 'true'.";
+                }
+                leaf mimo-channels {
+                    type int8;
+                    units "channels";
+                    default 1;
+                    config false;
+                    description "Maximum number (n) of spatial multiplexing streams that can be conveyed by an n x n MIMO configuration.";
+                }
+                leaf alic-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case the microwave radio is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), this field shall contain a 'true'.";
+                }
+                leaf atpc-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case the microwave radio is capable of ATPC, this field shall contain a 'true'.";
+                }
+                leaf atpc-range {
+                    type int8;
+                    units "dB";
+                    default 0;
+                    config false;
+                    description "Extent of the ATPC range.";
+                }
+                leaf encryption-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Shall be marked 'true', if payload encryption is available.";
+                }
+                leaf-list supported-loop-back-kind-list {
+                    type loop-back-type;
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    description "List of supported kinds of looping back of header information to the remote site.";
+                }
+                leaf maintenance-timer-range {
+                    type string;
+                    units "s";
+                    default "Range of the maintenance timer not yet defined.";
+                    config false;
+                    description "Available time periods for maintenance configurations (e.g. the loop back of microwave header information) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360').";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+                    description "Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                list supported-channel-plan-list {
+                    key 'supported-channel-plan';
+                    config false;
+                    min-elements 1;
+                    uses channel-plan-type-g;
+                    description "List of channel spacing that are supported by the device.";
+                }
+                description "Describes the 'analog' capabilities of modem and transmitter of the microwave device. Value ranges of attributes are not independently (e.g. min. and max. transmit power depends on modulation). Legal combinations of values are expressed in transmissionModeTypes.";
+            }
+            grouping air-interface-configuration-g {
+                leaf air-interface-name {
+                    type string;
+                    default "Air interface ID not yet defined.";
+                    description "Operator specific microwave link ID (often used for coding area, type of element and sequential number).";
+                }
+                leaf radio-signal-id {
+                    type string;
+                    default "Radio signal ID not yet defined.";
+                    description "The radioSignalId is transmitted on the air interface so the remote site of the link synchronizes on the correct transmitter. The local radio MUST NOT synchronize on a radio signal with a different radioSignalId. The link ID is neither an ID necessary to span the model nor an ID referencing external data. It is just some sort of name of the link transmitted so the correct remote site can be identified in an interference situation. The value zero might be used to make the microwave to disable the link ID check.";
+                }
+                leaf tx-frequency {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    description "Center frequency of the transmit channel. The values to be configured have to exactly match the values listed in the international agreement referenced in channelPlanID. In case of automated selection of the transmit frequency this field shall describe the lowest center frequency selectable.";
+                }
+                leaf rx-frequency {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    description "Center frequency of the receive channel.";
+                }
+                leaf tx-channel-bandwidth {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    description "Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;";
+                }
+                leaf rx-channel-bandwidth {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    description "Bandwidth of the receive channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;";
+                }
+                leaf polarization {
+                    type polarization-type;
+                    default not-specified;
+                    description "Allows documenting the polarization of the air interface.";
+                }
+                leaf power-is-on {
+                    type boolean;
+                    default true;
+                    description "Power ON. Activation of the entire radio in a split mount configuration shall be expressed as a 'true'.";
+                }
+                leaf transmitter-is-on {
+                    type boolean;
+                    default false;
+                    description "Activation of the transmitter inside the radio shall be expressed as a 'true'.";
+                }
+                leaf receiver-is-on {
+                    type boolean;
+                    default true;
+                    description "Maintenance Feature. Activation of the receiver inside the radio shall be expressed as a 'true'. Attribute shall also be used for RX main and RX diversity squelches in case of diversity configurations.
+                        ";
+                }
+                leaf tx-power {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    description "Transmit power to be configured on the microwave link. Signed Byte is required. The actually operated transmit power might be lower depending on adaptive modulation and ATPC.";
+                }
+                leaf adaptive-modulation-is-on {
+                    type boolean;
+                    default false;
+                    description "Adaptive Modulation. Activation of adaptive modulation shall be expressed as a 'true'.";
+                }
+                leaf modulation-min {
+                    type int16;
+                    units "symbols";
+                    default -1;
+                    description "Minimum modulation to be configured (in case adaptive modulation is not used, this value represents also the fixed modulation). The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf modulation-max {
+                    type int16;
+                    units "symbols";
+                    default -1;
+                    description "Maximum modulation to be configured. The value of this field is only relevant, if Adaptive Modulation has been activated. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf xpic-is-on {
+                    type boolean;
+                    default false;
+                    description "Activation of Cross Polarization Interference Cancelation shall be expressed as a 'true'. In case XPIC is not available for the current combination of channel bandwidth and modulation or the hardware in general, this parameter shall always be set to 'false'.";
+                }
+                leaf mimo-is-on {
+                    type boolean;
+                    default false;
+                    description "Activation of Multiple Input Multiple Output (MIMO) shall be expressed as a 'true'.";
+                }
+                leaf alic-is-on {
+                    type boolean;
+                    default false;
+                    description "Activation of Adjacent Link Interference Cancelation (ALIC) shall be expressed as a 'true'.";
+                }
+                leaf atpc-is-on {
+                    type boolean;
+                    default false;
+                    description "ATPC. Activation of Automated Transmit Power Control shall be expressed as a 'true'.";
+                }
+                leaf atpc-thresh-upper {
+                    type int16;
+                    units "dBm";
+                    default 99;
+                    description "If the receive level is higher than the upper threshold value, the transmitter is notified to decrease transmit power.";
+                }
+                leaf atpc-thresh-lower {
+                    type int16;
+                    units "dBm";
+                    default 99;
+                    description "If the receive level is lower than the lower threshold value, the transmitter is notified to increase transmit power.";
+                }
+                leaf auto-freq-select-is-on {
+                    type boolean;
+                    default false;
+                    description "Activation of automatically selecting the transmit frequency in unlicensed bands shall be expressed as a 'true'.";
+                }
+                leaf auto-freq-select-range {
+                    type int8;
+                    units "channels";
+                    default -1;
+                    description "Number of transmit channels (starting at the center frequency defined in txFrequency and with channel bandwidth according to txChannelBandwidth) that define the range within the transmit frequency can automatically been chosen. ";
+                }
+                leaf modulation-is-on {
+                    type boolean;
+                    default true;
+                    description "Maintenance Feature. De-activation of the modulation of the carrier signal for fault management shall be expressed as a 'false'.";
+                }
+                leaf encryption-is-on {
+                    type boolean;
+                    default false;
+                    description "Activates encryption of the payload.";
+                }
+                leaf cryptographic-key {
+                    type string;
+                    default "Cryptographic key not yet defined.";
+                    description "Key for transforming plaintext into ciphertext data.";
+                }
+                leaf loop-back-kind-on {
+                    type loop-back-type;
+                    default none;
+                    description "Maintenance Feature. The currently configured type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site.";
+                }
+                leaf maintenance-timer {
+                    type int32;
+                    units "s";
+                    default -1;
+                    description "Time of existence of any maintenance configuration (e.g. the loop back of microwave header information). Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 6;
+                    uses air-interface-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "Configuration of the radio link.";
+            }
+            grouping air-interface-status-g {
+                leaf tx-frequency-cur {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    config false;
+                    description "Center frequency of the currently operated transmit channel.";
+                }
+                leaf rx-frequency-cur {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    config false;
+                    description "Center frequency of the currently operated receive channel.";
+                }
+                leaf tx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current transmit level.";
+                }
+                leaf rx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current receive level.";
+                }
+                leaf modulation-cur {
+                    type int16;
+                    units "symbols";
+                    default -1;
+                    config false;
+                    description "Currently operated modulation on transmit path. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf code-rate-cur {
+                    type int8;
+                    units "%";
+                    default -1;
+                    config false;
+                    description "Code rate of the currently operated coding scheme (Net bit rate ? Gross bit rate ? code rate).";
+                }
+                leaf snir-cur {
+                    type int8;
+                    units "dB";
+                    default -99;
+                    config false;
+                    description "Currently measured signal to (noise+interference) ratio.";
+                }
+                leaf xpd-cur {
+                    type int8;
+                    units "dB";
+                    default -99;
+                    config false;
+                    description "Currently measured cross polarization discrimination.";
+                }
+                leaf rf-temp-cur {
+                    type int8;
+                    units "Celsius";
+                    default -99;
+                    config false;
+                    description "Current temperature (in degree Celsius) of the radio module inside the outdoor unit.";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Air Interface entered its current operational status.  ";
+                }
+                leaf radio-power-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If the radio unit has power and is switched on, this shall be expressed as a 'true'.";
+                }
+                leaf link-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If connection is established to the remote site with the same linkID, this shall be expressed as a 'true'.";
+                }
+                leaf xpic-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If XPIC is currently actually working (not just configured), this shall be expressed as a 'true'.";
+                }
+                leaf mimo-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If MIMO is currently actually working (not just configured), this shall be expressed as a 'true'.";
+                }
+                leaf alic-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If Adjacent Link Interference Cancelation (ALIC) is currently actually working (not just configured), this shall be expressed as a 'true'.";
+                }
+                leaf atpc-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If ATPC is currently actually working (not just configured), this shall be expressed as a 'true'.";
+                }
+                leaf auto-freq-select-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If automated frequency selection is currently actually working (not just configured), this shall be expressed as a 'true'.";
+                }
+                leaf loop-back-kind-up {
+                    type loop-back-type;
+                    default none;
+                    config false;
+                    description "The currently active (not just configured) type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site.";
+                }
+                leaf local-end-point-id {
+                    type string;
+                    default "not-supported";
+                    config false;
+                    description "The value of the localEndPointId is a vendor specific identifier of the air interface, used by the node to discover a microwave radio link.";
+                }
+                leaf remote-end-point-id {
+                    type string;
+                    default "not-supported";
+                    config false;
+                    description "The value of the remoteEndPointId is a vendor specific identifier or the airinterface at the remote side, used to by the node to discover a microwave radio link.";
+                }
+                description "Measurements of current values on the air interface and operational status of the device.";
+            }
+            grouping air-interface-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses air-interface-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses air-interface-current-performance-type-g;
+                    description "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+                }
+                description "Aggregated performance information of the air interface at a particular moment.";
+            }
+            grouping air-interface-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses air-interface-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface for a pre-defined measurement interval.";
+            }
+            list co-channel-group {
+                key 'co-channel-group-id';
+                uses co-channel-group-g;
+                description "none";
+            }
+            grouping co-channel-group-g {
+                leaf co-channel-group-id {
+                    type core-model:universal-id;
+                    description "none";
+                }
+                leaf-list air-interface-list {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    description "List of air interfaces, which are part of the co-channel (XPIC, MIMO, ALIC) group.";
+                }
+                leaf sort-of-co-channel-group {
+                    type string;
+                    default "Kind of co-channel group not specified.";
+                    description "Type of group of air interfaces with the same transmit and receive frequency. The values shall be chosen from the following _list:'XPIC', 'MIMO', 'ALIC';";
+                }
+                leaf-list logical-termination-point {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "Required for configuring XPIC, MIMO and ALIC.";
+            }
+
+        /***********************
+        * package air-interface-hsb
+        **********************/ 
+            list mw-air-interface-hsb-end-point-pac {
+                key 'endpoint';
+                leaf role {
+                    type role-type;
+                    default working;
+                    description "none";
+                }
+                leaf endpoint {
+                    type leafref {
+                        path '/core-model:forwarding-construct/core-model:fc-port/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "The EndPoint (EP) object class models the access to the FC function. Each EndPoint instance has a role (e.g., working, protection, protected, hub, spoke, leaf, root, etc.) with respect to the FC function. The association of the FC to LTPs is made via EndPoints (essentially the ports of the FC) where each EndPoint (EP) of the FC has a role in the context of the FC. The traffic forwarding between the associated End PointsEPs of the FC depends upon the type of FC and may be associated with FCSwitch object instances. In cases where there is protection conveys the protecting role of the access to the FC.  The EP replaces the Protection Unit of a traditional protection model. It represents a protected (resilient/reliable) point or a protecting (unreliable working or protection) point.";
+            }
+            list mw-air-interface-hsb-fc-switch-pac {
+                key 'fcswitch';
+                leaf prot-type {
+                    type protection-type;
+                    default hsb;
+                    description "Indicates the protection scheme that is used for the ProtectionGroup.";
+                }
+                leaf air-interface-hsb-configuration-is-faulty-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity of an airInterfaceHsbConfigurationIsFaulty alarm shall be chosen from an enumeration.";
+                }
+                leaf air-interface-hsb-is-partly-down-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity for one link out of the HSB configuration being down shall be chosen from an enumeration.";
+                }
+                leaf air-interface-hsb-is-down-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity of the total HSB configuration being down shall be chosen from an enumeration.";
+                }
+                leaf fcswitch {
+                    type leafref {
+                        path '/core-model:forwarding-construct/core-model:fc-switch/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "Represents and defines a protection switch structure encapsulated in the forwarding construct. Essentially performs the function of Protection Group. Associates to 2 or more Endpoints each playing the role of a Protection Unit. One or more protection EndPoints (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) Endpoints where either protection or working can feed one or more protected Endpoint. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as  1+1 ane 1:1).  May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state.";
+            }
+
+        /***********************
+        * package air-interface-diversity
+        **********************/ 
+            list mw-air-interface-diversity-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container air-interface-diversity-capability {
+                    config false;
+                    uses air-interface-diversity-capability-g;
+                    description "none";
+                }
+                container air-interface-diversity-configuration {
+                    uses air-interface-diversity-configuration-g;
+                    description "none";
+                }
+                container air-interface-diversity-status {
+                    config false;
+                    uses air-interface-diversity-status-g;
+                    description "none";
+                }
+                container air-interface-diversity-current-problems {
+                    config false;
+                    uses air-interface-diversity-current-problems-g;
+                    description "none";
+                }
+                container air-interface-diversity-current-performance {
+                    config false;
+                    uses air-interface-diversity-current-performance-g;
+                    description "none";
+                }
+                container air-interface-diversity-historical-performances {
+                    config false;
+                    uses air-interface-diversity-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-capability-g {
+                list available-kinds-of-diversity {
+                    key 'diversity-name';
+                    config false;
+                    uses diversity-type-g;
+                    description "Available types of diversity to be listed.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+                    description "Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                description "Describes the capabilities in implementing different types of air interface diversity.";
+            }
+            grouping air-interface-diversity-configuration-g {
+                container air-interface-diversity {
+                    uses diversity-type-g;
+                    description "Type of air interface diversity configured at the link.";
+                }
+                leaf-list air-interface-ltp-list {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    min-elements 2;
+                    description "_multiplicity:2-ThisAirInterfaceDiversity::AirInterfaceDiversityConfiguration::airInterfaceDiversity::diversityType::numberOfAirInterfacesMax";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 3;
+                    uses air-interface-diversity-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-status-g {
+                leaf snir-cur {
+                    type int8;
+                    units "dB";
+                    default -99;
+                    config false;
+                    description "Currently measured signal to (noise+interference) ratio of the combined signals.";
+                }
+                leaf air-interface-diversity-status {
+                    type air-interface-diversity-status-type;
+                    default group-down;
+                    config false;
+                    description "Status of the air interface bundle. ";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Diversity Group entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses air-interface-diversity-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses air-interface-diversity-current-performance-type-g;
+                    description "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+                }
+                description "Aggregated performance information of the air interface diversity configuration at a particular moment.";
+            }
+            grouping air-interface-diversity-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses air-interface-diversity-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface diversity configuration for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package pure-ethernet-structure
+        **********************/ 
+            list mw-pure-ethernet-structure-pac {
+                if-feature pure-ethernet;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container pure-ethernet-structure-capability {
+                    config false;
+                    uses pure-ethernet-structure-capability-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-configuration {
+                    uses pure-ethernet-structure-configuration-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-status {
+                    config false;
+                    uses pure-ethernet-structure-status-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-current-problems {
+                    config false;
+                    uses pure-ethernet-structure-current-problems-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-current-performance {
+                    config false;
+                    uses pure-ethernet-structure-current-performance-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-historical-performances {
+                    config false;
+                    uses pure-ethernet-structure-historical-performances-g;
+                    description "none";
+                }
+                description "The pureEthernetStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting Ethernet traffic only.";
+            }
+            grouping pure-ethernet-structure-capability-g {
+                leaf structure-id {
+                    type core-model:universal-id;
+                    config false;
+                    description "Identifies the Structure for bundling and container.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device.";
+                }
+                description "Describes the logical structuring of the physical capacity provided by a pure Ethernet microwave device. Segmentation is not available. No fixed segment size. No TDM transport.";
+            }
+            grouping pure-ethernet-structure-configuration-g {
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    uses structure-problem-severity-type-g;
+                    description "Severity of the type of problem to be configured.";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-status-g {
+                container segment-status-list {
+                    config false;
+                    uses segment-status-type-g;
+                    description "Status of the Ethernet transport segment. Always just one segment.";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the last update of the status information.  ";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses structure-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses structure-current-performance-type-g;
+                    description "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+                }
+                description "Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment.";
+            }
+            grouping pure-ethernet-structure-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses structure-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval.";
+            }
+            feature pure-ethernet {
+                description "Feature 'pure-ethernet' is mandatory for device types transporting pure Ethernet.";
+            }
+
+        /***********************
+        * package hybrid-mw-structure
+        **********************/ 
+            list mw-hybrid-mw-structure-pac {
+                if-feature hybrid-microwave;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container hybrid-mw-structure-capability {
+                    config false;
+                    uses hybrid-mw-structure-capability-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-configuration {
+                    uses hybrid-mw-structure-configuration-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-status {
+                    config false;
+                    uses hybrid-mw-structure-status-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-current-problems {
+                    config false;
+                    uses hybrid-mw-structure-current-problems-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-current-performance {
+                    config false;
+                    uses hybrid-mw-structure-current-performance-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-historical-performances {
+                    config false;
+                    uses hybrid-mw-structure-historical-performances-g;
+                    description "none";
+                }
+                description "The HybridMwStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM and Ethernet traffic.";
+            }
+            grouping hybrid-mw-structure-capability-g {
+                leaf structure-id {
+                    type core-model:universal-id;
+                    config false;
+                    description "Identifies the Structure for bundling and container.";
+                }
+                list supported-tdm-structure-types-list {
+                    key 'tdm-structure-name';
+                    config false;
+                    min-elements 1;
+                    uses tdm-structure-type-g;
+                    description "Lists the TDM frame types that are supported.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device.";
+                }
+                description "Describes the logical structuring of the physical capacity provided by a hybrid microwave device (TDM + Ethernet). Segmentation is available. TDM transport is available.";
+            }
+            grouping hybrid-mw-structure-configuration-g {
+                container structure-type {
+                    uses tdm-structure-type-g;
+                    description "TDM frame to be applied.";
+                }
+                leaf number-of-tdm-segments-to-be-reserved {
+                    type int16;
+                    default -1;
+                    description "Allows to configure the number of segments reserved for TDM frames of the type specified in HybridMwStructure::HybridMwStructureConfiguration::structureType";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    uses structure-problem-severity-type-g;
+                    description "Severity of the type of problem to be configured.";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-status-g {
+                list segment-status-list {
+                    key 'segment-status-type-id';
+                    config false;
+                    uses segment-status-type-g;
+                    description "Status of each segment (all TDM and one Ethernet). Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the last update of the status information.  ";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses structure-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses structure-current-performance-type-g;
+                    description "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+                }
+                description "Aggregated performance information of the structure of a hybrid microwave at a particular moment.";
+            }
+            grouping hybrid-mw-structure-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses structure-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval.";
+            }
+            feature hybrid-microwave {
+                description "Feature 'hybrid-microwave' is mandatory for device types transporting Ethernet + TDM.";
+            }
+
+        /***********************
+        * package ethernet-container
+        **********************/ 
+            list mw-ethernet-container-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container ethernet-container-capability {
+                    config false;
+                    uses ethernet-container-capability-g;
+                    description "none";
+                }
+                container ethernet-container-configuration {
+                    uses ethernet-container-configuration-g;
+                    description "none";
+                }
+                container ethernet-container-status {
+                    config false;
+                    uses ethernet-container-status-g;
+                    description "none";
+                }
+                container ethernet-container-current-problems {
+                    config false;
+                    uses ethernet-container-current-problems-g;
+                    description "none";
+                }
+                container ethernet-container-current-performance {
+                    config false;
+                    uses ethernet-container-current-performance-g;
+                    description "none";
+                }
+                container ethernet-container-historical-performances {
+                    config false;
+                    uses ethernet-container-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping ethernet-container-capability-g {
+                leaf bundling-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "This attribute has to be set on 'true', if the device allows combining resources from several air interfaces for transporting this Ethernet container.";
+                }
+                leaf packet-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case packet compression can be activated, but not configured to a certain type, packetCompressionAvail shall be set on 'true', but none of the compression level specific booleans.";
+                }
+                leaf layer2-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 2 available at the device.";
+                }
+                leaf vlan-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on VLAN layer available at the device.";
+                }
+                leaf q-in-q-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer of a second VLAN available at the device.";
+                }
+                leaf mpls-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on mpls layer available at the device.";
+                }
+                leaf ipv4-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 3 for IPv4 available at the device.";
+                }
+                leaf ipv6-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 3 for IPv6 available at the device.";
+                }
+                leaf layer4-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 4 (TCP and UDP header) available at the device.";
+                }
+                leaf encryption-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Shall be marked 'true', if Ethernet payload encryption is available.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device.";
+                }
+                description "none";
+            }
+            grouping ethernet-container-configuration-g {
+                leaf container-id {
+                    type string;
+                    default "No Ethernet Flow associated yet.";
+                    description "ContainterID in Netconf must be the same as EthernetPortID in OpenFlow so a connection can be made between the two items, which separately exist in the controller.";
+                }
+                list segments-id-list {
+                    key 'structure-id-ref segment-id-ref';
+                    min-elements 1;
+                    uses segment-id-type-g;
+                    description "Lists the segments used for transporting this Ethernet container. In case EthernetContainer::ContainerCapability::bundlingIsAvail==0, all TypeDefinitions::segmentIdType::structureId must be identical in the list.";
+                }
+                leaf packet-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "In case packet compression is activated, but no type is activated, it is assumed that the device chooses the optimum.";
+                }
+                leaf layer2-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 2 configured at the device.";
+                }
+                leaf vlan-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on VLAN layer configured at the device.";
+                }
+                leaf q-in-q-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer of a second VLAN configured at the device.";
+                }
+                leaf mpls-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on MPLS layer configured at the device.";
+                }
+                leaf ipv4-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 3 for IPv4 configured at the device.";
+                }
+                leaf ipv6-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 3 for IPv6 configured at the device.";
+                }
+                leaf layer4-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 4 (TCP and UDP header) configured at the device.";
+                }
+                leaf encryption-is-on {
+                    type boolean;
+                    default false;
+                    description "Activates encryption of the Ethernet payload.";
+                }
+                leaf cryptographic-key {
+                    type string;
+                    default "Cryptographic key not yet defined.";
+                    description "Key for transforming plaintext into cipher text data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 2;
+                    uses container-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping ethernet-container-status-g {
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Container entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping ethernet-container-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses container-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping ethernet-container-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses container-current-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the Ethernet container at a particular moment.";
+            }
+            grouping ethernet-container-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses container-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the Ethernet container for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package tdm-container
+        **********************/ 
+            list mw-tdm-container-pac {
+                if-feature hybrid-microwave;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container tdm-container-capability {
+                    config false;
+                    uses tdm-container-capability-g;
+                    description "none";
+                }
+                container tdm-container-configuration {
+                    uses tdm-container-configuration-g;
+                    description "none";
+                }
+                container tdm-container-status {
+                    config false;
+                    uses tdm-container-status-g;
+                    description "none";
+                }
+                container tdm-container-current-problems {
+                    config false;
+                    uses tdm-container-current-problems-g;
+                    description "none";
+                }
+                container tdm-container-current-performance {
+                    config false;
+                    uses tdm-container-current-performance-g;
+                    description "none";
+                }
+                container tdm-container-historical-performances {
+                    config false;
+                    uses tdm-container-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping tdm-container-capability-g {
+                list supported-tdm-container-types-list {
+                    key 'tdm-container-name';
+                    config false;
+                    min-elements 1;
+                    uses tdm-container-type-g;
+                    description "Lists the TDM containers that are supported.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device.";
+                }
+                description "Bundling is not available.";
+            }
+            grouping tdm-container-configuration-g {
+                leaf container-id {
+                    type string;
+                    default "No TDM Flow associated yet.";
+                    description "ContainterID in Netconf must be the same as TDM Flow ID so a connection can be made between the two items, which separately exist in the controller.";
+                }
+                container container-type {
+                    uses tdm-container-type-g;
+                    description "Type of TDM container.";
+                }
+                container segment-id {
+                    uses segment-id-type-g;
+                    description "Multiplicity = 1; One segment per TDM container; Type of segment must match type of container;";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 2;
+                    uses container-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping tdm-container-status-g {
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Container entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping tdm-container-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses container-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping tdm-container-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses container-current-performance-type-g;
+                    description "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+                }
+                description "Aggregated performance information of the TDM container at a particular moment.";
+            }
+            grouping tdm-container-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses container-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the TDM container for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package super-classes
+        **********************/ 
+            grouping mw-current-problem-g {
+                leaf sequence-number {
+                    type int32;
+                    config false;
+                    description "Unique sequence number of the current problem object.";
+                }
+                leaf time-stamp {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the problem.  ";
+                }
+                leaf problem-severity {
+                    type severity-type;
+                    default warning;
+                    config false;
+                    description "Severity of the alarm.";
+                }
+                description "none";
+            }
+
+
+    /***********************
+    * package notifications
+    **********************/ 
+        notification object-creation-notification {
+            uses object-creation-notification-g;
+            description "none";
+        }
+        grouping object-creation-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts object creation notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac.";
+            }
+            leaf object-type {
+                type string;
+                default "Type of created object not specified.";
+                description "Type of Object to be chosen from the following list of values: 'MW_AirInterface_Pac', 'MW_AirInterfaceDiversity_Pac', 'MW_Structure_Pac', 'MW_PureEthernetStructure_Pac', 'MW_HybridMwStructure_Pac', 'MW_Container_Pac', 'MW_EthernetContainer_Pac' or 'MW_TdmContainer_Pac'.";
+            }
+            description "To be sent when a new MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac has to be instancieted in the controller.";
+        }
+        notification object-deletion-notification {
+            uses object-deletion-notification-g;
+            description "none";
+        }
+        grouping object-deletion-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts object deletion notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac.";
+            }
+            description "To be sent when a new MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac instance has to be deleted in the controller.";
+        }
+        notification attribute-value-changed-notification {
+            uses attribute-value-changed-notification-g;
+            description "none";
+        }
+        grouping attribute-value-changed-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts attribute value changed notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac.";
+            }
+            leaf attribute-name {
+                type string;
+                default "Attribute name not specified.";
+                description "Name of the attribute that has been changed.";
+            }
+            leaf new-value {
+                type string;
+                default "New value not specified.";
+                description "Attribute value converted to a string (xml, json, ...)";
+            }
+            description "To be sent when an attribute has changed and one or more controllers have to update their data.";
+        }
+        notification problem-notification {
+            uses problem-notification-g;
+            description "none";
+        }
+        grouping problem-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts problem notifications";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac.";
+            }
+            leaf problem {
+                type string;
+                default "Problem name not specified.";
+                description "Name of the problem according to AirInterface::AirInterfaceCapability::supportedAlarms or AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms or Structure::StructureCapability::supportedAlarms or PureEthernetStructure::PureEthernetStructureCapability::supportedAlarms or HybridMwStructure::HybridMwStructureCapability::supportedAlarms or Container::ContainerCapability::supportedAlarms or EthernetContainer::EthernetContainerCapability::supportedAlarms or TdmContainer::TdmContainerCapability::supportedAlarms.";
+            }
+            leaf severity {
+                type severity-type;
+                default warning;
+                description "Severity of the problem according to AirInterface::AirInterfaceConfiguration::problemSeverityList, AirInterfaceDiversity::AirInterfaceDiversityConfiguration::problemSeverityList, Structure::StructureConfiguration::problemSeverityList, PureEthernetStructure::PureEthernetStructureConfiguration::problemSeverityList, HybridMwStructure::HybridMwStructureConfiguration::problemSeverityList, Container::ContainerConfiguration::problemSeverityList, EthernetContainer::EthernetContainerConfiguration::problemSeverityList or TdmContainer::TdmContainerConfiguration::problemSeverityList";
+            }
+            description "To be sent when a problem occurs at a MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac.";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/microwave-model@2018-09-07.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/microwave-model@2018-09-07.yang
new file mode 100644
index 0000000..db94e09
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/microwave-model@2018-09-07.yang
@@ -0,0 +1,2567 @@
+module microwave-model {
+    namespace "urn:onf:params:xml:ns:yang:microwave-model";
+    prefix microwave-model;
+
+    import core-model {
+        prefix core-model;
+    }
+    import g.874.1-model {
+        prefix g;
+    }
+    import ietf-yang-types {
+        prefix yang;
+    }
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/software-defined-standards/models-apis/>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Shrikanth Malavalli Divakar
+                       <mailto:shrikanth.divakar@wipro.com>";					   
+    description "This module contains a collection of YANG definitions for managing wireless networks.
+        This model is for vendor agnostic management of wireless network elements.";
+    revision 2018-09-07 {
+        description "Version 1.1";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+	
+    revision 2017-03-24 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+	
+    /***********************
+    * package type-definitions
+    **********************/ 
+        typedef loop-back-type {
+            type enumeration {
+                enum rf-to-remote {
+                    description "Returning the header information of the remote site back to the remote site on the radio interface between both outdoor units.";
+                }
+                enum rf-to-local {
+                    description "Returning the header information of the local site back to the local site on the radio interface between both outdoor units.";
+                }
+                enum if-to-remote {
+                    description "Returning the header information of the remote site back to the remote site on the intermediate frequency interface between local indoor unit and outdoor unit.";
+                }
+                enum if-to-local {
+                    description "Returning the header information of the local site back to the local site on the intermediate frequency interface between local indoor unit and outdoor unit.";
+                }
+                enum none {				
+                    description "none";
+                }
+                enum if {
+					status deprecated;
+                    description "Intermediate Frequency on the interface between indoor and outdoor unit.";
+                }
+                enum rf {
+					status deprecated;
+                    description "Radio Frequency on the interface between outdoor unit and outdoor unit at the remote site.";
+                }
+            }
+            description "none";
+        }
+        typedef severity-type {
+            type enumeration {
+                enum non-alarmed {
+                    description "none";
+                }
+                enum warning {
+                    description "none";
+                }
+                enum minor {
+                    description "none";
+                }
+                enum major {
+                    description "none";
+                }
+                enum critical {
+                    description "none";
+                }
+            }
+            description "According to ITU-T M.3160";
+        }
+        grouping channel-plan-type-g {
+            leaf supported-channel-plan {
+                type string;
+                config false;
+                description "Unique name (e.g. ECC/REC/(01)04_Annex 5) of a document, which describes a frequency grid that can be adjusted at the air interface. Corresponding channel plans to be delivered by the hardware vendor and to be stored by the operator in an controller/application attached database.";
+            }
+            leaf duplex-distance-is-variable {
+                type boolean;
+                default false;
+                config false;
+                description "To be set on  'true', if the distance between transmitted and received frequency is variable.";
+            }
+            leaf-list duplex-distance-list {
+                type int32;
+                units "kHz";
+                config false;
+                min-elements 1;
+                description "Distance between transmitted and received frequency. To be filled with single value, in case duplex distance is not variable. To be filled with all configurable values, in case duplex distance is variable.";
+            }
+            leaf duplex-distance {
+                type int32;
+                units "kHz";
+                default -1;
+                config false;
+				status deprecated;
+                description "Distance between transmitted and received frequency.";
+            }
+            leaf auto-freq-select-is-avail {
+                type boolean;
+                default false;
+                config false;
+                description "In case the microwave radio is capable of automatically selecting the transmit frequency in unlicensed bands, this field shall contain a 'true'.";
+            }
+            list transmission-mode-list {
+                key 'transmission-mode-id';
+                config false;
+                min-elements 1;
+                uses transmission-mode-type-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping transmission-mode-type-g {
+            leaf transmission-mode-id {
+                type core-model:universal-id;
+                description "Indentifies the transmissionMode for internal reference.";
+            }
+            leaf transmission-mode-name {
+                type string;
+                default "Name of the transmission mode not yet defined.";
+                config false;
+                description "Name of the transmission mode. BBBB-m*-i*/t*-r*. B=four digits of channel bandwidth in MHz. m*=required number of digits for modulation name. (i*/t*=code rate.) i*=required number of digits for number of information bits. t*=required number of digits for total bits. r*=required number of digits for rate reduction factor. Example: 028-4QAM-188/204-1";
+            }
+            leaf channel-bandwidth {
+                type int32;
+                units "kHz";
+                default -1;
+                config false;
+                description "Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;";
+            }
+            leaf modulation-scheme {
+                type int16;
+                units "symbols";
+                default -1;
+                config false;
+                description "Modulation scheme, which is base to the other characteristics described in the same transmissionModeType data type. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256').";
+            }
+            leaf code-rate {
+                type int8;
+                units "%";
+                default -1;
+                config false;
+                description "Code rate of the coding scheme in % (Net bit rate ≤ Gross bit rate · code rate).";
+            }
+            leaf symbol-rate-reduction-factor {
+                type int8;
+                default 1;
+                config false;
+                description "Reduction factor for the symbol rate. Example: value would be 4 for 1/4BPSK.";
+            }
+            leaf tx-power-min {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Value of the minimum transmit power the modem can operate in dBm.";
+            }
+            leaf tx-power-max {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Value of the maximum transmit power the modem can operate in dBm.";
+            }
+            leaf rx-threshold {
+                type int16;
+                units "dBm";
+                default 99;
+                config false;
+                description "Value of the receive level required to decode the received signal with a Bit Error Rate of 1e-6 or less.";
+            }
+            leaf am-upshift-level {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Value of the receive level that has to be exceeded to shift into a higher modulation scheme.";
+            }
+            leaf am-downshift-level {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Value of the receive level that has to be exceeded for not shifting into a lower modulation scheme.";
+            }
+            leaf xpic-is-avail {
+                type boolean;
+                default false;
+                config false;
+                description "In case this air interface type is capable of XPIC, this field shall contain a 'true'. This information shall purely relate to capabilities of the equipment type, but not to the operational capability of a specific hardware composition on site. Means for example that this attribute might contain a 'true' statement, even if an additional cable would have been required to actually operate XPIC in a specific case.";
+            }
+            description "none";
+        }
+        typedef polarization-type {
+            type enumeration {
+                enum not-specified {
+                    description "none";
+                }
+                enum horizontal {
+                    description "none";
+                }
+                enum vertical {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef g826-type {
+            type enumeration {
+                enum es {
+                    description "Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::es .";
+                }
+                enum ses {
+                    description "Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::ses .";
+                }
+                enum cses {
+                    description "Consecutive Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::cses .";
+                }
+                enum not-specified {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+		
+        grouping threshold-cross-alarm-type-g {
+            leaf g826-value-kind {
+                type g826-type;
+                description "Kind of performance value that shall be equipped with a threshold alarm.";
+            }
+            leaf granularity-period {
+                type g:granularity-period-type;
+                description "Period of the performance data collection.";
+            }
+            leaf alarm-raising-threshold {
+                type int32;
+                units "s";
+                default -1;
+                description "Number of events required for raising the threshold cross alarm.";
+            }
+            leaf alarm-clearing-threshold {
+                type int32;
+                units "s";
+                default -1;
+                description "Number of events required for clearing the threshold cross alarm.";
+            }
+            description "Allows defining a threshold cross alarm.
+                ";
+        }
+        grouping air-interface-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping air-interface-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping time-x-states-type-g {
+            leaf transmission-mode {
+				type leafref{
+					path '/mw-air-interface-pac/air-interface-capability/supported-channel-plan-list/transmission-mode-list/transmission-mode-id';
+				}
+                config false;
+                description "Operated transmission mode.";
+            }
+            leaf time {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Sum of all seconds the transmitter operated the transmission mode.";
+            }
+            description "none";
+        }
+        grouping air-interface-performance-type-g {
+            leaf es {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Number of errored seconds.";
+            }
+            leaf ses {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Number of severely errored seconds.";
+            }
+            leaf cses {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Number of consecutive severely errored seconds.";
+            }
+            leaf unavailability {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Total time of unavailability in seconds.";
+            }
+            leaf tx-level-min {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Minimum transmit power. Signed integers are required.";
+            }
+            leaf tx-level-max {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Maximum transmit power. Signed integers are required.";
+            }
+            leaf tx-level-avg {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Averaged transmit power. Signed integers are required.";
+            }
+            leaf rx-level-min {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Minimum receive level. Signed integers are required.";
+            }
+            leaf rx-level-max {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Maximum receive level. Signed integers are required.";
+            }
+            leaf rx-level-avg {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Averaged receive level. Signed integers are required.";
+            }
+            list time-x-states-list {
+				key 'transmission-mode';
+                config false;
+                min-elements 1;
+                uses time-x-states-type-g;
+                description "Time period the transmitter operated in the respective transmission mode.";
+            }
+            leaf time2-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;
+                description "Sum of all seconds the transmitter operated in e.g. BPSK.";
+            }
+            leaf time4-states-s {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;	
+                description "none";
+            }
+            leaf time4-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time8-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time16-states-s {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time16-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time32-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time64-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;
+                description "none";
+            }
+            leaf time128-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time256-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time512-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time512-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;
+                description "none";
+            }
+            leaf time1024-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time1024-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;
+                description "none";
+            }
+            leaf time2048-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time2048-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;
+                description "none";
+            }
+            leaf time4096-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time4096-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time8192-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time8192-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf snir-min {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Minimum signal to (noise+interference) ratio.";
+            }
+            leaf snir-max {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Maximum signal to (noise+interference) ratio.";
+            }
+            leaf snir-avg {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Averaged signal to (noise+interference) ratio.";
+            }
+            leaf xpd-min {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Minimum cross polarization discrimination.";
+            }
+            leaf xpd-max {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Maximum cross polarization discrimination.";
+            }
+            leaf xpd-avg {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Averaged cross polarization discrimination.";
+            }
+            leaf rf-temp-min {
+                type int8;
+                units "C";
+                default -99;
+                config false;
+                description "Lowest temperature (in degree Celsius) of the radio module inside the outdoor unit.";
+            }
+            leaf rf-temp-max {
+                type int8;
+                units "C";
+                default -99;
+                config false;
+                description "Highest temperature (in degree Celsius) of the radio module inside the outdoor unit.";
+            }
+            leaf rf-temp-avg {
+                type int8;
+                units "C";
+                default -99;
+                config false;
+                description "Averaged temperature (in degree Celsius) of the radio module inside the outdoor unit.";
+            }
+            leaf defect-blocks-sum {
+                type int16;
+                units "blocks";
+                default -1;
+                config false;
+                description "Total number of blocks that were defect after receiving and could not be corrected by the FEC.";
+            }
+            leaf time-period {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Total length of the measurement period.";
+            }
+            description "Consolidated performance information of the air interface.";
+        }
+        grouping air-interface-current-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping air-interface-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        typedef protection-type {
+            type enumeration {
+                enum hsb {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef role-type {
+            type enumeration {
+                enum working {
+                    description "none";
+                }
+                enum protection {
+                    description "none";
+                }
+                enum protected {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping diversity-type-g {
+            leaf diversity-name {
+                type string;
+                config false;
+                description "Names to be chosen from the following list: 'spaceDiversity', 'frequencyDiversity'";
+            }
+            leaf number-of-air-interfaces-max {
+                type int8;
+                units "air interfaces";
+                default 1;
+                config false;
+                description "Maximum number of air interfaces that could be part of this kind of diversity.";
+            }
+            description "none";
+        }
+        typedef air-interface-diversity-status-type {
+            type enumeration {
+                enum group-down {
+                    description "All air interfaces that are members of the diversity configuration are down.";
+                }
+                enum not-all-ai-active {
+                    description "At least one, but not all of the air interfaces that are part of the diversity configuration is not working.";
+                }
+                enum all-ai-active {
+                    description "All air interfaces that are part of the diversity configuration are working.";
+                }
+            }
+            description "none";
+        }
+        grouping air-interface-diversity-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping air-interface-diversity-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping air-interface-diversity-performance-type-g {
+            leaf snir-min {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Minimum signal to (noise+interference) ratio of the combined signals.";
+            }
+            leaf snir-max {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Maximum signal to (noise+interference) ratio of the combined signals.";
+            }
+            leaf snir-avg {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Average signal to (noise+interference) ratio of the combined signals.";
+            }
+            description "Consolidated performance information of the air interface diversity group.";
+        }
+        grouping air-interface-diversity-current-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-diversity-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping air-interface-diversity-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-diversity-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        grouping tdm-structure-type-g {
+            leaf tdm-structure-name {
+                type string;
+                config false;
+                description "Names to be chosen from the following list: 'e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'";
+            }
+            leaf tdm-segment-size {
+                type int32;
+                units "kbit/s";
+                default -1;
+                config false;
+                description "Size of the TDM segment in kbit/s. Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;";
+            }
+            leaf max-number-of-segments-reservable {
+                type int8;
+                units "segments";
+                default -1;
+                config false;
+                description "Device specific maximum number of segments (not depending on current air interface configuration) that can be reserved for this type of segment on a single air interface.";
+            }
+            description "none";
+        }
+        grouping structure-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping structure-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping structure-performance-type-g {
+            leaf time-period {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Total length of the measurement period in seconds.";
+            }
+            leaf es {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Number of errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals.";
+            }
+            leaf ses {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Number of severely errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals.";
+            }
+            leaf cses {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Number of consecutive severely errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals.";
+            }
+            leaf unavailability {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Total time of unavailability in seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals.";
+            }
+            leaf rx-level-min {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Minimum receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value.";
+            }
+            leaf rx-level-max {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Maximum receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value.";
+            }
+            leaf rx-level-avg {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Averaged receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value.";
+            }
+            description "Consolidated performance information of the Structure.";
+        }
+        grouping structure-current-performance-type-g {
+            container performance-data {
+                config false;
+                uses structure-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping structure-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses structure-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        grouping container-type-g {
+            leaf container-name {
+                type string;
+                config false;
+                description "Names to be chosen from the following list: 'ethernet','e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'";
+            }
+            leaf number-of-time-slots-required {
+                type int16;
+                units "timeslots";
+                default -1;
+                config false;
+                description "Number of time slots required for transporting this type of container. Value must be calculated by the vendor after defining the timeSlotCapacity. For containers of fixed size: numberOfTimeSlotsRequired = required bandwidth of the container divided by timeSlotCapacity. For containers of variable size the minimum (most probably 1) is to be stated.";
+            }
+            leaf tdm-time-slots-is-required {
+                type boolean;
+                default false;
+                config false;
+                description "Shall be set to '1', if this container type requires bandwidth (times slots) reserved for TDM transport.";
+            }
+            leaf bundling-is-avail {
+                type boolean;
+                default false;
+                config false;
+                description "If it is possible to combine transport resources of several radio links to transport this container type, this attribute shall be set to '1'.";
+            }
+            description "none";
+        }
+        grouping tdm-container-type-g {
+            leaf tdm-container-name {
+                type string;
+                config false;
+                description "Names to be chosen from the following list: 'e1','t1','j1','e3','t3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'";
+            }
+            leaf tdm-container-size {
+                type int32;
+                units "kbit/s";
+                default -1;
+                config false;
+                description "Capacity required for transporting this type of container (in kbit/s). Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;";
+            }
+            description "none";
+        }
+        grouping segment-id-type-g {
+            leaf structure-id-ref {
+                type core-model:universal-id;
+                description "none";
+            }
+            leaf segment-id-ref {
+                type int16;
+                description "Combinations of structureId and segmentId must be unique inside the device to assure that every resource is used just once.";
+            }
+            description "Identifies the segments, which are used to transport the container.";
+        }
+        grouping segment-status-type-g {
+            leaf segment-status-type-id {
+                type int16;
+                config false;
+                description "none";
+            }
+            leaf segment-is-reserved-for-tdm {
+                type boolean;
+                default false;
+                config false;
+                description "The number of segments, which is configured by Structure::StructureConfiguration::tdmReservedNumberOfSegements, has to be reserved for TDM. Starting from the lowest index value, these segments have to be marked with a 'true' in segmentIsReservedForTdm.
+                    ";
+            }
+            leaf operational-status {
+                type core-model:operational-state;
+                default disabled;
+                config false;
+                description "Current operational status of each segment.";
+            }
+            leaf obsolete-priority-class {
+                type int8;
+                default -1;
+                config false;
+                description "PriorityClass as inherited from the associated Container::ContainerConfiguration::priorityClass. In case the device is capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, priorityClass shall be considered, while calculating the dropOrderRank.";
+            }
+            leaf obsolete-drop-order-rank {
+                type int16;
+                default -1;
+                config false;
+                description "In case the device is NOT capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, dropOrderRank is number of segments minus sequence number of the segment. In case the device is capable of adapting the sequence, dropOrderRank has to be calculated by the device in dependency to the assigned priorityClass. 
+                    _unique: within Structure::StructureStatus::segmentStatusList";
+            }
+            description "none";
+        }
+        grouping container-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping container-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping container-performance-type-g {
+            leaf tx-ethernet-bytes-max-s {
+                type int32;
+                units "Bytes/s";
+                default -1;
+                config false;
+                description "Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a second and keeps the highest value within the measurement period. Field to be left blank for all types of TDM containers.";
+            }
+            leaf tx-ethernet-bytes-max-m {
+                type int64;
+                units "Bytes/min";
+                default -1;
+                config false;
+                description "Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a minute and keeps the highest value with in the measurement period. Field to be left blank for all types of TDM containers.";
+            }
+            leaf tx-ethernet-bytes-sum {
+                type int64;
+                units "Bytes";
+                default -1;
+                config false;
+                description "Total number of Bytes of Ethernet traffic (before header compression) transmitted (in direction out of the device) during the measurement period. Field to be left blank for all types of TDM containers.";
+            }
+            leaf time-period {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Total length of the measurement period in seconds.";
+            }
+            description "Consolidated performance information of the Container.";
+        }
+        grouping container-current-performance-type-g {
+            container performance-data {
+                config false;
+                uses container-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping container-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses container-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+
+    /***********************
+    * package object-classes
+    **********************/ 
+        /***********************
+        * package air-interface
+        **********************/ 
+            list mw-air-interface-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container air-interface-capability {
+                    config false;
+                    uses air-interface-capability-g;
+                    description "none";
+                }
+                container air-interface-configuration {
+                    uses air-interface-configuration-g;
+                    description "none";
+                }
+                container air-interface-status {
+                    config false;
+                    uses air-interface-status-g;
+                    description "none";
+                }
+                container air-interface-current-problems {
+                    config false;
+                    uses air-interface-current-problems-g;
+                    description "none";
+                }
+                container air-interface-current-performance {
+                    config false;
+                    uses air-interface-current-performance-g;
+                    description "none";
+                }
+                container air-interface-historical-performances {
+                    config false;
+                    uses air-interface-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-capability-g {
+                leaf type-of-equipment {
+                    type string;
+                    default "Type of equipment not yet defined.";
+                    config false;
+                    description "This parameter indicates the equipment type. Instead of uploading the complete set of capabilities, capabilities of the same equipment type could be reused. Should be unique for a combination of modem, radio and their respective firmware.";
+                }
+                leaf tx-frequency-min {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    config false;
+                    description "Value of the minimum transmit frequency tunable at the air interface.";
+                }
+                leaf tx-frequency-max {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    config false;
+                    description "Value of the maximum transmit frequency tunable at the air interface.";
+                }
+                leaf rx-frequency-min {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    config false;
+                    description "Value of the minimum receive frequency tunable at the air interface.";
+                }
+                leaf rx-frequency-max {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    config false;
+                    description "Value of the maximum receive frequency tunable at the air interface.";
+                }
+                leaf adaptive-modulation-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case the device is capable of adaptive modulation, this field shall contain a 'true'.";
+                }
+                leaf mimo-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case the device is capable of MIMO, this field shall contain a 'true'.";
+                }
+                leaf mimo-channels {
+                    type int8;
+                    units "channels";
+                    default 1;
+                    config false;
+                    description "Maximum number (n) of spatial multiplexing streams that can be conveyed by an n x n MIMO configuration.";
+                }
+                leaf alic-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case the microwave radio is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), this field shall contain a 'true'.";
+                }
+                leaf atpc-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case the microwave radio is capable of ATPC, this field shall contain a 'true'.";
+                }
+                leaf atpc-range {
+                    type int8;
+                    units "dB";
+                    default 0;
+                    config false;
+                    description "Extent of the ATPC range. This value represents a device specific maximum value. The actual range of the ATPC at a specific link might be limited by the difference between configured transmit power (AirInterface::AirInterfaceConfiguration::txPower) and minimum transmit power of the device (TypeDefinitions::TransmissionModeType::txPowerMin).";
+                }
+                leaf encryption-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Shall be marked 'true', if payload encryption is available.";
+                }
+                leaf-list supported-loop-back-kind-list {
+                    type loop-back-type;
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    description "List of supported kinds of looping back of header information to the remote site.";
+                }
+                leaf maintenance-timer-range {
+                    type string;
+                    units "s";
+                    default "Range of the maintenance timer not yet defined.";
+                    config false;
+                    description "Available time periods for maintenance configurations (e.g. the loop back of microwave header information) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360').";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    min-elements 7;
+                    description "Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','signalIDMismatching','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+					status deprecated;
+                    description "Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                list supported-channel-plan-list {
+                    key 'supported-channel-plan';
+                    config false;
+                    min-elements 1;
+                    uses channel-plan-type-g;
+                    description "List of channel spacing that are supported by the device.";
+                }
+                description "Describes the 'analog' capabilities of modem and transmitter of the microwave device. Value ranges of attributes are not independently (e.g. min. and max. transmit power depends on modulation). Legal combinations of values are expressed in transmissionModeTypes.";
+            }
+            grouping air-interface-configuration-g {
+                leaf air-interface-name {
+                    type string;
+                    default "Air interface ID not yet defined.";
+                    description "Operator specific microwave link ID (often used for coding area, type of element and sequential number).";
+                }
+                leaf remote-air-interface-name {
+                    type string;
+                    default "Air interface ID at the remote site not yet defined.";
+                    description "Name of the air interface, which belongs to the same link, at the remote site.";
+                }
+                leaf expected-signal-id {
+                    type int16;
+                    description "If set on '0', the receiver ignores the signal ID of the received signal. If set on any other value, the receiver exclusively synchronizes on signals with the same signal ID.";
+                }
+                leaf transmitted-signal-id {
+                    type int16;
+                    description "Transmitted radio signal ID for synchronizing the receiver.";
+                }
+                leaf radio-signal-id {
+                    type string;
+                    default "Radio signal ID not yet defined.";
+					status deprecated;
+                    description "The radioSignalId is transmitted on the air interface so the remote site of the link synchronizes on the correct transmitter. The local radio MUST NOT synchronize on a radio signal with a different radioSignalId. The link ID is neither an ID necessary to span the model nor an ID referencing external data. It is just some sort of name of the link transmitted so the correct remote site can be identified in an interference situation. The value zero might be used to make the microwave to disable the link ID check.";
+                }
+                leaf tx-frequency {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    description "Center frequency of the transmit channel. The values to be configured have to exactly match the values listed in the international agreement referenced in channelPlanID. In case of automated selection of the transmit frequency this field shall describe the lowest center frequency selectable.";
+                }
+                leaf rx-frequency {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    description "Center frequency of the receive channel.";
+                }
+                leaf transmission-mode-min {
+					type core-model:universal-id;
+                    description "Minimum transmission mode to be configured (in case adaptive modulation is not used, this value represents also the fixed transmission mode).";
+                }
+                leaf transmission-mode-max {
+					type core-model:universal-id;
+                    description "Maximum transmission mode to be configured.";
+                }
+                leaf tx-channel-bandwidth {
+                    type int32;
+                    units "kHz";
+                    default -1;
+					status deprecated;
+                    description "Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;";
+                }
+                leaf rx-channel-bandwidth {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    description "Bandwidth of the receive channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;";
+                }
+                leaf polarization {
+                    type polarization-type;
+                    default not-specified;
+                    description "Allows documenting the polarization of the air interface.";
+                }
+                leaf power-is-on {
+                    type boolean;
+                    default true;
+                    description "Power ON. Activation of the entire radio in a split mount configuration shall be expressed as a 'true'.";
+                }
+                leaf transmitter-is-on {
+                    type boolean;
+                    default false;
+                    description "Activation of the transmitter inside the radio shall be expressed as a 'true'.";
+                }
+                leaf receiver-is-on {
+                    type boolean;
+                    default true;
+                    description "Maintenance Feature. Activation of the receiver inside the radio shall be expressed as a 'true'. Attribute shall also be used for RX main and RX diversity squelches in case of diversity configurations.
+                        ";
+                }
+                leaf tx-power {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    description "Transmit power to be configured on the microwave link. Signed Byte is required. The actually operated transmit power might be lower depending on adaptive modulation and ATPC.";
+                }
+                leaf adaptive-modulation-is-on {
+                    type boolean;
+                    default false;
+                    description "Adaptive Modulation. Activation of adaptive modulation shall be expressed as a 'true'.";
+                }
+                leaf modulation-min {
+                    type int16;
+                    units "symbols";
+                    default -1;
+					status deprecated;
+                    description "Minimum modulation to be configured (in case adaptive modulation is not used, this value represents also the fixed modulation). The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf modulation-max {
+                    type int16;
+                    units "symbols";
+                    default -1;
+					status deprecated;
+                    description "Maximum modulation to be configured. The value of this field is only relevant, if Adaptive Modulation has been activated. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf xpic-is-on {
+                    type boolean;
+                    default false;
+                    description "Activation of Cross Polarization Interference Cancelation shall be expressed as a 'true'. In case XPIC is not available for the current combination of channel bandwidth and modulation or the hardware in general, this parameter shall always be set to 'false'.";
+                }
+                leaf mimo-is-on {
+                    type boolean;
+                    default false;
+                    description "Activation of Multiple Input Multiple Output (MIMO) shall be expressed as a 'true'.";
+                }
+                leaf alic-is-on {
+                    type boolean;
+                    default false;
+                    description "Activation of Adjacent Link Interference Cancelation (ALIC) shall be expressed as a 'true'.";
+                }
+                leaf atpc-is-on {
+                    type boolean;
+                    default false;
+                    description "ATPC. Activation of Automated Transmit Power Control shall be expressed as a 'true'.";
+                }
+                leaf atpc-thresh-upper {
+                    type int16;
+                    units "dBm";
+                    default 99;
+                    description "If the receive level is higher than the upper threshold value, the transmitter is notified to decrease transmit power.";
+                }
+                leaf atpc-thresh-lower {
+                    type int16;
+                    units "dBm";
+                    default 99;
+                    description "If the receive level is lower than the lower threshold value, the transmitter is notified to increase transmit power.";
+                }
+                leaf atpc-tx-power-min {
+                    type int8;
+                    units "dBm";
+                    default -99;
+                    description "Transmit power, which is not to be undercut, while operating ATPC.";
+                }
+                leaf auto-freq-select-is-on {
+                    type boolean;
+                    default false;
+                    description "Activation of automatically selecting the transmit frequency in unlicensed bands shall be expressed as a 'true'.";
+                }
+                leaf auto-freq-select-range {
+                    type int8;
+                    units "channels";
+                    default -1;
+                    description "Number of transmit channels (starting at the center frequency defined in txFrequency and with channel bandwidth according to txChannelBandwidth) that define the range within the transmit frequency can automatically been chosen. ";
+                }
+                leaf modulation-is-on {
+                    type boolean;
+                    default true;
+                    description "Maintenance Feature. De-activation of the modulation of the carrier signal for fault management shall be expressed as a 'false'.";
+                }
+                leaf encryption-is-on {
+                    type boolean;
+                    default false;
+                    description "Activates encryption of the payload.";
+                }
+                leaf cryptographic-key {
+                    type string;
+                    default "Cryptographic key not yet defined.";
+                    description "Key for transforming plaintext into ciphertext data.";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list threshold-cross-alarm-list {
+                    key 'g826-value-kind granularity-period';
+                    max-elements 6;
+                    uses threshold-cross-alarm-type-g;
+                    description "List of threshold cross alarms to be configured.";
+                }
+                leaf loop-back-kind-on {
+                    type loop-back-type;
+                    default none;
+                    description "Maintenance Feature. The currently configured type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site.";
+                }
+                leaf maintenance-timer {
+                    type int32;
+                    units "s";
+                    default -1;
+                    description "Time of existence of any maintenance configuration (e.g. the loop back of microwave header information). Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 6;
+                    uses air-interface-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "Configuration of the radio link.";
+            }
+            grouping air-interface-status-g {
+                leaf tx-frequency-cur {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    config false;
+                    description "Center frequency of the currently operated transmit channel.";
+                }
+                leaf rx-frequency-cur {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    config false;
+                    description "Center frequency of the currently operated receive channel.";
+                }
+                leaf tx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current transmit level.";
+                }
+                leaf rx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current receive level.";
+                }
+                leaf transmission-mode-cur {
+					type leafref {
+						path '/mw-air-interface-pac/air-interface-capability/supported-channel-plan-list/transmission-mode-list/transmission-mode-id';
+					}    
+					config false;
+                    description "Currently operated transmission mode according to definitions in Capabilities.";
+                }
+                leaf modulation-cur {
+                    type int16;
+                    units "symbols";
+                    default -1;
+                    config false;
+					status deprecated;
+                    description "Currently operated modulation on transmit path. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf code-rate-cur {
+                    type int8;
+                    units "%";
+                    default -1;
+                    config false;
+					status deprecated;
+                    description "Code rate of the currently operated coding scheme (Net bit rate ? Gross bit rate ? code rate).";
+                } 
+                leaf received-signal-id {
+                    type int16;
+                    default -1;
+                    config false;
+                    description "ID of the signal, which the receiver is currently synchronized on.";
+                }
+                leaf snir-cur {
+                    type int8;
+                    units "dB";
+                    default -99;
+                    config false;
+                    description "Currently measured signal to (noise+interference) ratio.";
+                }
+                leaf xpd-cur {
+                    type int8;
+                    units "dB";
+                    default -99;
+                    config false;
+                    description "Currently measured cross polarization discrimination.";
+                }
+                leaf rf-temp-cur {
+                    type int8;
+                    units "Celsius";
+                    default -99;
+                    config false;
+                    description "Current temperature (in degree Celsius) of the radio module inside the outdoor unit.";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Air Interface entered its current operational status.  ";
+                }
+                leaf radio-power-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If the radio unit has power and is switched on, this shall be expressed as a 'true'.";
+                }
+                leaf link-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If connection is established to the remote site with the same linkID, this shall be expressed as a 'true'.";
+                }
+                leaf xpic-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If XPIC is currently actually working (not just configured), this shall be expressed as a 'true'.";
+                }
+                leaf mimo-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If MIMO is currently actually working (not just configured), this shall be expressed as a 'true'.";
+                }
+                leaf alic-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If Adjacent Link Interference Cancelation (ALIC) is currently actually working (not just configured), this shall be expressed as a 'true'.";
+                }
+                leaf atpc-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If ATPC is currently actually working (not just configured), this shall be expressed as a 'true'.";
+                }
+                leaf auto-freq-select-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If automated frequency selection is currently actually working (not just configured), this shall be expressed as a 'true'.";
+                }
+                leaf loop-back-kind-up {
+                    type loop-back-type;
+                    default none;
+                    config false;
+                    description "The currently active (not just configured) type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site.";
+                }
+                leaf local-end-point-id {
+                    type string;
+                    default "not-supported";
+                    config false;
+                    description "The value of the localEndPointId is a vendor specific identifier of the air interface, used by the node to discover a microwave radio link.";
+                }
+                leaf remote-end-point-id {
+                    type string;
+                    default "not-supported";
+                    config false;
+                    description "The value of the remoteEndPointId is a vendor specific identifier or the airinterface at the remote side, used to by the node to discover a microwave radio link.";
+                }
+                description "Measurements of current values on the air interface and operational status of the device.";
+            }
+            grouping air-interface-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses air-interface-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses air-interface-current-performance-type-g;
+                    description "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+                }
+                description "Aggregated performance information of the air interface at a particular moment.";
+            }
+            grouping air-interface-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses air-interface-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface for a pre-defined measurement interval.";
+            }
+            list co-channel-group {
+                key 'co-channel-group-id';
+                uses co-channel-group-g;
+                description "none";
+            }
+            grouping co-channel-group-g {
+                leaf co-channel-group-id {
+                    type core-model:universal-id;
+                    description "none";
+                }
+                leaf-list air-interface-list {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    description "List of air interfaces, which are part of the co-channel (XPIC, MIMO, ALIC) group.";
+                }
+                leaf sort-of-co-channel-group {
+                    type string;
+                    default "Kind of co-channel group not specified.";
+                    description "Type of group of air interfaces with the same transmit and receive frequency. The values shall be chosen from the following _list:'XPIC', 'MIMO', 'ALIC';";
+                }
+                leaf-list logical-termination-point {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+					status deprecated;
+                    description "none";
+                }
+                description "Required for configuring XPIC, MIMO and ALIC.";
+            }
+
+        /***********************
+        * package air-interface-hsb
+        **********************/ 
+            list mw-air-interface-hsb-end-point-pac {
+                key 'endpoint';
+                leaf role {
+                    type role-type;
+                    default working;
+                    description "none";
+                }
+                leaf endpoint {
+                    type leafref {
+                        path '/core-model:forwarding-construct/core-model:fc-port/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "The EndPoint (EP) object class models the access to the FC function. Each EndPoint instance has a role (e.g., working, protection, protected, hub, spoke, leaf, root, etc.) with respect to the FC function. The association of the FC to LTPs is made via EndPoints (essentially the ports of the FC) where each EndPoint (EP) of the FC has a role in the context of the FC. The traffic forwarding between the associated End PointsEPs of the FC depends upon the type of FC and may be associated with FCSwitch object instances. In cases where there is protection conveys the protecting role of the access to the FC.  The EP replaces the Protection Unit of a traditional protection model. It represents a protected (resilient/reliable) point or a protecting (unreliable working or protection) point.";
+            }
+            list mw-air-interface-hsb-fc-switch-pac {
+                key 'fcswitch';
+                leaf prot-type {
+                    type protection-type;
+                    default hsb;
+                    description "Indicates the protection scheme that is used for the ProtectionGroup.";
+                }
+                leaf air-interface-hsb-configuration-is-faulty-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity of an airInterfaceHsbConfigurationIsFaulty alarm shall be chosen from an enumeration.";
+                }
+                leaf air-interface-hsb-is-partly-down-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity for one link out of the HSB configuration being down shall be chosen from an enumeration.";
+                }
+                leaf air-interface-hsb-is-down-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity of the total HSB configuration being down shall be chosen from an enumeration.";
+                }
+                leaf fcswitch {
+                    type leafref {
+                        path '/core-model:forwarding-construct/core-model:fc-switch/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "Represents and defines a protection switch structure encapsulated in the forwarding construct. Essentially performs the function of Protection Group. Associates to 2 or more Endpoints each playing the role of a Protection Unit. One or more protection EndPoints (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) Endpoints where either protection or working can feed one or more protected Endpoint. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as  1+1 ane 1:1).  May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state.";
+            }
+
+        /***********************
+        * package air-interface-diversity
+        **********************/ 
+            list mw-air-interface-diversity-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container air-interface-diversity-capability {
+                    config false;
+                    uses air-interface-diversity-capability-g;
+                    description "none";
+                }
+                container air-interface-diversity-configuration {
+                    uses air-interface-diversity-configuration-g;
+                    description "none";
+                }
+                container air-interface-diversity-status {
+                    config false;
+                    uses air-interface-diversity-status-g;
+                    description "none";
+                }
+                container air-interface-diversity-current-problems {
+                    config false;
+                    uses air-interface-diversity-current-problems-g;
+                    description "none";
+                }
+                container air-interface-diversity-current-performance {
+                    config false;
+                    uses air-interface-diversity-current-performance-g;
+                    description "none";
+                }
+                container air-interface-diversity-historical-performances {
+                    config false;
+                    uses air-interface-diversity-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-capability-g {
+                list available-kinds-of-diversity {
+                    key 'diversity-name';
+                    config false;
+                    uses diversity-type-g;
+                    description "Available types of diversity to be listed.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    min-elements 2;
+                    description "Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+					status deprecated;
+                    description "Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                description "Describes the capabilities in implementing different types of air interface diversity.";
+            }
+            grouping air-interface-diversity-configuration-g {
+                container air-interface-diversity {
+                    uses diversity-type-g;
+                    description "Type of air interface diversity configured at the link.";
+                }
+                leaf-list air-interface-ltp-list {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    min-elements 2;
+                    description "_multiplicity:2-ThisAirInterfaceDiversity::AirInterfaceDiversityConfiguration::airInterfaceDiversity::diversityType::numberOfAirInterfacesMax";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list threshold-cross-alarm-list {
+                    key 'g826-value-kind granularity-period';
+                    max-elements 6;
+                    uses threshold-cross-alarm-type-g;
+                    description "List of threshold cross alarms to be configured.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 3;
+                    uses air-interface-diversity-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-status-g {
+                leaf snir-cur {
+                    type int8;
+                    units "dB";
+                    default -99;
+                    config false;
+                    description "Currently measured signal to (noise+interference) ratio of the combined signals.";
+                }
+                leaf air-interface-diversity-status {
+                    type air-interface-diversity-status-type;
+                    default group-down;
+                    config false;
+                    description "Status of the air interface bundle. ";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Diversity Group entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses air-interface-diversity-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses air-interface-diversity-current-performance-type-g;
+                    description "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+                }
+                description "Aggregated performance information of the air interface diversity configuration at a particular moment.";
+            }
+            grouping air-interface-diversity-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses air-interface-diversity-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface diversity configuration for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package pure-ethernet-structure
+        **********************/ 
+            list mw-pure-ethernet-structure-pac {
+                if-feature pure-ethernet;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container pure-ethernet-structure-capability {
+                    config false;
+                    uses pure-ethernet-structure-capability-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-configuration {
+                    uses pure-ethernet-structure-configuration-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-status {
+                    config false;
+                    uses pure-ethernet-structure-status-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-current-problems {
+                    config false;
+                    uses pure-ethernet-structure-current-problems-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-current-performance {
+                    config false;
+                    uses pure-ethernet-structure-current-performance-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-historical-performances {
+                    config false;
+                    uses pure-ethernet-structure-historical-performances-g;
+                    description "none";
+                }
+                description "The pureEthernetStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting Ethernet traffic only.";
+            }
+            grouping pure-ethernet-structure-capability-g {
+                leaf structure-id {
+                    type core-model:universal-id;
+                    config false;
+                    description "Identifies the Structure for bundling and container.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+					status deprecated;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device.";
+                }
+                description "Describes the logical structuring of the physical capacity provided by a pure Ethernet microwave device. Segmentation is not available. No fixed segment size. No TDM transport.";
+            }
+            grouping pure-ethernet-structure-configuration-g {
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    uses structure-problem-severity-type-g;
+                    description "Severity of the type of problem to be configured.";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-status-g {
+                container segment-status-list {
+                    config false;
+                    uses segment-status-type-g;
+                    description "Status of the Ethernet transport segment. Always just one segment.";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the last update of the status information.  ";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses structure-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses structure-current-performance-type-g;
+                    description "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+                }
+                description "Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment.";
+            }
+            grouping pure-ethernet-structure-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses structure-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval.";
+            }
+            feature pure-ethernet {
+                description "Feature 'pure-ethernet' is mandatory for device types transporting pure Ethernet.";
+            }
+
+        /***********************
+        * package hybrid-mw-structure
+        **********************/ 
+            list mw-hybrid-mw-structure-pac {
+                if-feature hybrid-microwave;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container hybrid-mw-structure-capability {
+                    config false;
+                    uses hybrid-mw-structure-capability-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-configuration {
+                    uses hybrid-mw-structure-configuration-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-status {
+                    config false;
+                    uses hybrid-mw-structure-status-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-current-problems {
+                    config false;
+                    uses hybrid-mw-structure-current-problems-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-current-performance {
+                    config false;
+                    uses hybrid-mw-structure-current-performance-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-historical-performances {
+                    config false;
+                    uses hybrid-mw-structure-historical-performances-g;
+                    description "none";
+                }
+                description "The HybridMwStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM and Ethernet traffic.";
+            }
+            grouping hybrid-mw-structure-capability-g {
+                leaf structure-id {
+                    type core-model:universal-id;
+                    config false;
+                    description "Identifies the Structure for bundling and container.";
+                }
+                list supported-tdm-structure-types-list {
+                    key 'tdm-structure-name';
+                    config false;
+                    min-elements 1;
+                    uses tdm-structure-type-g;
+                    description "Lists the TDM frame types that are supported.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+					status deprecated;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device.";
+                }
+                description "Describes the logical structuring of the physical capacity provided by a hybrid microwave device (TDM + Ethernet). Segmentation is available. TDM transport is available.";
+            }
+            grouping hybrid-mw-structure-configuration-g {
+                container structure-kind {
+                    uses tdm-structure-type-g;
+                    description "TDM frame to be applied.";
+                }
+                container structure-type {
+                    uses tdm-structure-type-g;
+					status deprecated;
+                    description "TDM frame to be applied.";
+                }
+                leaf number-of-tdm-segments-to-be-reserved {
+                    type int16;
+                    default -1;
+                    description "Allows to configure the number of segments reserved for TDM frames of the type specified in HybridMwStructure::HybridMwStructureConfiguration::structureType";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    uses structure-problem-severity-type-g;
+                    description "Severity of the type of problem to be configured.";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-status-g {
+                list segment-status-list {
+                    key 'segment-status-type-id';
+                    config false;
+                    uses segment-status-type-g;
+                    description "Status of each segment (all TDM and one Ethernet). Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the last update of the status information.  ";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses structure-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses structure-current-performance-type-g;
+                    description "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+                }
+                description "Aggregated performance information of the structure of a hybrid microwave at a particular moment.";
+            }
+            grouping hybrid-mw-structure-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses structure-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval.";
+            }
+            feature hybrid-microwave {
+                description "Feature 'hybrid-microwave' is mandatory for device types transporting Ethernet + TDM.";
+            }
+
+        /***********************
+        * package ethernet-container
+        **********************/ 
+            list mw-ethernet-container-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container ethernet-container-capability {
+                    config false;
+                    uses ethernet-container-capability-g;
+                    description "none";
+                }
+                container ethernet-container-configuration {
+                    uses ethernet-container-configuration-g;
+                    description "none";
+                }
+                container ethernet-container-status {
+                    config false;
+                    uses ethernet-container-status-g;
+                    description "none";
+                }
+                container ethernet-container-current-problems {
+                    config false;
+                    uses ethernet-container-current-problems-g;
+                    description "none";
+                }
+                container ethernet-container-current-performance {
+                    config false;
+                    uses ethernet-container-current-performance-g;
+                    description "none";
+                }
+                container ethernet-container-historical-performances {
+                    config false;
+                    uses ethernet-container-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping ethernet-container-capability-g {
+                leaf bundling-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "This attribute has to be set on 'true', if the device allows combining resources from several air interfaces for transporting this Ethernet container.";
+                }
+                leaf packet-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case packet compression can be activated, but not configured to a certain type, packetCompressionAvail shall be set on 'true', but none of the compression level specific booleans.";
+                }
+                leaf layer2-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 2 available at the device.";
+                }
+                leaf vlan-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on VLAN layer available at the device.";
+                }
+                leaf q-in-q-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer of a second VLAN available at the device.";
+                }
+                leaf mpls-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on mpls layer available at the device.";
+                }
+                leaf ipv4-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 3 for IPv4 available at the device.";
+                }
+                leaf ipv6-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 3 for IPv6 available at the device.";
+                }
+                leaf layer4-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 4 (TCP and UDP header) available at the device.";
+                }
+                leaf encryption-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Shall be marked 'true', if Ethernet payload encryption is available.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    min-elements 2;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+					status deprecated;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device.";
+                }
+                description "none";
+            }
+            grouping ethernet-container-configuration-g {
+                leaf container-id {
+                    type string;
+                    default "No Ethernet Flow associated yet.";
+                    description "ContainterID in Netconf must be the same as EthernetPortID in OpenFlow so a connection can be made between the two items, which separately exist in the controller.";
+                }
+                list segments-id-list {
+                    key 'structure-id-ref segment-id-ref';
+                    min-elements 1;
+                    uses segment-id-type-g;
+                    description "Lists the segments used for transporting this Ethernet container. In case EthernetContainer::ContainerCapability::bundlingIsAvail==0, all TypeDefinitions::segmentIdType::structureId must be identical in the list.";
+                }
+                leaf packet-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "In case packet compression is activated, but no type is activated, it is assumed that the device chooses the optimum.";
+                }
+                leaf layer2-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 2 configured at the device.";
+                }
+                leaf vlan-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on VLAN layer configured at the device.";
+                }
+                leaf q-in-q-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer of a second VLAN configured at the device.";
+                }
+                leaf mpls-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on MPLS layer configured at the device.";
+                }
+                leaf ipv4-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 3 for IPv4 configured at the device.";
+                }
+                leaf ipv6-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 3 for IPv6 configured at the device.";
+                }
+                leaf layer4-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 4 (TCP and UDP header) configured at the device.";
+                }
+                leaf encryption-is-on {
+                    type boolean;
+                    default false;
+                    description "Activates encryption of the Ethernet payload.";
+                }
+                leaf cryptographic-key {
+                    type string;
+                    default "Cryptographic key not yet defined.";
+                    description "Key for transforming plaintext into cipher text data.";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 2;
+                    uses container-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping ethernet-container-status-g {
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Container entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping ethernet-container-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses container-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping ethernet-container-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses container-current-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the Ethernet container at a particular moment.";
+            }
+            grouping ethernet-container-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses container-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the Ethernet container for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package tdm-container
+        **********************/ 
+            list mw-tdm-container-pac {
+                if-feature hybrid-microwave;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container tdm-container-capability {
+                    config false;
+                    uses tdm-container-capability-g;
+                    description "none";
+                }
+                container tdm-container-configuration {
+                    uses tdm-container-configuration-g;
+                    description "none";
+                }
+                container tdm-container-status {
+                    config false;
+                    uses tdm-container-status-g;
+                    description "none";
+                }
+                container tdm-container-current-problems {
+                    config false;
+                    uses tdm-container-current-problems-g;
+                    description "none";
+                }
+                container tdm-container-current-performance {
+                    config false;
+                    uses tdm-container-current-performance-g;
+                    description "none";
+                }
+                container tdm-container-historical-performances {
+                    config false;
+                    uses tdm-container-historical-performances-g;
+                    description "none";
+                }
+                description "The TdmContainer_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM traffic.";
+            }
+            grouping tdm-container-capability-g {
+                list supported-tdm-container-types-list {
+                    key 'tdm-container-name';
+                    config false;
+                    min-elements 1;
+                    uses tdm-container-type-g;
+                    description "Lists the TDM containers that are supported.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    min-elements 2;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+					status deprecated;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device.";
+                }
+                description "Bundling is not available.";
+            }
+            grouping tdm-container-configuration-g {
+                leaf container-id {
+                    type string;
+                    default "No TDM Flow associated yet.";
+                    description "ContainterID in Netconf must be the same as TDM Flow ID so a connection can be made between the two items, which separately exist in the controller.";
+                }
+                container container-type {
+                    uses tdm-container-type-g;
+                    description "Type of TDM container.";
+                }
+                container segment-id {
+                    uses segment-id-type-g;
+                    description "Multiplicity = 1; One segment per TDM container; Type of segment must match type of container;";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 2;
+                    uses container-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping tdm-container-status-g {
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Container entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping tdm-container-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses container-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping tdm-container-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses container-current-performance-type-g;
+                    description "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+                }
+                description "Aggregated performance information of the TDM container at a particular moment.";
+            }
+            grouping tdm-container-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses container-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the TDM container for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package super-classes
+        **********************/ 
+            grouping mw-current-problem-g {
+                leaf sequence-number {
+                    type int32;
+                    config false;
+                    description "Unique sequence number of the current problem object.";
+                }
+                leaf time-stamp {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the problem.  ";
+                }
+                leaf problem-severity {
+                    type severity-type;
+                    default warning;
+                    config false;
+                    description "Severity of the alarm.";
+                }
+                description "none";
+            }
+
+
+    /***********************
+    * package notifications
+    **********************/ 
+        notification object-creation-notification {
+            uses object-creation-notification-g;
+            description "none";
+        }
+        grouping object-creation-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts object creation notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac.";
+            }
+            leaf object-type {
+                type string;
+                default "Type of created object not specified.";
+                description "Type of Object to be chosen from the following list of values: 'MW_AirInterface_Pac', 'MW_AirInterfaceDiversity_Pac', 'MW_Structure_Pac', 'MW_PureEthernetStructure_Pac', 'MW_HybridMwStructure_Pac', 'MW_Container_Pac', 'MW_EthernetContainer_Pac' or 'MW_TdmContainer_Pac'.";
+            }
+            description "To be sent when a new MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac has to be instancieted in the controller.";
+        }
+        notification object-deletion-notification {
+            uses object-deletion-notification-g;
+            description "none";
+        }
+        grouping object-deletion-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts object deletion notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac.";
+            }
+            description "To be sent when a new MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac instance has to be deleted in the controller.";
+        }
+        notification attribute-value-changed-notification {
+            uses attribute-value-changed-notification-g;
+            description "none";
+        }
+        grouping attribute-value-changed-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts attribute value changed notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac.";
+            }
+            leaf attribute-name {
+                type string;
+                default "Attribute name not specified.";
+                description "Name of the attribute that has been changed.";
+            }
+            leaf new-value {
+                type string;
+                default "New value not specified.";
+                description "Attribute value converted to a string (xml, json, ...)";
+            }
+            description "To be sent when an attribute has changed and one or more controllers have to update their data.";
+        }
+        notification problem-notification {
+            uses problem-notification-g;
+            description "none";
+        }
+        grouping problem-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts problem notifications";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac.";
+            }
+            leaf problem {
+                type string;
+                default "Problem name not specified.";
+                description "Name of the problem according to AirInterface::AirInterfaceCapability::supportedAlarms or AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms or Structure::StructureCapability::supportedAlarms or PureEthernetStructure::PureEthernetStructureCapability::supportedAlarms or HybridMwStructure::HybridMwStructureCapability::supportedAlarms or Container::ContainerCapability::supportedAlarms or EthernetContainer::EthernetContainerCapability::supportedAlarms or TdmContainer::TdmContainerCapability::supportedAlarms.";
+            }
+            leaf severity {
+                type severity-type;
+                default warning;
+                description "Severity of the problem according to AirInterface::AirInterfaceConfiguration::problemSeverityList, AirInterfaceDiversity::AirInterfaceDiversityConfiguration::problemSeverityList, Structure::StructureConfiguration::problemSeverityList, PureEthernetStructure::PureEthernetStructureConfiguration::problemSeverityList, HybridMwStructure::HybridMwStructureConfiguration::problemSeverityList, Container::ContainerConfiguration::problemSeverityList, EthernetContainer::EthernetContainerConfiguration::problemSeverityList or TdmContainer::TdmContainerConfiguration::problemSeverityList";
+            }
+            description "To be sent when a problem occurs at a MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac.";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/microwave-model@2018-10-10.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/microwave-model@2018-10-10.yang
new file mode 100644
index 0000000..d13122d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/microwave-model@2018-10-10.yang
@@ -0,0 +1,3581 @@
+module microwave-model {
+    namespace "urn:onf:params:xml:ns:yang:microwave-model";
+    prefix microwave-model;
+
+    import core-model {
+        prefix core-model;
+    }
+    import g.874.1-model {
+        prefix g;
+    }
+    import ietf-yang-types {
+        prefix yang;
+    }
+
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/software-defined-standards/models-apis/>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Shrikanth Malavalli Divakar
+                       <mailto:shrikanth.divakar@wipro.com>";					   
+    description "This module contains a collection of YANG definitions for managing wireless networks.
+        This model is for vendor agnostic management of wireless network elements.";
+    revision 2018-10-10 {
+        description "Version 1.1";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    revision 2017-03-24 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    /***********************
+    * package type-definitions
+    **********************/ 
+        typedef loop-back-type {
+            type enumeration {
+                enum rf-to-remote {
+                    description "Returning the header information of the remote site back to the remote site on the radio interface between both outdoor units.";
+                }
+                enum rf-to-local {
+                    description "Returning the header information of the local site back to the local site on the radio interface between both outdoor units.";
+                }
+                enum if-to-remote {
+                    description "Returning the header information of the remote site back to the remote site on the intermediate frequency interface between local indoor unit and outdoor unit.";
+                }
+                enum if-to-local {
+                    description "Returning the header information of the local site back to the local site on the intermediate frequency interface between local indoor unit and outdoor unit.";
+                }
+                enum none {
+                    description "none";
+                }
+                enum if {
+		    status deprecated;
+                    description "Intermediate Frequency on the interface between indoor and outdoor unit.";
+                }
+                enum rf {
+		    status deprecated;
+                    description "Radio Frequency on the interface between outdoor unit and outdoor unit at the remote site.";
+                }
+            }
+            description "none";
+        }
+        typedef severity-type {
+            type enumeration {
+                enum non-alarmed {
+                    description "none";
+                }
+                enum warning {
+                    description "none";
+                }
+                enum minor {
+                    description "none";
+                }
+                enum major {
+                    description "none";
+                }
+                enum critical {
+                    description "none";
+                }
+            }
+            description "According to ITU-T M.3160";
+        }
+        grouping channel-plan-type-g {
+            leaf supported-channel-plan {
+                type string;
+                config false;
+                description "Unique name (e.g. ECC/REC/(01)04_Annex 5) of a document, which describes a frequency grid that can be adjusted at the air interface. Corresponding channel plans to be delivered by the hardware vendor and to be stored by the operator in an controller/application attached database.";
+            }
+            leaf duplex-distance-is-variable {
+                type boolean;
+                default false;
+                config false;
+                description "To be set on  'true', if the distance between transmitted and received frequency is variable.";
+            }
+            leaf-list duplex-distance-list {
+                type int32;
+                units "kHz";
+                config false;
+                min-elements 1;
+                description "Distance between transmitted and received frequency. To be filled with single value, in case duplex distance is not variable. To be filled with all configurable values, in case duplex distance is variable.";
+            }
+            leaf duplex-distance {
+                type int32;
+                units "kHz";
+                default -1;
+                config false;
+		status deprecated;
+                description "Distance between transmitted and received frequency.";
+            }
+            leaf auto-freq-select-is-avail {
+                type boolean;
+                default false;
+                config false;
+                description "In case the microwave radio is capable of automatically selecting the transmit frequency in unlicensed bands, this field shall contain a 'true'.";
+            }
+            list transmission-mode-list {
+                key 'transmission-mode-id';
+                config false;
+                min-elements 1;
+                uses transmission-mode-type-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping transmission-mode-type-g {
+            leaf transmission-mode-id {
+                type core-model:universal-id;
+                description "Indentifies the transmissionMode for internal reference.";
+            }
+            leaf transmission-mode-name {
+                type string;
+                default "Name of the transmission mode not yet defined.";
+                config false;
+                description "Name of the transmission mode. BBBB-m*-i*/t*-r*. B=four digits of channel bandwidth in MHz. m*=required number of digits for modulation name. (i*/t*=code rate.) i*=required number of digits for number of information bits. t*=required number of digits for total bits. r*=required number of digits for rate reduction factor. Example: 028-4QAM-188/204-1";
+            }
+            leaf channel-bandwidth {
+                type int32;
+                units "kHz";
+                default -1;
+                config false;
+                description "Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;";
+            }
+            leaf modulation-scheme {
+                type int16;
+                units "symbols";
+                default -1;
+                config false;
+                description "Modulation scheme, which is base to the other characteristics described in the same transmissionModeType data type. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256').";
+            }
+            leaf code-rate {
+                type int8;
+                units "%";
+                default -1;
+                config false;
+                description "Code rate of the coding scheme in % (Net bit rate ≤ Gross bit rate · code rate).";
+            }
+            leaf symbol-rate-reduction-factor {
+                type int8;
+                default 1;
+                config false;
+                description "Reduction factor for the symbol rate. Example: value would be 4 for 1/4BPSK.";
+            }
+            leaf tx-power-min {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Value of the minimum transmit power the modem can operate in dBm.";
+            }
+            leaf tx-power-max {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Value of the maximum transmit power the modem can operate in dBm.";
+            }
+            leaf rx-threshold {
+                type int16;
+                units "dBm";
+                default 99;
+                config false;
+                description "Value of the receive level required to decode the received signal with a Bit Error Rate of 1e-6 or less.";
+            }
+            leaf am-upshift-level {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Value of the receive level that has to be exceeded to shift into a higher modulation scheme.";
+            }
+            leaf am-downshift-level {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Value of the receive level that has to be exceeded for not shifting into a lower modulation scheme.";
+            }
+            leaf xpic-is-avail {
+                type boolean;
+                default false;
+                config false;
+                description "In case this air interface type is capable of XPIC, this field shall contain a 'true'. This information shall purely relate to capabilities of the equipment type, but not to the operational capability of a specific hardware composition on site. Means for example that this attribute might contain a 'true' statement, even if an additional cable would have been required to actually operate XPIC in a specific case.";
+            }
+            description "none";
+        }
+        typedef polarization-type {
+            type enumeration {
+                enum not-specified {
+                    description "none";
+                }
+                enum horizontal {
+                    description "none";
+                }
+                enum vertical {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef g826-type {
+            type enumeration {
+                enum es {
+                    description "Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::es .";
+                }
+                enum ses {
+                    description "Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::ses .";
+                }
+                enum cses {
+                    description "Consecutive Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::cses .";
+                }
+                enum not-specified {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+		
+        grouping threshold-cross-alarm-type-g {
+            leaf g826-value-kind {
+                type g826-type;
+                description "Kind of performance value that shall be equipped with a threshold alarm.";
+            }
+            leaf granularity-period {
+                type g:granularity-period-type;
+                description "Period of the performance data collection.";
+            }
+            leaf alarm-raising-threshold {
+                type int32;
+                units "s";
+                default -1;
+                description "Number of events required for raising the threshold cross alarm.";
+            }
+            leaf alarm-clearing-threshold {
+                type int32;
+                units "s";
+                default -1;
+                description "Number of events required for clearing the threshold cross alarm.";
+            }
+            description "Allows defining a threshold cross alarm.
+                ";
+        }
+        grouping air-interface-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping air-interface-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping time-x-states-type-g {
+            leaf transmission-mode {
+		type leafref{
+			path '/mw-air-interface-pac/air-interface-capability/supported-channel-plan-list/transmission-mode-list/transmission-mode-id';
+		}
+                config false;
+                description "Operated transmission mode.";
+            }
+            leaf time {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Sum of all seconds the transmitter operated the transmission mode.";
+            }
+            description "none";
+        }
+        grouping air-interface-performance-type-g {
+            leaf es {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Number of errored seconds.";
+            }
+            leaf ses {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Number of severely errored seconds.";
+            }
+            leaf cses {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Number of consecutive severely errored seconds.";
+            }
+            leaf unavailability {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Total time of unavailability in seconds.";
+            }
+            leaf tx-level-min {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Minimum transmit power. Signed integers are required.";
+            }
+            leaf tx-level-max {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Maximum transmit power. Signed integers are required.";
+            }
+            leaf tx-level-avg {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Averaged transmit power. Signed integers are required.";
+            }
+            leaf rx-level-min {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Minimum receive level. Signed integers are required.";
+            }
+            leaf rx-level-max {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Maximum receive level. Signed integers are required.";
+            }
+            leaf rx-level-avg {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Averaged receive level. Signed integers are required.";
+            }
+            list time-x-states-list {
+                key 'transmission-mode';
+                config false;
+                min-elements 1;
+                uses time-x-states-type-g;
+                description "Time period the transmitter operated in the respective transmission mode.";
+            }
+            leaf time2-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;
+                description "Sum of all seconds the transmitter operated in e.g. BPSK.";
+            }
+            leaf time4-states-s {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;	
+                description "none";
+            }
+            leaf time4-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time8-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time16-states-s {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time16-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time32-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time64-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;
+                description "none";
+            }
+            leaf time128-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time256-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time512-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time512-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;
+                description "none";
+            }
+            leaf time1024-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time1024-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;
+                description "none";
+            }
+            leaf time2048-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time2048-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;
+                description "none";
+            }
+            leaf time4096-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time4096-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time8192-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time8192-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf snir-min {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Minimum signal to (noise+interference) ratio.";
+            }
+            leaf snir-max {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Maximum signal to (noise+interference) ratio.";
+            }
+            leaf snir-avg {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Averaged signal to (noise+interference) ratio.";
+            }
+            leaf xpd-min {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Minimum cross polarization discrimination.";
+            }
+            leaf xpd-max {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Maximum cross polarization discrimination.";
+            }
+            leaf xpd-avg {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Averaged cross polarization discrimination.";
+            }
+            leaf rf-temp-min {
+                type int8;
+                units "C";
+                default -99;
+                config false;
+                description "Lowest temperature (in degree Celsius) of the radio module inside the outdoor unit.";
+            }
+            leaf rf-temp-max {
+                type int8;
+                units "C";
+                default -99;
+                config false;
+                description "Highest temperature (in degree Celsius) of the radio module inside the outdoor unit.";
+            }
+            leaf rf-temp-avg {
+                type int8;
+                units "C";
+                default -99;
+                config false;
+                description "Averaged temperature (in degree Celsius) of the radio module inside the outdoor unit.";
+            }
+            leaf defect-blocks-sum {
+                type int16;
+                units "blocks";
+                default -1;
+                config false;
+                description "Total number of blocks that were defect after receiving and could not be corrected by the FEC.";
+            }
+            leaf time-period {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Total length of the measurement period.";
+            }
+            description "Consolidated performance information of the air interface.";
+        }
+        grouping air-interface-current-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping air-interface-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        typedef protection-type {
+            type enumeration {
+                enum hsb {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef role-type {
+            type enumeration {
+                enum working {
+                    description "none";
+                }
+                enum protection {
+                    description "none";
+                }
+                enum protected {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping diversity-type-g {
+            leaf diversity-name {
+                type string;
+                config false;
+                description "Names to be chosen from the following list: 'spaceDiversity', 'frequencyDiversity'";
+            }
+            leaf number-of-air-interfaces-max {
+                type int8;
+                units "air interfaces";
+                default 1;
+                config false;
+                description "Maximum number of air interfaces that could be part of this kind of diversity.";
+            }
+            description "none";
+        }
+        typedef air-interface-diversity-status-type {
+            type enumeration {
+                enum group-down {
+                    description "All air interfaces that are members of the diversity configuration are down.";
+                }
+                enum not-all-ai-active {
+                    description "At least one, but not all of the air interfaces that are part of the diversity configuration is not working.";
+                }
+                enum all-ai-active {
+                    description "All air interfaces that are part of the diversity configuration are working.";
+                }
+            }
+            description "none";
+        }
+        grouping air-interface-diversity-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping air-interface-diversity-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping air-interface-diversity-performance-type-g {
+            leaf snir-min {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Minimum signal to (noise+interference) ratio of the combined signals.";
+            }
+            leaf snir-max {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Maximum signal to (noise+interference) ratio of the combined signals.";
+            }
+            leaf snir-avg {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Average signal to (noise+interference) ratio of the combined signals.";
+            }
+            description "Consolidated performance information of the air interface diversity group.";
+        }
+        grouping air-interface-diversity-current-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-diversity-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping air-interface-diversity-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-diversity-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        grouping tdm-structure-type-g {
+            leaf tdm-structure-name {
+                type string;
+                config false;
+                description "Names to be chosen from the following list: 'e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'";
+            }
+            leaf tdm-segment-size {
+                type int32;
+                units "kbit/s";
+                default -1;
+                config false;
+                description "Size of the TDM segment in kbit/s. Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;";
+            }
+            leaf max-number-of-segments-reservable {
+                type int8;
+                units "segments";
+                default -1;
+                config false;
+                description "Device specific maximum number of segments (not depending on current air interface configuration) that can be reserved for this type of segment on a single air interface.";
+            }
+            description "none";
+        }
+        grouping structure-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping structure-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping structure-performance-type-g {
+            leaf time-period {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Total length of the measurement period in seconds.";
+            }
+            leaf es {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Number of errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals.";
+            }
+            leaf ses {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Number of severely errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals.";
+            }
+            leaf cses {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Number of consecutive severely errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals.";
+            }
+            leaf unavailability {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Total time of unavailability in seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals.";
+            }
+            leaf rx-level-min {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Minimum receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value.";
+            }
+            leaf rx-level-max {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Maximum receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value.";
+            }
+            leaf rx-level-avg {
+                type int8;
+                units "dBm";
+                default 99;
+                config false;
+                description "Averaged receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value.";
+            }
+            description "Consolidated performance information of the Structure.";
+        }
+        grouping structure-current-performance-type-g {
+            container performance-data {
+                config false;
+                uses structure-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping structure-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses structure-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        grouping container-type-g {
+            leaf container-name {
+                type string;
+                config false;
+                description "Names to be chosen from the following list: 'ethernet','e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'";
+            }
+            leaf number-of-time-slots-required {
+                type int16;
+                units "timeslots";
+                default -1;
+                config false;
+                description "Number of time slots required for transporting this type of container. Value must be calculated by the vendor after defining the timeSlotCapacity. For containers of fixed size: numberOfTimeSlotsRequired = required bandwidth of the container divided by timeSlotCapacity. For containers of variable size the minimum (most probably 1) is to be stated.";
+            }
+            leaf tdm-time-slots-is-required {
+                type boolean;
+                default false;
+                config false;
+                description "Shall be set to '1', if this container type requires bandwidth (times slots) reserved for TDM transport.";
+            }
+            leaf bundling-is-avail {
+                type boolean;
+                default false;
+                config false;
+                description "If it is possible to combine transport resources of several radio links to transport this container type, this attribute shall be set to '1'.";
+            }
+            description "none";
+        }
+        grouping tdm-container-type-g {
+            leaf tdm-container-name {
+                type string;
+                config false;
+                description "Names to be chosen from the following list: 'e1','t1','j1','e3','t3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'";
+            }
+            leaf tdm-container-size {
+                type int32;
+                units "kbit/s";
+                default -1;
+                config false;
+                description "Capacity required for transporting this type of container (in kbit/s). Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;";
+            }
+            description "none";
+        }
+        grouping segment-id-type-g {
+            leaf structure-id-ref {
+                type core-model:universal-id;
+                description "none";
+            }
+            leaf segment-id-ref {
+                type int16;
+                description "Combinations of structureId and segmentId must be unique inside the device to assure that every resource is used just once.";
+            }
+            description "Identifies the segments, which are used to transport the container.";
+        }
+        grouping segment-status-type-g {
+            leaf segment-status-type-id {
+                type int16;
+                config false;
+                description "none";
+            }
+            leaf segment-is-reserved-for-tdm {
+                type boolean;
+                default false;
+                config false;
+                description "The number of segments, which is configured by Structure::StructureConfiguration::tdmReservedNumberOfSegements, has to be reserved for TDM. Starting from the lowest index value, these segments have to be marked with a 'true' in segmentIsReservedForTdm.
+                    ";
+            }
+            leaf operational-status {
+                type core-model:operational-state;
+                default disabled;
+                config false;
+                description "Current operational status of each segment.";
+            }
+            leaf obsolete-priority-class {
+                type int8;
+                default -1;
+                config false;
+                description "PriorityClass as inherited from the associated Container::ContainerConfiguration::priorityClass. In case the device is capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, priorityClass shall be considered, while calculating the dropOrderRank.";
+            }
+            leaf obsolete-drop-order-rank {
+                type int16;
+                default -1;
+                config false;
+                description "In case the device is NOT capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, dropOrderRank is number of segments minus sequence number of the segment. In case the device is capable of adapting the sequence, dropOrderRank has to be calculated by the device in dependency to the assigned priorityClass. 
+                    _unique: within Structure::StructureStatus::segmentStatusList";
+            }
+            description "none";
+        }
+        grouping container-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping container-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping container-performance-type-g {
+            leaf tx-ethernet-bytes-max-s {
+                type int32;
+                units "Bytes/s";
+                default -1;
+                config false;
+                description "Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a second and keeps the highest value within the measurement period. Field to be left blank for all types of TDM containers.";
+            }
+            leaf tx-ethernet-bytes-max-m {
+                type int64;
+                units "Bytes/min";
+                default -1;
+                config false;
+                description "Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a minute and keeps the highest value with in the measurement period. Field to be left blank for all types of TDM containers.";
+            }
+            leaf tx-ethernet-bytes-sum {
+                type int64;
+                units "Bytes";
+                default -1;
+                config false;
+                description "Total number of Bytes of Ethernet traffic (before header compression) transmitted (in direction out of the device) during the measurement period. Field to be left blank for all types of TDM containers.";
+            }
+            leaf time-period {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Total length of the measurement period in seconds.";
+            }
+            description "Consolidated performance information of the Container.";
+        }
+        grouping container-current-performance-type-g {
+            container performance-data {
+                config false;
+                uses container-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping container-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses container-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        typedef mii-kind-type {
+            type enumeration {
+                enum gbic {
+                    description "none";
+                }
+                enum soldered-connector {
+                    description "none";
+                }
+                enum sfp-sfp-plus-sfp28 {
+                    description "none";
+                }
+                enum xbi-300-pin {
+                    description "none";
+                }
+                enum xenpak {
+                    description "none";
+                }
+                enum xfp {
+                    description "none";
+                }
+                enum xfp-e {
+                    description "none";
+                }
+                enum xpak {
+                    description "none";
+                }
+                enum x2 {
+                    description "none";
+                }
+                enum dwdm-sfp-sfp-plus {
+                    description "none";
+                }
+                enum qsfp {
+                    description "none";
+                }
+                enum qsfp-plus {
+                    description "none";
+                }
+                enum cxp {
+                    description "none";
+                }
+                enum shielded-mini-multilane-hd-4-x {
+                    description "none";
+                }
+                enum shielded-mini-multilane-hd-8-x {
+                    description "none";
+                }
+                enum qsfp28 {
+                    description "none";
+                }
+                enum cxp2 {
+                    description "none";
+                }
+                enum cdfp-style1-style2 {
+                    description "none";
+                }
+                enum shielded-mini-multilane-hd-4-x-fan-out {
+                    description "none";
+                }
+                enum shielded-mini-multilane-hd-8-x-fan-out {
+                    description "none";
+                }
+                enum cdfp-style3 {
+                    description "none";
+                }
+                enum qsfp-micro {
+                    description "none";
+                }
+                enum qsfp-dd {
+                    description "none";
+                }
+                enum qsfp-plus-rate-select-v1 {
+                    description "none";
+                }
+                enum qsfp-plus-rate-select-v2 {
+                    description "none";
+                }
+                enum not-yet-defined {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef mdi-kind-type {
+            type enumeration {
+                enum sc {
+                    description "Subscriber Connector";
+                }
+                enum fibre-channel-style-1 {
+                    description "Copper connector";
+                }
+                enum fibre-channel-style-2 {
+                    description "Copper connector";
+                }
+                enum bnc-tnc {
+                    description "Bayonet/Threaded Neill-Concelman";
+                }
+                enum fc {
+                    description "Fibre Channel coax headers";
+                }
+                enum fiber-jack {
+                    description "none";
+                }
+                enum lc {
+                    description "Lucent Connector";
+                }
+                enum mt-rj {
+                    description "Mechanical Transfer - Registered Jack";
+                }
+                enum mu {
+                    description "Multiple Optical";
+                }
+                enum sg {
+                    description "none";
+                }
+                enum optical-pigtail {
+                    description "none";
+                }
+                enum mpo1-x12 {
+                    description "Multifiber Parallel Optic";
+                }
+                enum mpo2-x16 {
+                    description "Multifiber Parallel Optic";
+                }
+                enum hssdc-ii {
+                    description "High Speed Serial Data Connector";
+                }
+                enum copper-pigtail {
+                    description "none";
+                }
+                enum rj45 {
+                    description "8P8C, according to Clause 3 and Figures 1 through 5 of IEC 60603-7";
+                }
+                enum no-seperable-connector {
+                    description "none";
+                }
+                enum mxc2-x16 {
+                    description "none";
+                }
+                enum st {
+                    description "according to IEC 60874-10:1992, also often called BFOC/2.5";
+                }
+                enum not-yet-defined {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef medium-kind-type {
+            type enumeration {
+                enum tp-cat3 {
+                    description "none";
+                }
+                enum tp-cat5 {
+                    description "none";
+                }
+                enum tp-cat6 {
+                    description "none";
+                }
+                enum tp-cat8 {
+                    description "none";
+                }
+                enum single-mode {
+                    description "none";
+                }
+                enum multi-mode {
+                    description "none";
+                }
+                enum not-yet-defined {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef pmd-name-type {
+            type enumeration {
+                enum 10-base5 {
+                    description "Thick coax Medium Attachment Unit (MAU) as specified in 802.3 Clause 8";
+                }
+                enum foirl {
+                    description "FOIRL Medium Attachment Unit (MAU) as specified in 802.3 Clause 9.9";
+                }
+                enum 10-base2 {
+                    description "Thin coax Medium Attachment Unit (MAU) as specified in 802.3 Clause 10";
+                }
+                enum 10-broad36 {
+                    description "Broadband DTE Medium Attachment Unit (MAU) as specified in 802.3 Clause 11";
+                }
+                enum 10-base-t {
+                    description "Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14. Only to be applied when duplex mode unknown";
+                }
+                enum 10-base-thd {
+                    description "Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14 in half duplex mode";
+                }
+                enum 10-base-tfd {
+                    description "Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14 in full duplex mode";
+                }
+                enum 10-base-fp {
+                    description "Passive fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 16";
+                }
+                enum 10-base-fb {
+                    description "Synchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 17";
+                }
+                enum 10-base-fl {
+                    description "Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18. Only to be applied when duplex mode unknown";
+                }
+                enum 10-base-flhd {
+                    description "Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18 in half duplex mode";
+                }
+                enum 10-base-flfd {
+                    description "Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18 in full duplex mode";
+                }
+                enum 100-base-t4 {
+                    description "Four-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 23";
+                }
+                enum 100-base-tx {
+                    description "Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25. Only to be applied when duplex mode unknown";
+                }
+                enum 100-base-txhd {
+                    description "Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25 in half duplex mode";
+                }
+                enum 100-base-txfd {
+                    description "Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25 in full duplex mode";
+                }
+                enum 100-base-bx10-d {
+                    description "One single-mode fiber Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 58";
+                }
+                enum 100-base-bx10-u {
+                    description "One single-mode fiber Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 58";
+                }
+                enum 100-base-fx {
+                    description "X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26. Only to be applied when duplex mode unknown";
+                }
+                enum 100-base-fxhd {
+                    description "X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26 in half duplex mode";
+                }
+                enum 100-base-fxfd {
+                    description "X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26 in full duplex mode";
+                }
+                enum 100-base-lx10 {
+                    description "Two fiber Physical layer entity (PHY) as specified in 802.3 Clause 58";
+                }
+                enum 100-base-t2 {
+                    description "Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32. Only to be applied when duplex mode unknown";
+                }
+                enum 100-base-t2-hd {
+                    description "Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32 in half duplex mode";
+                }
+                enum 100-base-t2-fd {
+                    description "Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32 in full duplex mode";
+                }
+                enum 1000-base-x {
+                    description "X  as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD and duplex mode unknown";
+                }
+                enum 1000-base-bx10-d {
+                    description "One single-mode fiber Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 59";
+                }
+                enum 1000-base-bx10-u {
+                    description "One single-mode fiber Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 59";
+                }
+                enum 1000-base-xhd {
+                    description "X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD) in half duplex mode. Not to be configured and only to be returned when underlying PMD unknown";
+                }
+                enum 1000-base-xfd {
+                    description "X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD) in full duplex mode. Not to be configured and only to be returned when underlying PMD unknown";
+                }
+                enum 1000-base-lx {
+                    description "X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38. Only to be applied when duplex mode unknown";
+                }
+                enum 1000-base-lxhd {
+                    description "X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in half duplex mode";
+                }
+                enum 1000-base-lxfd {
+                    description "X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in full duplex mode";
+                }
+                enum 1000-base-lx10 {
+                    description "Two fiber 10km Physical layer entity (PHY) as specified in 802.3 Clause 59";
+                }
+                enum 1000-base-sx {
+                    description "X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38. Only to be applied when duplex mode unknown";
+                }
+                enum 1000-base-sxhd {
+                    description "X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in half duplex mode";
+                }
+                enum 1000-base-sxfd {
+                    description "X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in full duplex mode";
+                }
+                enum 1000-base-cx {
+                    description "X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39. Only to be applied when duplex mode unknown";
+                }
+                enum 1000-base-cxhd {
+                    description "X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39 in half duplex mode";
+                }
+                enum 1000-base-cxfd {
+                    description "X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39 in full duplex mode";
+                }
+                enum 1000-base-kx {
+                    description "X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 70";
+                }
+                enum 1000-base-t {
+                    description "Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40. Only to be applied when duplex mode unknown";
+                }
+                enum 1000-base-thd {
+                    description "Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40 in half duplex mode";
+                }
+                enum 1000-base-tfd {
+                    description "Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40 in full duplex mode";
+                }
+                enum 10-gbase-x {
+                    description "X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 48 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown";
+                }
+                enum 10-gbase-lx4 {
+                    description "X fiber over 4 lane 1310nm optics as specified in 802.3 Clause 53";
+                }
+                enum 10-gbase-cx4 {
+                    description "X copper over 8 pair 100-Ohm balanced cable as specified in 802.3 Clause 54";
+                }
+                enum 10-gbase-kx4 {
+                    description "X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 71";
+                }
+                enum 10-gbase-r {
+                    description "R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 49 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown";
+                }
+                enum 10-gbase-er {
+                    description "R fiber over 1550nm optics as specified in 802.3 Clause 52";
+                }
+                enum 10-gbase-lr {
+                    description "R fiber over 1310nm optics as specified in 802.3 Clause 52";
+                }
+                enum 10-gbase-sr {
+                    description "R fiber over 850nm optics as specified in 802.3 Clause 52";
+                }
+                enum 10-gbase-lrm {
+                    description "R fiber over 1310 nm optics as specified in 802.3 Clause 68";
+                }
+                enum 10-gbase-kr {
+                    description "R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 72";
+                }
+                enum 10-gbase-t {
+                    description "Four-pair twisted-pair balanced copper cabling Physical layer entity (PHY) as specified in 802.3 Clause 55";
+                }
+                enum 10-gbase-pr-d1 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-d2 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-d3 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-d4 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-u1 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-u2 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-u3 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-u4 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 40-gbase-r {
+                    description "Multi-lane PCS as specified in 802.3 Clause 82 over undefined Physical Medium Attachment (PMA) and Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown";
+                }
+                enum 40-gbase-kr4 {
+                    description "40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 84";
+                }
+                enum 40-gbase-cr4 {
+                    description "40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 85";
+                }
+                enum 40-gbase-sr4 {
+                    description "40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 86";
+                }
+                enum 4-x10-gbase-sr {
+                    description "4 times 10GBASE-S compatible to 802.3 Clause 52 over 4 lane multimode fiber";
+                }
+                enum 40-gbase-lr4 {
+                    description "40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with long reach, as specified in 802.3 Clause 87";
+                }
+                enum 40-gbase-er4 {
+                    description "40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with extended reach, as specified in 802.3 Clause 87";
+                }
+                enum 40-gbase-fr {
+                    description "40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over single mode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 89";
+                }
+                enum 100-gbase-r {
+                    description "Multi-lane PCS as specified in 802.3 Clause 82 over undefined 100GBASE-R or 100GBASE-P Physical Medium Attachment (PMA) and Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown";
+                }
+                enum 100-gbase-cr4 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 92";
+                }
+                enum 100-gbase-kr4 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 93";
+                }
+                enum 100-gbase-kp4 {
+                    description "100GBASE-P Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 94";
+                }
+                enum 100-gbase-cr10 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 10 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 85";
+                }
+                enum 100-gbase-sr4 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 95";
+                }
+                enum 100-gbase-sr10 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 10 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 86";
+                }
+                enum 2-x40-gbase-sr {
+                    description "2 times 40GBASE-S compatible to 802.3 Clause 86 over 10 lane multimode fiber";
+                }
+                enum 10-x10-gbase-sr {
+                    description "10 times 10GBASE-S compatible to 802.3 Clause 52 over 10 lane multimode fiber";
+                }
+                enum 12-x10-gbase-sr {
+                    description "12 times 10GBASE-S compatible to 802.3 Clause 52 over 12 lane multimode fiber";
+                }
+                enum 100-gbase-lr4 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with long reach, as specified in 802.3 Clause 88";
+                }
+                enum 100-gbase-er4 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with extended reach, as specified in 802.3 Clause 88";
+                }
+                enum not-yet-defined {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping signal-ordering-type-g {
+            leaf signal-ordering-kind-name {
+                type string;
+                config false;
+                description "To be filled according to TR-541. Must be unique for referencing during configuration of the interface.";
+            }
+            leaf-list signal-list {
+                type string;
+                config false;
+                min-elements 2;
+                description "Desciption of the signals on the Media Dependent Interface (MDI), might be e.g. 'TX+' in case of e.g. 10BASE-T, might be e.g. '1,295.56 nm' in case of e.g. 100GBASE-LR4";
+            }
+            description "none";
+        }
+        grouping mau-type-g {
+            leaf mau-id {
+                type core-model:universal-id;
+                config false;
+                description "802.3 according to 30.5.1.1.1 aMAUID
+                    Unique identifier of the Medium Attachment Unit (MAU) instance within the data about the device";
+            }
+            leaf mii-kind {
+                type mii-kind-type;
+                default not-yet-defined;
+                config false;
+                description "SFF8472_SFF8636
+                    Kind of Medium Independent Interface (MII) provided by this Medium Attachment Unit (MAU) (e.g. SFP, moldered port)";
+            }
+            leaf mdi-kind {
+                type mdi-kind-type;
+                default not-yet-defined;
+                config false;
+                description "Kind of Medium Dependent Interface (MDI) provided by this Medium Attachment Unit (MAU)";
+            }
+            leaf required-medium-kind {
+                type medium-kind-type;
+                default not-yet-defined;
+                config false;
+                description "Kind of medium required for operating this Medium Attachment Unit (MAU), more like an information field";
+            }
+            leaf-list wavelength-min {
+                type int32;
+                units "pm";
+                config false;
+                max-elements 3;
+                description "SFF-8690
+                    Minimum laser wavelength in pico meter, -1 = not applicable, 0 = not known, wavelengthMax = wavelength cannot be configured; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5";
+            }
+            leaf-list wavelength-max {
+                type int32;
+                units "pm";
+                config false;
+                max-elements 3;
+                description "Maximum laser wavelength in pico meter, -1 = not applicable, 0 = not known, wavelengthMin = wavelength cannot be configured; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5
+                    SFF-8690";
+            }
+            leaf wavelength-grid-min {
+                type int32;
+                units "pm";
+                default -1;
+                config false;
+                description "Minimum grid spacing supported by the transceiver, -1 = not applicable, 0 = not known
+                    SFF-8690";
+            }
+            leaf link-length-max {
+                type int32;
+                units "m";
+                default -1;
+                config false;
+                description "Indicates the maximum link length that is supported by the transceiver on the medium, which is specified in the standard referenced in TypeDefinitions::phyType::phyKind.";
+            }
+            leaf vendor-name {
+                type string;
+                default "NOT_YET_DEFINED";
+                config false;
+                description "Name of the vendor of the transceiver
+                    Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::ManufacturerProperties::manufacturerName";
+            }
+            leaf vendor-oui {
+                type string;
+                default "NOT_YET_DEFINED";
+                config false;
+                description "Describes the IEEE Company identifier of the vendor of the transceiver (1st part of 802.3 ResourceTypeID)
+                    802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier
+                    Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::ManufacturerProperties::manufacturerIdentifier";
+            }
+            leaf part-number {
+                type string;
+                default "NOT_YET_DEFINED";
+                config false;
+                description "802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier as six bit model number 
+                    Uniquely identifies the transceiver in the vendor's product lists
+                    Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentType::partTypeIdentifier";
+            }
+            leaf revision-number {
+                type string;
+                default "NOT_YET_DEFINED";
+                config false;
+                description "Identifies the revision number of the transceiver (3rd part of 802.3 ResourceTypeID)
+                    802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier as four-bit revision number
+                    Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentType::version";
+            }
+            leaf serial-number {
+                type string;
+                default "NOT_YET_DEFINED";
+                config false;
+                description "Vendor's serial number for the transceiver. 0 = not applicable
+                    Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentInstance::serialNumber";
+            }
+            leaf date-code {
+                type string;
+                default "NOT_YET_DEFINED";
+                config false;
+                description "Vendor's date code for the transceiver
+                    Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentInstance::manufactureDate";
+            }
+            leaf-list pmd-list {
+                type pmd-name-type;
+                config false;
+                min-elements 1;
+                description "List of Physical Medium Dependent (PMD) that can be operated
+                    *** In case ordering of the signals depends on the PMD, pmdList has to be put into the datatype for the signal ordering ***";
+            }
+            list signal-ordering-list {
+                key 'signal-ordering-kind-name';
+                config false;
+                min-elements 1;
+                uses signal-ordering-type-g;
+                description "Describes the different (e.g. MDI, MDI-X) ways of ordering the signals on the physical medium";
+            }
+            leaf auto-signal-ordering-is-avail {
+                type boolean;
+                default false;
+                config false;
+                description "1 = there is a mechanism for automatically crossing over tx and rx implemented";
+            }
+            leaf short-reach-mode-is-avail {
+                type boolean;
+                default false;
+                config false;
+                description "1 = Indicates that Short Reach Mode for 10GBASE-T according to 802.3 45.2.1.64 is available";
+            }
+            leaf eee-is-avail {
+                type boolean;
+                default false;
+                config false;
+                description "1 = Indicates that Energy-Efficient Ethernet (EEE) is available at the device.";
+            }
+            leaf unidirectional-operation-is-avail {
+                type boolean;
+                default false;
+                config false;
+                description "1 = Medium Attachment Unit (MAU) able to transmit from Media Independent Interface (MII) regardless of whether the MAU has determined that a valid link has been established, 0 = MAU able to transmit from MII only when the MAU has determined that a valid link has been established
+                    802.3";
+            }
+            leaf-list supported-alarms {
+                type string;
+                config false;
+                min-elements 6;
+                description "MW IM
+                    Available alarms to be listed. Mandatory:'txFault', 'rxLos', 'tempHigh', 'tempLow', 'rxLevelHigh', 'rxLevelLow'. Optional:'vccHigh', 'vccLow', 'txBiasHigh', 'txBiasLow', 'txPowerHigh', 'txPowerLow', 'laserTempHigh', 'laserTempLow', 'tecCurrentHigh', 'tecCurrentLow'. Further alarms might be added by the device. Names are to be separated by commas.";
+            }
+            description "none";
+        }
+        grouping wire-interface-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to WireInterface::WireInterfaceCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping wire-interface-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to WireInterface::WireInterfaceCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping wire-interface-performance-type-g {
+            leaf es {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "802.3 30.8.1.1.13 aLineESs
+                    Number of errored seconds";
+            }
+            leaf ses {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "802.3 30.8.1.1.12 aLineSESs
+                    Number of severely errored seconds";
+            }
+            leaf symbol-error-during-carrier {
+                type int32;
+                default -1;
+                config false;
+                description "802.3 according to 30.3.2.1.5 aSymbolErrorDuringCarrier
+                    Number of times when valid carrier was present and an invalid data symbol occured.";
+            }
+            leaf low-power-idle-transmitter-ms {
+                type int32;
+                units "ms";
+                default -1;
+                config false;
+                description "802.3 similar to 30.3.2.1.8 aTransmitLPIMicroseconds
+                    Number of milliseconds (original counter expresses microseconds), during which the transmitter was in power save mode";
+            }
+            leaf low-power-idle-receiver-ms {
+                type int32;
+                units "ms";
+                default -1;
+                config false;
+                description "802.3 similar to 30.3.2.1.9 aReceiveLPIMicroseconds
+                    Number of milliseconds (original counter expresses microseconds), during which the receiver was in power save mode";
+            }
+            description "none";
+        }
+        grouping wire-interface-current-performance-type-g {
+            container performance-data {
+                config false;
+                uses wire-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping wire-interface-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses wire-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+
+    /***********************
+    * package object-classes
+    **********************/ 
+        /***********************
+        * package air-interface
+        **********************/ 
+            list mw-air-interface-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container air-interface-capability {
+                    config false;
+                    uses air-interface-capability-g;
+                    description "none";
+                }
+                container air-interface-configuration {
+                    uses air-interface-configuration-g;
+                    description "none";
+                }
+                container air-interface-status {
+                    config false;
+                    uses air-interface-status-g;
+                    description "none";
+                }
+                container air-interface-current-problems {
+                    config false;
+                    uses air-interface-current-problems-g;
+                    description "none";
+                }
+                container air-interface-current-performance {
+                    config false;
+                    uses air-interface-current-performance-g;
+                    description "none";
+                }
+                container air-interface-historical-performances {
+                    config false;
+                    uses air-interface-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-capability-g {
+                leaf type-of-equipment {
+                    type string;
+                    default "Type of equipment not yet defined.";
+                    config false;
+                    description "This parameter indicates the equipment type. Instead of uploading the complete set of capabilities, capabilities of the same equipment type could be reused. Should be unique for a combination of modem, radio and their respective firmware.";
+                }
+                leaf tx-frequency-min {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    config false;
+                    description "Value of the minimum transmit frequency tunable at the air interface.";
+                }
+                leaf tx-frequency-max {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    config false;
+                    description "Value of the maximum transmit frequency tunable at the air interface.";
+                }
+                leaf rx-frequency-min {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    config false;
+                    description "Value of the minimum receive frequency tunable at the air interface.";
+                }
+                leaf rx-frequency-max {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    config false;
+                    description "Value of the maximum receive frequency tunable at the air interface.";
+                }
+                leaf adaptive-modulation-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case the device is capable of adaptive modulation, this field shall contain a 'true'.";
+                }
+                leaf mimo-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case the device is capable of MIMO, this field shall contain a 'true'.";
+                }
+                leaf mimo-channels {
+                    type int8;
+                    units "channels";
+                    default 1;
+                    config false;
+                    description "Maximum number (n) of spatial multiplexing streams that can be conveyed by an n x n MIMO configuration.";
+                }
+                leaf alic-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case the microwave radio is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), this field shall contain a 'true'.";
+                }
+                leaf atpc-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case the microwave radio is capable of ATPC, this field shall contain a 'true'.";
+                }
+                leaf atpc-range {
+                    type int8;
+                    units "dB";
+                    default 0;
+                    config false;
+                    description "Extent of the ATPC range. This value represents a device specific maximum value. The actual range of the ATPC at a specific link might be limited by the difference between configured transmit power (AirInterface::AirInterfaceConfiguration::txPower) and minimum transmit power of the device (TypeDefinitions::TransmissionModeType::txPowerMin).";
+                }
+                leaf encryption-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Shall be marked 'true', if payload encryption is available.";
+                }
+                leaf-list supported-loop-back-kind-list {
+                    type loop-back-type;
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    description "List of supported kinds of looping back of header information to the remote site.";
+                }
+                leaf maintenance-timer-range {
+                    type string;
+                    units "s";
+                    default "Range of the maintenance timer not yet defined.";
+                    config false;
+                    description "Available time periods for maintenance configurations (e.g. the loop back of microwave header information) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360').";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    min-elements 7;
+                    description "Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','signalIDMismatching','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+		    status deprecated;
+                    description "Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                list supported-channel-plan-list {
+                    key 'supported-channel-plan';
+                    config false;
+                    min-elements 1;
+                    uses channel-plan-type-g;
+                    description "List of channel spacing that are supported by the device.";
+                }
+                description "Describes the 'analog' capabilities of modem and transmitter of the microwave device. Value ranges of attributes are not independently (e.g. min. and max. transmit power depends on modulation). Legal combinations of values are expressed in transmissionModeTypes.";
+            }
+            grouping air-interface-configuration-g {
+                leaf air-interface-name {
+                    type string;
+                    default "Air interface ID not yet defined.";
+                    description "Operator specific microwave link ID (often used for coding area, type of element and sequential number).";
+                }
+                leaf remote-air-interface-name {
+                    type string;
+                    default "Air interface ID at the remote site not yet defined.";
+                    description "Name of the air interface, which belongs to the same link, at the remote site.";
+                }
+                leaf expected-signal-id {
+                    type int16;
+                    description "If set on '0', the receiver ignores the signal ID of the received signal. If set on any other value, the receiver exclusively synchronizes on signals with the same signal ID.";
+                }
+                leaf transmitted-signal-id {
+                    type int16;
+                    description "Transmitted radio signal ID for synchronizing the receiver.";
+                }
+                leaf radio-signal-id {
+                    type string;
+                    default "Radio signal ID not yet defined.";
+		    status deprecated;
+                    description "The radioSignalId is transmitted on the air interface so the remote site of the link synchronizes on the correct transmitter. The local radio MUST NOT synchronize on a radio signal with a different radioSignalId. The link ID is neither an ID necessary to span the model nor an ID referencing external data. It is just some sort of name of the link transmitted so the correct remote site can be identified in an interference situation. The value zero might be used to make the microwave to disable the link ID check.";
+                }
+                leaf tx-frequency {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    description "Center frequency of the transmit channel. The values to be configured have to exactly match the values listed in the international agreement referenced in channelPlanID. In case of automated selection of the transmit frequency this field shall describe the lowest center frequency selectable.";
+                }
+                leaf rx-frequency {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    description "Center frequency of the receive channel.";
+                }
+                leaf transmission-mode-min {
+		    type core-model:universal-id;
+                    description "Minimum transmission mode to be configured (in case adaptive modulation is not used, this value represents also the fixed transmission mode).";
+                }
+                leaf transmission-mode-max {
+		    type core-model:universal-id;
+                    description "Maximum transmission mode to be configured.";
+                }
+                leaf tx-channel-bandwidth {
+                    type int32;
+                    units "kHz";
+                    default -1;
+		    status deprecated;
+                    description "Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;";
+                }
+                leaf rx-channel-bandwidth {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    description "Bandwidth of the receive channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;";
+                }
+                leaf polarization {
+                    type polarization-type;
+                    default not-specified;
+                    description "Allows documenting the polarization of the air interface.";
+                }
+                leaf power-is-on {
+                    type boolean;
+                    default true;
+                    description "Power ON. Activation of the entire radio in a split mount configuration shall be expressed as a 'true'.";
+                }
+                leaf transmitter-is-on {
+                    type boolean;
+                    default false;
+                    description "Activation of the transmitter inside the radio shall be expressed as a 'true'.";
+                }
+                leaf receiver-is-on {
+                    type boolean;
+                    default true;
+                    description "Maintenance Feature. Activation of the receiver inside the radio shall be expressed as a 'true'. Attribute shall also be used for RX main and RX diversity squelches in case of diversity configurations.
+                        ";
+                }
+                leaf tx-power {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    description "Transmit power to be configured on the microwave link. Signed Byte is required. The actually operated transmit power might be lower depending on adaptive modulation and ATPC.";
+                }
+                leaf adaptive-modulation-is-on {
+                    type boolean;
+                    default false;
+                    description "Adaptive Modulation. Activation of adaptive modulation shall be expressed as a 'true'.";
+                }
+                leaf modulation-min {
+                    type int16;
+                    units "symbols";
+                    default -1;
+		    status deprecated;
+                    description "Minimum modulation to be configured (in case adaptive modulation is not used, this value represents also the fixed modulation). The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf modulation-max {
+                    type int16;
+                    units "symbols";
+                    default -1;
+		    status deprecated;
+                    description "Maximum modulation to be configured. The value of this field is only relevant, if Adaptive Modulation has been activated. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf xpic-is-on {
+                    type boolean;
+                    default false;
+                    description "Activation of Cross Polarization Interference Cancelation shall be expressed as a 'true'. In case XPIC is not available for the current combination of channel bandwidth and modulation or the hardware in general, this parameter shall always be set to 'false'.";
+                }
+                leaf mimo-is-on {
+                    type boolean;
+                    default false;
+                    description "Activation of Multiple Input Multiple Output (MIMO) shall be expressed as a 'true'.";
+                }
+                leaf alic-is-on {
+                    type boolean;
+                    default false;
+                    description "Activation of Adjacent Link Interference Cancelation (ALIC) shall be expressed as a 'true'.";
+                }
+                leaf atpc-is-on {
+                    type boolean;
+                    default false;
+                    description "ATPC. Activation of Automated Transmit Power Control shall be expressed as a 'true'.";
+                }
+                leaf atpc-thresh-upper {
+                    type int16;
+                    units "dBm";
+                    default 99;
+                    description "If the receive level is higher than the upper threshold value, the transmitter is notified to decrease transmit power.";
+                }
+                leaf atpc-thresh-lower {
+                    type int16;
+                    units "dBm";
+                    default 99;
+                    description "If the receive level is lower than the lower threshold value, the transmitter is notified to increase transmit power.";
+                }
+                leaf atpc-tx-power-min {
+                    type int8;
+                    units "dBm";
+                    default -99;
+                    description "Transmit power, which is not to be undercut, while operating ATPC.";
+                }
+                leaf auto-freq-select-is-on {
+                    type boolean;
+                    default false;
+                    description "Activation of automatically selecting the transmit frequency in unlicensed bands shall be expressed as a 'true'.";
+                }
+                leaf auto-freq-select-range {
+                    type int8;
+                    units "channels";
+                    default -1;
+                    description "Number of transmit channels (starting at the center frequency defined in txFrequency and with channel bandwidth according to txChannelBandwidth) that define the range within the transmit frequency can automatically been chosen. ";
+                }
+                leaf modulation-is-on {
+                    type boolean;
+                    default true;
+                    description "Maintenance Feature. De-activation of the modulation of the carrier signal for fault management shall be expressed as a 'false'.";
+                }
+                leaf encryption-is-on {
+                    type boolean;
+                    default false;
+                    description "Activates encryption of the payload.";
+                }
+                leaf cryptographic-key {
+                    type string;
+                    default "Cryptographic key not yet defined.";
+                    description "Key for transforming plaintext into ciphertext data.";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list threshold-cross-alarm-list {
+                    key 'g826-value-kind granularity-period';
+                    max-elements 6;
+                    uses threshold-cross-alarm-type-g;
+                    description "List of threshold cross alarms to be configured.";
+                }
+                leaf loop-back-kind-on {
+                    type loop-back-type;
+                    default none;
+                    description "Maintenance Feature. The currently configured type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site.";
+                }
+                leaf maintenance-timer {
+                    type int32;
+                    units "s";
+                    default -1;
+                    description "Time of existence of any maintenance configuration (e.g. the loop back of microwave header information). Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 6;
+                    uses air-interface-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "Configuration of the radio link.";
+            }
+            grouping air-interface-status-g {
+                leaf tx-frequency-cur {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    config false;
+                    description "Center frequency of the currently operated transmit channel.";
+                }
+                leaf rx-frequency-cur {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    config false;
+                    description "Center frequency of the currently operated receive channel.";
+                }
+                leaf tx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current transmit level.";
+                }
+                leaf rx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current receive level.";
+                }
+                leaf transmission-mode-cur {
+			type leafref {
+				path '/mw-air-interface-pac/air-interface-capability/supported-channel-plan-list/transmission-mode-list/transmission-mode-id';
+			}    
+                    config false;
+                    description "Currently operated transmission mode according to definitions in Capabilities.";
+                }
+                leaf modulation-cur {
+                    type int16;
+                    units "symbols";
+                    default -1;
+                    config false;
+		    status deprecated;
+                    description "Currently operated modulation on transmit path. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf code-rate-cur {
+                    type int8;
+                    units "%";
+                    default -1;
+                    config false;
+		    status deprecated;
+                    description "Code rate of the currently operated coding scheme (Net bit rate ? Gross bit rate ? code rate).";
+                }
+                leaf received-signal-id {
+                    type int16;
+                    default -1;
+                    config false;
+                    description "ID of the signal, which the receiver is currently synchronized on.";
+                }
+                leaf snir-cur {
+                    type int8;
+                    units "dB";
+                    default -99;
+                    config false;
+                    description "Currently measured signal to (noise+interference) ratio.";
+                }
+                leaf xpd-cur {
+                    type int8;
+                    units "dB";
+                    default -99;
+                    config false;
+                    description "Currently measured cross polarization discrimination.";
+                }
+                leaf rf-temp-cur {
+                    type int8;
+                    units "Celsius";
+                    default -99;
+                    config false;
+                    description "Current temperature (in degree Celsius) of the radio module inside the outdoor unit.";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Air Interface entered its current operational status.  ";
+                }
+                leaf radio-power-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If the radio unit has power and is switched on, this shall be expressed as a 'true'.";
+                }
+                leaf link-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If connection is established to the remote site with the same linkID, this shall be expressed as a 'true'.";
+                }
+                leaf xpic-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If XPIC is currently actually working (not just configured), this shall be expressed as a 'true'.";
+                }
+                leaf mimo-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If MIMO is currently actually working (not just configured), this shall be expressed as a 'true'.";
+                }
+                leaf alic-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If Adjacent Link Interference Cancelation (ALIC) is currently actually working (not just configured), this shall be expressed as a 'true'.";
+                }
+                leaf atpc-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If ATPC is currently actually working (not just configured), this shall be expressed as a 'true'.";
+                }
+                leaf auto-freq-select-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "If automated frequency selection is currently actually working (not just configured), this shall be expressed as a 'true'.";
+                }
+                leaf loop-back-kind-up {
+                    type loop-back-type;
+                    default none;
+                    config false;
+                    description "The currently active (not just configured) type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site.";
+                }
+                leaf local-end-point-id {
+                    type string;
+                    default "not-supported";
+                    config false;
+                    description "The value of the localEndPointId is a vendor specific identifier of the air interface, used by the node to discover a microwave radio link.";
+                }
+                leaf remote-end-point-id {
+                    type string;
+                    default "not-supported";
+                    config false;
+                    description "The value of the remoteEndPointId is a vendor specific identifier or the airinterface at the remote side, used to by the node to discover a microwave radio link.";
+                }
+                description "Measurements of current values on the air interface and operational status of the device.";
+            }
+            grouping air-interface-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses air-interface-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses air-interface-current-performance-type-g;
+                    description "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+                }
+                description "Aggregated performance information of the air interface at a particular moment.";
+            }
+            grouping air-interface-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses air-interface-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface for a pre-defined measurement interval.";
+            }
+            list co-channel-group {
+                key 'co-channel-group-id';
+                uses co-channel-group-g;
+                description "none";
+            }
+            grouping co-channel-group-g {
+                leaf co-channel-group-id {
+                    type core-model:universal-id;
+                    description "none";
+                }
+                leaf-list air-interface-list {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    description "List of air interfaces, which are part of the co-channel (XPIC, MIMO, ALIC) group.";
+                }
+                leaf sort-of-co-channel-group {
+                    type string;
+                    default "Kind of co-channel group not specified.";
+                    description "Type of group of air interfaces with the same transmit and receive frequency. The values shall be chosen from the following _list:'XPIC', 'MIMO', 'ALIC';";
+                }
+                leaf-list logical-termination-point {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+		    status deprecated;
+                    description "none";
+                }
+                description "Required for configuring XPIC, MIMO and ALIC.";
+            }
+
+        /***********************
+        * package air-interface-hsb
+        **********************/ 
+            list mw-air-interface-hsb-end-point-pac {
+                key 'endpoint';
+                leaf role {
+                    type role-type;
+                    default working;
+                    description "none";
+                }
+                leaf endpoint {
+                    type leafref {
+                        path '/core-model:forwarding-construct/core-model:fc-port/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "The EndPoint (EP) object class models the access to the FC function. Each EndPoint instance has a role (e.g., working, protection, protected, hub, spoke, leaf, root, etc.) with respect to the FC function. The association of the FC to LTPs is made via EndPoints (essentially the ports of the FC) where each EndPoint (EP) of the FC has a role in the context of the FC. The traffic forwarding between the associated End PointsEPs of the FC depends upon the type of FC and may be associated with FCSwitch object instances. In cases where there is protection conveys the protecting role of the access to the FC.  The EP replaces the Protection Unit of a traditional protection model. It represents a protected (resilient/reliable) point or a protecting (unreliable working or protection) point.";
+            }
+            list mw-air-interface-hsb-fc-switch-pac {
+                key 'fcswitch';
+                leaf prot-type {
+                    type protection-type;
+                    default hsb;
+                    description "Indicates the protection scheme that is used for the ProtectionGroup.";
+                }
+                leaf air-interface-hsb-configuration-is-faulty-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity of an airInterfaceHsbConfigurationIsFaulty alarm shall be chosen from an enumeration.";
+                }
+                leaf air-interface-hsb-is-partly-down-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity for one link out of the HSB configuration being down shall be chosen from an enumeration.";
+                }
+                leaf air-interface-hsb-is-down-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity of the total HSB configuration being down shall be chosen from an enumeration.";
+                }
+                leaf fcswitch {
+                    type leafref {
+                        path '/core-model:forwarding-construct/core-model:fc-switch/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "Represents and defines a protection switch structure encapsulated in the forwarding construct. Essentially performs the function of Protection Group. Associates to 2 or more Endpoints each playing the role of a Protection Unit. One or more protection EndPoints (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) Endpoints where either protection or working can feed one or more protected Endpoint. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as  1+1 ane 1:1).  May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state.";
+            }
+
+        /***********************
+        * package air-interface-diversity
+        **********************/ 
+            list mw-air-interface-diversity-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container air-interface-diversity-capability {
+                    config false;
+                    uses air-interface-diversity-capability-g;
+                    description "none";
+                }
+                container air-interface-diversity-configuration {
+                    uses air-interface-diversity-configuration-g;
+                    description "none";
+                }
+                container air-interface-diversity-status {
+                    config false;
+                    uses air-interface-diversity-status-g;
+                    description "none";
+                }
+                container air-interface-diversity-current-problems {
+                    config false;
+                    uses air-interface-diversity-current-problems-g;
+                    description "none";
+                }
+                container air-interface-diversity-current-performance {
+                    config false;
+                    uses air-interface-diversity-current-performance-g;
+                    description "none";
+                }
+                container air-interface-diversity-historical-performances {
+                    config false;
+                    uses air-interface-diversity-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-capability-g {
+                list available-kinds-of-diversity {
+                    key 'diversity-name';
+                    config false;
+                    uses diversity-type-g;
+                    description "Available types of diversity to be listed.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    min-elements 2;
+                    description "Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+		    status deprecated;
+                    description "Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                description "Describes the capabilities in implementing different types of air interface diversity.";
+            }
+            grouping air-interface-diversity-configuration-g {
+                container air-interface-diversity {
+                    uses diversity-type-g;
+                    description "Type of air interface diversity configured at the link.";
+                }
+                leaf-list air-interface-ltp-list {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    min-elements 2;
+                    description "_multiplicity:2-ThisAirInterfaceDiversity::AirInterfaceDiversityConfiguration::airInterfaceDiversity::diversityType::numberOfAirInterfacesMax";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list threshold-cross-alarm-list {
+                    key 'g826-value-kind granularity-period';
+                    max-elements 6;
+                    uses threshold-cross-alarm-type-g;
+                    description "List of threshold cross alarms to be configured.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 3;
+                    uses air-interface-diversity-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-status-g {
+                leaf snir-cur {
+                    type int8;
+                    units "dB";
+                    default -99;
+                    config false;
+                    description "Currently measured signal to (noise+interference) ratio of the combined signals.";
+                }
+                leaf air-interface-diversity-status {
+                    type air-interface-diversity-status-type;
+                    default group-down;
+                    config false;
+                    description "Status of the air interface bundle. ";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Diversity Group entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses air-interface-diversity-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses air-interface-diversity-current-performance-type-g;
+                    description "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+                }
+                description "Aggregated performance information of the air interface diversity configuration at a particular moment.";
+            }
+            grouping air-interface-diversity-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses air-interface-diversity-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface diversity configuration for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package pure-ethernet-structure
+        **********************/ 
+            list mw-pure-ethernet-structure-pac {
+                if-feature pure-ethernet;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container pure-ethernet-structure-capability {
+                    config false;
+                    uses pure-ethernet-structure-capability-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-configuration {
+                    uses pure-ethernet-structure-configuration-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-status {
+                    config false;
+                    uses pure-ethernet-structure-status-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-current-problems {
+                    config false;
+                    uses pure-ethernet-structure-current-problems-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-current-performance {
+                    config false;
+                    uses pure-ethernet-structure-current-performance-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-historical-performances {
+                    config false;
+                    uses pure-ethernet-structure-historical-performances-g;
+                    description "none";
+                }
+                description "The pureEthernetStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting Ethernet traffic only.";
+            }
+            grouping pure-ethernet-structure-capability-g {
+                leaf structure-id {
+                    type core-model:universal-id;
+                    config false;
+                    description "Identifies the Structure for bundling and container.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+		    status deprecated;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device.";
+                }
+                description "Describes the logical structuring of the physical capacity provided by a pure Ethernet microwave device. Segmentation is not available. No fixed segment size. No TDM transport.";
+            }
+            grouping pure-ethernet-structure-configuration-g {
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    uses structure-problem-severity-type-g;
+                    description "Severity of the type of problem to be configured.";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-status-g {
+                container segment-status-list {
+                    config false;
+                    uses segment-status-type-g;
+                    description "Status of the Ethernet transport segment. Always just one segment.";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the last update of the status information.  ";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses structure-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses structure-current-performance-type-g;
+                    description "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+                }
+                description "Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment.";
+            }
+            grouping pure-ethernet-structure-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses structure-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval.";
+            }
+            feature pure-ethernet {
+                description "Feature 'pure-ethernet' is mandatory for device types transporting pure Ethernet.";
+            }
+
+        /***********************
+        * package hybrid-mw-structure
+        **********************/ 
+            list mw-hybrid-mw-structure-pac {
+                if-feature hybrid-microwave;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container hybrid-mw-structure-capability {
+                    config false;
+                    uses hybrid-mw-structure-capability-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-configuration {
+                    uses hybrid-mw-structure-configuration-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-status {
+                    config false;
+                    uses hybrid-mw-structure-status-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-current-problems {
+                    config false;
+                    uses hybrid-mw-structure-current-problems-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-current-performance {
+                    config false;
+                    uses hybrid-mw-structure-current-performance-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-historical-performances {
+                    config false;
+                    uses hybrid-mw-structure-historical-performances-g;
+                    description "none";
+                }
+                description "The HybridMwStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM and Ethernet traffic.";
+            }
+            grouping hybrid-mw-structure-capability-g {
+                leaf structure-id {
+                    type core-model:universal-id;
+                    config false;
+                    description "Identifies the Structure for bundling and container.";
+                }
+                list supported-tdm-structure-types-list {
+                    key 'tdm-structure-name';
+                    config false;
+                    min-elements 1;
+                    uses tdm-structure-type-g;
+                    description "Lists the TDM frame types that are supported.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+		    status deprecated;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device.";
+                }
+                description "Describes the logical structuring of the physical capacity provided by a hybrid microwave device (TDM + Ethernet). Segmentation is available. TDM transport is available.";
+            }
+            grouping hybrid-mw-structure-configuration-g {
+                container structure-kind {
+                    uses tdm-structure-type-g;
+                    description "TDM frame to be applied.";
+                }
+                container structure-type {
+                    uses tdm-structure-type-g;
+		    status deprecated;
+                    description "TDM frame to be applied.";
+                }
+                leaf number-of-tdm-segments-to-be-reserved {
+                    type int16;
+                    default -1;
+                    description "Allows to configure the number of segments reserved for TDM frames of the type specified in HybridMwStructure::HybridMwStructureConfiguration::structureType";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    uses structure-problem-severity-type-g;
+                    description "Severity of the type of problem to be configured.";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-status-g {
+                list segment-status-list {
+                    key 'segment-status-type-id';
+                    config false;
+                    uses segment-status-type-g;
+                    description "Status of each segment (all TDM and one Ethernet). Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the last update of the status information.  ";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses structure-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses structure-current-performance-type-g;
+                    description "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+                }
+                description "Aggregated performance information of the structure of a hybrid microwave at a particular moment.";
+            }
+            grouping hybrid-mw-structure-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses structure-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval.";
+            }
+            feature hybrid-microwave {
+                description "Feature 'hybrid-microwave' is mandatory for device types transporting Ethernet + TDM.";
+            }
+
+        /***********************
+        * package ethernet-container
+        **********************/ 
+            list mw-ethernet-container-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container ethernet-container-capability {
+                    config false;
+                    uses ethernet-container-capability-g;
+                    description "none";
+                }
+                container ethernet-container-configuration {
+                    uses ethernet-container-configuration-g;
+                    description "none";
+                }
+                container ethernet-container-status {
+                    config false;
+                    uses ethernet-container-status-g;
+                    description "none";
+                }
+                container ethernet-container-current-problems {
+                    config false;
+                    uses ethernet-container-current-problems-g;
+                    description "none";
+                }
+                container ethernet-container-current-performance {
+                    config false;
+                    uses ethernet-container-current-performance-g;
+                    description "none";
+                }
+                container ethernet-container-historical-performances {
+                    config false;
+                    uses ethernet-container-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping ethernet-container-capability-g {
+                leaf bundling-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "This attribute has to be set on 'true', if the device allows combining resources from several air interfaces for transporting this Ethernet container.";
+                }
+                leaf packet-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case packet compression can be activated, but not configured to a certain type, packetCompressionAvail shall be set on 'true', but none of the compression level specific booleans.";
+                }
+                leaf layer2-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 2 available at the device.";
+                }
+                leaf vlan-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on VLAN layer available at the device.";
+                }
+                leaf q-in-q-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer of a second VLAN available at the device.";
+                }
+                leaf mpls-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on mpls layer available at the device.";
+                }
+                leaf ipv4-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 3 for IPv4 available at the device.";
+                }
+                leaf ipv6-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 3 for IPv6 available at the device.";
+                }
+                leaf layer4-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 4 (TCP and UDP header) available at the device.";
+                }
+                leaf encryption-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Shall be marked 'true', if Ethernet payload encryption is available.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    min-elements 2;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+		    status deprecated;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device.";
+                }
+                description "none";
+            }
+            grouping ethernet-container-configuration-g {
+                leaf container-id {
+                    type string;
+                    default "No Ethernet Flow associated yet.";
+                    description "ContainterID in Netconf must be the same as EthernetPortID in OpenFlow so a connection can be made between the two items, which separately exist in the controller.";
+                }
+                list segments-id-list {
+                    key 'structure-id-ref segment-id-ref';
+                    min-elements 1;
+                    uses segment-id-type-g;
+                    description "Lists the segments used for transporting this Ethernet container. In case EthernetContainer::ContainerCapability::bundlingIsAvail==0, all TypeDefinitions::segmentIdType::structureId must be identical in the list.";
+                }
+                leaf packet-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "In case packet compression is activated, but no type is activated, it is assumed that the device chooses the optimum.";
+                }
+                leaf layer2-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 2 configured at the device.";
+                }
+                leaf vlan-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on VLAN layer configured at the device.";
+                }
+                leaf q-in-q-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer of a second VLAN configured at the device.";
+                }
+                leaf mpls-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on MPLS layer configured at the device.";
+                }
+                leaf ipv4-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 3 for IPv4 configured at the device.";
+                }
+                leaf ipv6-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 3 for IPv6 configured at the device.";
+                }
+                leaf layer4-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 4 (TCP and UDP header) configured at the device.";
+                }
+                leaf encryption-is-on {
+                    type boolean;
+                    default false;
+                    description "Activates encryption of the Ethernet payload.";
+                }
+                leaf cryptographic-key {
+                    type string;
+                    default "Cryptographic key not yet defined.";
+                    description "Key for transforming plaintext into cipher text data.";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 2;
+                    uses container-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping ethernet-container-status-g {
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Container entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping ethernet-container-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses container-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping ethernet-container-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses container-current-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the Ethernet container at a particular moment.";
+            }
+            grouping ethernet-container-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses container-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the Ethernet container for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package tdm-container
+        **********************/ 
+            list mw-tdm-container-pac {
+                if-feature hybrid-microwave;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container tdm-container-capability {
+                    config false;
+                    uses tdm-container-capability-g;
+                    description "none";
+                }
+                container tdm-container-configuration {
+                    uses tdm-container-configuration-g;
+                    description "none";
+                }
+                container tdm-container-status {
+                    config false;
+                    uses tdm-container-status-g;
+                    description "none";
+                }
+                container tdm-container-current-problems {
+                    config false;
+                    uses tdm-container-current-problems-g;
+                    description "none";
+                }
+                container tdm-container-current-performance {
+                    config false;
+                    uses tdm-container-current-performance-g;
+                    description "none";
+                }
+                container tdm-container-historical-performances {
+                    config false;
+                    uses tdm-container-historical-performances-g;
+                    description "none";
+                }
+                description "The TdmContainer_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM traffic.";
+            }
+            grouping tdm-container-capability-g {
+                list supported-tdm-container-types-list {
+                    key 'tdm-container-name';
+                    config false;
+                    min-elements 1;
+                    uses tdm-container-type-g;
+                    description "Lists the TDM containers that are supported.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    min-elements 2;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+		    status deprecated;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device.";
+                }
+                description "Bundling is not available.";
+            }
+            grouping tdm-container-configuration-g {
+                leaf container-id {
+                    type string;
+                    default "No TDM Flow associated yet.";
+                    description "ContainterID in Netconf must be the same as TDM Flow ID so a connection can be made between the two items, which separately exist in the controller.";
+                }
+                container container-type {
+                    uses tdm-container-type-g;
+                    description "Type of TDM container.";
+                }
+                container segment-id {
+                    uses segment-id-type-g;
+                    description "Multiplicity = 1; One segment per TDM container; Type of segment must match type of container;";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 2;
+                    uses container-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping tdm-container-status-g {
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Container entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping tdm-container-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses container-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping tdm-container-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses container-current-performance-type-g;
+                    description "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+                }
+                description "Aggregated performance information of the TDM container at a particular moment.";
+            }
+            grouping tdm-container-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses container-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the TDM container for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package wire-interface
+        **********************/ 
+            list wire-interface-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container wirebased-interface-capability {
+                    config false;
+                    uses wire-interface-capability-g;
+                    description "none";
+                }
+                container wirebased-interface-configuration {
+                    uses wire-interface-configuration-g;
+                    description "none";
+                }
+                container wirebased-interface-status {
+                    config false;
+                    uses wire-interface-status-g;
+                    description "none";
+                }
+                container wirebased-interface-current-problems {
+                    config false;
+                    uses wire-interface-current-problems-g;
+                    description "none";
+                }
+                container wirebased-interface-current-performance {
+                    config false;
+                    uses wire-interface-current-performance-g;
+                    description "none";
+                }
+                container wirebased-interface-historical-performances {
+                    config false;
+                    uses wire-interface-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping wire-interface-capability-g {
+                list available-mau-list {
+                    key 'mau-id';
+                    config false;
+                    uses mau-type-g;
+                    description "List of Medium Attachment Units (MAUs) that are available for being selected. If rate and service configuration (e.g. SFF-8079) are not supported, the MAU determined by hardware shall be described.
+                        ";
+                }
+                leaf auto-pmd-negotiation-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Parameter
+                        1 = Indicates that device is supporting Auto-negotiation";
+                }
+                leaf auto-pmd-negotiation-max-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "1 = Indicates that device is supporting definition of the maximum speed/Medium Attached Unit (MAU) automatically chosen when (autoNegotiationIsOn=1)";
+                }
+                leaf-list supported-loop-back-kind-list {
+                    type loop-back-type;
+                    config false;
+                    min-elements 1;
+                    max-elements 5;
+                    description "List of supported kinds of looping back of header information to the remote site.
+                        802.3 45.2.1.12.1 PMA remote loopback ability";
+                }
+                leaf maintenance-timer-range {
+                    type string;
+                    units "Byte";
+                    default "Range of the maintenance timer not yet defined.";
+                    config false;
+                    description "MW IM
+                        Available time periods for maintenance configurations (e.g. the loop back) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360').";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    min-elements 6;
+                    description "Available alarms to be listed. Mandatory:'txFault', 'rxLos', 'tempHigh', 'tempLow', 'rxLevelHigh', 'rxLevelLow'. Optional:'vccHigh', 'vccLow', 'txBiasHigh', 'txBiasLow', 'txPowerHigh', 'txPowerLow', 'laserTempHigh', 'laserTempLow', 'tecCurrentHigh', 'tecCurrentLow'. Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                description "none";
+            }
+            grouping wire-interface-configuration-g {
+                leaf wire-interface-name {
+                    type string;
+                    default "Not yet defined.";
+                    description "Text field for the wire interface being named by the operator. Ideally used for entering unique numbers or names for unambiguously identifying the connection within the network
+                        Parameter";
+                }
+                leaf remote-wire-interface-name {
+                    type string;
+                    default "Not yet defined.";
+                    description "Learning from MW IM
+                        Text field for defining the wire interface this one is connected with. Ideally used for entering unique numbers or names for unambiguously identifying the connection within the network";
+                }
+                leaf interface-is-on {
+                    type boolean;
+                    default true;
+                    description "1 = Activation of the interface (it gets powered and can be managed even if the transceiver is not yet transmitting or receiving). In case there is no Medium Attachment Unit (MAU) (e.g. no SFP in the cage) SETting (interfaceIsOn=1) must be ignored and GETing must return (interfaceIsOn=0)
+                        802.3 according 30.3.2.2.1 acPhyAdminControl";
+                }
+                leaf-list transceiver-is-on-list {
+                    type boolean;
+                    min-elements 1;
+                    max-elements 11;
+                    description "802.3 22.?.? and additionally 802.3 45.2.1.8 PMD transmit disable register (Register 1.9)
+                        1 = Activation of the transmitter and receiver (e.g. laser) of the PHY; transceiverIsOnList[0]:total interface; transceiverIsOnList[1..10] different lanes of a multilane Medium Attachment Unit (MAU)";
+                }
+                leaf auto-pmd-negotiation-is-on {
+                    type boolean;
+                    default false;
+                    description "Parameter
+                        1 = Auto-negotiation is switched on";
+                }
+                leaf fixed-pmd {
+                    type pmd-name-type;
+                    default not-yet-defined;
+                    description "If (autoPmdNegotiationIsOn=0) configuration of the concrete kind of Physical Medium Dependent (PMD). If (autoNegotiationIsOn=1) value of this field becomes irrelevant";
+                }
+                leaf auto-pmd-negotiation-max {
+                    type pmd-name-type;
+                    default not-yet-defined;
+                    description "Parameter
+                        If (autoNegotiationIsOn=1) AND (autoNegotiationMauMaxIsAvail=1) configuration of the maximum speed/Physical Medium Dependent (PMD), which is automatically chosen by Auto-negotiation";
+                }
+                leaf auto-signal-ordering-is-on {
+                    type boolean;
+                    default false;
+                    description "1 = e.g. auto-MDI-X is switched on";
+                }
+                leaf fixed-signal-ordering {
+					type core-model:universal-id;
+                    description "If (autoSignalOrderingIsOn=0) configuration of the concrete kind of signal ordering on the media (e.g. MDI, or MDI-X). If (autoSignalOrderingIsOn=1) value of this field becomes irrelevant";
+                }
+                leaf short-reach-mode-is-on {
+                    type boolean;
+                    default false;
+                    description "Activation of the Short Reach Mode for 10GBASE-T according to 802.3 45.2.1.64";
+                }
+                leaf unidirectional-operation-is-on {
+                    type boolean;
+                    default false;
+                    description "If (autoNegotiationIsOn=1) OR manualDuplexSelection=0 (=half duplex), this bit is ignored. When autoNegotiationIsOn=0 AND manualDuplexSelection=1 (=full duplex):  1 = Enable transmit from media independent interface regardless of whether the PHY has determined that a valid link has been established, 0 = Enable transmit from media independent interface only when the PHY has determined that a valid link has been established
+                        802.3
+                        Parameter";
+                }
+                leaf-list wavelength-list {
+                    type int32;
+                    units "pm";
+                    max-elements 4;
+                    description "Wavelength of the signal of laser in pico meter; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5
+                        SFF-8690";
+                }
+                leaf temperature-high-threshold {
+                    type int8;
+                    units "Celsius";
+                    default -99;
+                    description "Threshold for alarming high temperature values.
+                        Will move to somewhere in the Physical Segment of the Core IM";
+                }
+                leaf temperature-low-threshold {
+                    type int8;
+                    units "Celsius";
+                    default -99;
+                    description "Threshold for alarming low temperature values.
+                        Will move to somewhere in the Physical Segment of the Core IM";
+                }
+                leaf rxlevel-high-threshold {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    description "Threshold for alarming high RX levels.";
+                }
+                leaf rxlevel-low-threshold {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    description "Threshold for alarming low RX levels.";
+                }
+                leaf loop-back-kind-on {
+                    type string;
+                    description "Parameter
+                        802.3 according 22.2.4.1.2 Loopback
+                        Maintenance Feature. The currently configured type of looping back of the wire interface header shall be expressed here. The received header is returned to the remote site.
+                        Activation of local loopback mode on physical layer";
+                }
+                leaf isolation-is-on {
+                    type boolean;
+                    default false;
+                    description "1 = Activation of the separation of the PHY from higher network layers
+                        802.3";
+                }
+                leaf restart-pmd-negotiation-is-on {
+                    type boolean;
+                    default false;
+                    description "Restarts the auto negotiation process
+                        802.3";
+                }
+                leaf reset-mau-is-on {
+                    type boolean;
+                    default false;
+                    description "802.3
+                        Resets the entire Medium Access Unit (MAU)";
+                }
+                leaf maintenance-timer {
+                    type int32;
+                    default -1;
+                    description "Parameter and MW IM
+                        Time of existence of any maintenance configuration (e.g. the loop back). Valid values are defined in WireInterface::WireInterfaceCapability::maintenanceTimerRange";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 6;
+                    uses wire-interface-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping wire-interface-status-g {
+                leaf interface-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "802.3 according 30.3.2.1.7 aPhyAdminState
+                        1 = A Physical layer entity (PHY) exists (including Medium Attachment Unit (e.g. SFP) ) and it is powered and can be managed";
+                }
+                leaf-list receive-signal-is-detected {
+                    type boolean;
+                    config false;
+                    min-elements 1;
+                    max-elements 11;
+                    description "802.3 45.2.1.9 PMD receive signal detect
+                        1 = Receiver (e.g. laser) detects signal; receiveSignalIsDetected[0]:total interface; receiveSignalIsDetected[1..10] different lanes of a multilane Medium Attachment Unit (MAU)";
+                }
+                leaf pmd-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Inverse of 802.3 45.2.1.2.3 Fault (1.1.7)
+                        If (interfaceIsUp=1) BUT 0 = there is a fault in either transmit or receive path";
+                }
+                leaf pmd-cur {
+                    type pmd-name-type;
+                    default not-yet-defined;
+                    config false;
+                    description "Indicates the kind of Physical Medium Dependent (PMD) currently operated at this interface";
+                }
+                container signal-ordering-kind-cur {
+                    config false;
+                    uses signal-ordering-type-g;
+                    description "Reference on a SignalOrderingType for expressing the currently active way of ordering the signals on the physical medium. Must contain a value as defined in TypeDefinitions::SignalOrderingType::signalOrderingKindName";
+                }
+                leaf eee-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "1 = Energy Efficient Ethernet is supported at both ends of the link and it is activated";
+                }
+                leaf link-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Parameter
+                        1 = (transceiverIsUp=1) AND communication is established to the remote site";
+                }
+                leaf link-is-idle {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "1 = (linkIsUp=1) AND (eeeIsAvail=1) AND (eeeIsOn=1) AND link is currently in idle mode. If Energy Efficient Ethernet is not supported or switched off, this attribute must be 0.";
+                }
+                leaf tx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current transmit power";
+                }
+                leaf-list rx-level-cur {
+                    type int8;
+                    units "dBm";
+                    config false;
+                    min-elements 1;
+                    max-elements 4;
+                    description "Current receive power; Also used for receive signal power measured at the Medium Dependent Interface (MDI) of 10GBASE-T during training as described in 802.3 55.4.3.1";
+                }
+                leaf temp-cur {
+                    type int8;
+                    units "Celsius";
+                    default -99;
+                    config false;
+                    description "Current temperature (in degree Celsius) inside the transceiver
+                        To be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::DynamicDetails::PhysicalProperties ";
+                }
+                leaf loop-back-kind-up {
+                    type loop-back-type;
+                    default none;
+                    config false;
+                    description "Paramter and MW IM
+                        The currently active (not just configured) type of looping back of the wire interface header shall be expressed here. The received header is returned to the remote site.";
+                }
+                description "none";
+            }
+            grouping wire-interface-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses wire-interface-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping wire-interface-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses wire-interface-current-performance-type-g;
+                    description "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+                }
+                description "Aggregated performance information of the air interface at a particular moment.";
+            }
+            grouping wire-interface-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses wire-interface-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package super-classes
+        **********************/ 
+            grouping mw-current-problem-g {
+                leaf sequence-number {
+                    type int32;
+                    config false;
+                    description "Unique sequence number of the current problem object.";
+                }
+                leaf time-stamp {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the problem.  ";
+                }
+                leaf problem-severity {
+                    type severity-type;
+                    default warning;
+                    config false;
+                    description "Severity of the alarm.";
+                }
+                description "none";
+            }
+
+
+    /***********************
+    * package notifications
+    **********************/ 
+        notification object-creation-notification {
+            uses object-creation-notification-g;
+            description "none";
+        }
+        grouping object-creation-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts object creation notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac.";
+            }
+            leaf object-type {
+                type string;
+                default "Type of created object not specified.";
+                description "Type of Object to be chosen from the following list of values: 'MW_AirInterface_Pac', 'MW_AirInterfaceDiversity_Pac', 'MW_Structure_Pac', 'MW_PureEthernetStructure_Pac', 'MW_HybridMwStructure_Pac', 'MW_Container_Pac', 'MW_EthernetContainer_Pac' or 'MW_TdmContainer_Pac'.";
+            }
+            description "To be sent when a new MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac has to be instancieted in the controller.";
+        }
+        notification object-deletion-notification {
+            uses object-deletion-notification-g;
+            description "none";
+        }
+        grouping object-deletion-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts object deletion notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac.";
+            }
+            description "To be sent when a new MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac instance has to be deleted in the controller.";
+        }
+        notification attribute-value-changed-notification {
+            uses attribute-value-changed-notification-g;
+            description "none";
+        }
+        grouping attribute-value-changed-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts attribute value changed notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac.";
+            }
+            leaf attribute-name {
+                type string;
+                default "Attribute name not specified.";
+                description "Name of the attribute that has been changed.";
+            }
+            leaf new-value {
+                type string;
+                default "New value not specified.";
+                description "Attribute value converted to a string (xml, json, ...)";
+            }
+            description "To be sent when an attribute has changed and one or more controllers have to update their data.";
+        }
+        notification problem-notification {
+            uses problem-notification-g;
+            description "none";
+        }
+        grouping problem-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts problem notifications";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac.";
+            }
+            leaf problem {
+                type string;
+                default "Problem name not specified.";
+                description "Name of the problem according to AirInterface::AirInterfaceCapability::supportedAlarms or AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms or Structure::StructureCapability::supportedAlarms or PureEthernetStructure::PureEthernetStructureCapability::supportedAlarms or HybridMwStructure::HybridMwStructureCapability::supportedAlarms or Container::ContainerCapability::supportedAlarms or EthernetContainer::EthernetContainerCapability::supportedAlarms or TdmContainer::TdmContainerCapability::supportedAlarms.";
+            }
+            leaf severity {
+                type severity-type;
+                default warning;
+                description "Severity of the problem according to AirInterface::AirInterfaceConfiguration::problemSeverityList, AirInterfaceDiversity::AirInterfaceDiversityConfiguration::problemSeverityList, Structure::StructureConfiguration::problemSeverityList, PureEthernetStructure::PureEthernetStructureConfiguration::problemSeverityList, HybridMwStructure::HybridMwStructureConfiguration::problemSeverityList, Container::ContainerConfiguration::problemSeverityList, EthernetContainer::EthernetContainerConfiguration::problemSeverityList or TdmContainer::TdmContainerConfiguration::problemSeverityList";
+            }
+            description "To be sent when a problem occurs at a MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac.";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/nc-notifications@2008-07-14.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/nc-notifications@2008-07-14.yang
new file mode 100644
index 0000000..9ef5ed0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/nc-notifications@2008-07-14.yang
@@ -0,0 +1,95 @@
+module nc-notifications {
+
+    namespace "urn:ietf:params:xml:ns:netmod:notification";
+    prefix "manageEvent";
+
+    import ietf-yang-types{ prefix yang; }
+    import notifications { prefix ncEvent; }
+
+    organization
+      "IETF NETCONF WG";
+
+    contact
+      "netconf@ietf.org";
+
+    description
+      "Conversion of the 'manageEvent' XSD in the NETCONF
+       Notifications RFC.";
+
+    reference
+      "RFC 5277";
+
+    revision 2008-07-14 {
+      description "RFC 5277 version.";
+    }
+
+    container netconf {
+      description "Top-level element in the notification namespace";
+
+      config false;
+
+      container streams {
+        description 
+          "The list of event streams supported by the system. When
+           a query is issued, the returned set of streams is 
+           determined based on user privileges.";
+
+        list stream {
+          description 
+            "Stream name, description and other information.";
+          key name;
+          min-elements 1;
+
+          leaf name {
+            description
+              "The name of the event stream. If this is the default
+               NETCONF stream, this must have the value 'NETCONF'.";
+            type ncEvent:streamNameType;
+          }
+
+          leaf description {
+            description
+              "A description of the event stream, including such
+               information as the type of events that are sent over
+               this stream.";
+            type string;
+            mandatory true;
+          }
+
+          leaf replaySupport {
+            description
+              "A description of the event stream, including such
+               information as the type of events that are sent over
+               this stream.";
+            type boolean;
+            mandatory true;
+          }
+
+          leaf replayLogCreationTime {
+            description
+              "The timestamp of the creation of the log used to support
+               the replay function on this stream. Note that this might
+               be earlier then the earliest available notification in
+               the log. This object is updated if the log resets for 
+               some reason.  This object MUST be present if replay is
+               supported.";
+            type yang:date-and-time;   // xsd:dateTime is wrong!
+          }
+        }
+      }
+    }
+
+    notification replayComplete {
+      description
+        "This notification is sent to signal the end of a replay
+         portion of a subscription.";
+    }
+
+    notification notificationComplete {
+      description
+        "This notification is sent to signal the end of a notification
+         subscription. It is sent in the case that stopTime was
+         specified during the creation of the subscription..";
+    }
+
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/notifications@2008-07-14.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/notifications@2008-07-14.yang
new file mode 100644
index 0000000..1d06711
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/notifications@2008-07-14.yang
@@ -0,0 +1,82 @@
+module notifications {
+
+    namespace "urn:ietf:params:xml:ns:netconf:notification:1.0";
+    prefix "ncEvent";
+
+    import ietf-yang-types { prefix yang; revision-date "2013-07-15";}
+
+    organization
+      "IETF NETCONF WG";
+
+    contact
+      "netconf@ops.ietf.org";
+
+    description
+      "Conversion of the 'ncEvent' XSD in the
+       NETCONF Notifications RFC.";
+
+    reference
+      "RFC 5277.";
+
+    revision 2008-07-14 {
+      description "RFC 5277 version.";
+    }
+
+    typedef streamNameType {
+      description
+        "The name of an event stream.";
+      type string;
+    }
+
+    rpc create-subscription {
+      description
+        "The command to create a notification subscription. It
+         takes as argument the name of the notification stream
+         and filter. Both of those options limit the content of
+         the subscription. In addition, there are two time-related
+         parameters, startTime and stopTime, which can be used to
+         select the time interval of interest to the notification
+         replay feature.";
+
+      input {
+        leaf stream {
+          description
+            "An optional parameter that indicates which stream of events
+             is of interest. If not present, then events in the default
+             NETCONF stream will be sent.";
+          type streamNameType;
+          default "NETCONF";
+        }
+
+        anyxml filter {
+          description
+            "An optional parameter that indicates which subset of all
+             possible events is of interest. The format of this
+             parameter is the same as that of the filter parameter
+             in the NETCONF protocol operations. If not present,
+             all events not precluded by other parameters will
+             be sent.";
+        }
+
+        leaf startTime {
+          description
+            "A parameter used to trigger the replay feature and
+             indicates that the replay should start at the time
+             specified. If start time is not present, this is not a
+             replay subscription.";
+          type yang:date-and-time;
+        }
+
+        leaf stopTime {
+          // must ". >= ../startTime";
+          description
+            "An optional parameter used with the optional replay
+             feature to indicate the newest notifications of
+             interest. If stop time is not present, the notifications
+             will continue until the subscription is terminated.
+             Must be used with startTime.";
+          type yang:date-and-time;
+        }
+      }
+    }
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/notifications@2018-05-30.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/notifications@2018-05-30.yang
new file mode 100644
index 0000000..296577d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/notifications@2018-05-30.yang
@@ -0,0 +1,97 @@
+module notifications {
+  yang-version 1;
+  namespace "urn:ietf:params:xml:ns:netconf:notification:1.0";
+  prefix ncEvent;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  organization
+    "IETF NETCONF WG";
+  contact
+    "netconf@ops.ietf.org";
+  description
+    "Conversion of the 'ncEvent' XSD in the
+     NETCONF Notifications RFC.";
+  reference "RFC 5277.";
+
+  revision 2018-05-30 {
+    description
+      "First step to a common notification yang.";
+    reference
+      "RFC 5277: NETCONF Event Notifications";
+  }
+  revision 2008-07-14 {
+    description
+      "Initial version";
+    reference
+      "RFC 5277: NETCONF Event Notifications";
+  }
+
+  typedef streamNameType {
+    type string;
+    description
+      "The name of an event stream.";
+  }
+
+  rpc create-subscription {
+    description
+      "The command to create a notification subscription. It
+       takes as argument the name of the notification stream
+       and filter. Both of those options limit the content of
+       the subscription. In addition, there are two time-related
+       parameters, startTime and stopTime, which can be used to
+       select the time interval of interest to the notification
+       replay feature.";
+    input {
+      leaf stream {
+        type streamNameType;
+        default "NETCONF";
+        description
+          "An optional parameter that indicates which stream of events
+           is of interest. If not present, then events in the default
+           NETCONF stream will be sent.";
+      }
+      anyxml filter {
+        description
+          "An optional parameter that indicates which subset of all
+           possible events is of interest. The format of this
+           parameter is the same as that of the filter parameter
+           in the NETCONF protocol operations. If not present,
+           all events not precluded by other parameters will
+           be sent.";
+      }
+      leaf startTime {
+        type yang:date-and-time;
+        description
+          "A parameter used to trigger the replay feature and
+           indicates that the replay should start at the time
+           specified. If start time is not present, this is not a
+           replay subscription.";
+      }
+      leaf stopTime {
+        type yang:date-and-time;
+        description
+          "An optional parameter used with the optional replay
+           feature to indicate the newest notifications of
+           interest. If stop time is not present, the notifications
+           will continue until the subscription is terminated.
+           Must be used with startTime.";
+      }
+    }
+  }
+  container notification {
+    config false;
+    description
+      "internal struct to start a notification";
+    leaf eventTime {
+      type yang:date-and-time;
+      mandatory true;
+        description
+          "The time the event was generated by the event source. This
+           parameter is of type dateTime and compliant to [RFC3339].
+           Implementations must support time zones.";
+    }
+  }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-core-model-conditional-packages@2017-04-02.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-core-model-conditional-packages@2017-04-02.yang
new file mode 100644
index 0000000..44c99b1
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-core-model-conditional-packages@2017-04-02.yang
@@ -0,0 +1,350 @@
+module onf-core-model-conditional-packages {
+    namespace "urn:onf:params:xml:ns:yang:onf-core-model-conditional-packages";
+    prefix onf-core-model-conditional-packages;
+    import core-model {
+        prefix core-model;
+    }
+    import microwave-model {
+        prefix microwave-model;
+    }
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "This model adds conditional packages to the ONF CoreModel in order to support fault management for object classes NetworkElement, Equipment and Holder.";
+    revision 2017-04-02 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    /***********************
+    * package type-definitions
+    **********************/ 
+        grouping current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "not-specified";
+                config false;
+                description "Name of the alarm according capability::supportedAlarms.";
+            }
+            uses microwave-model:mw-current-problem-g;
+            description "none";
+        }
+        grouping network-element-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "not-specified";
+                config false;
+                description "Name of the alarm according capability::supportedAlarms.";
+            }
+            leaf object-reference {
+                type string;
+                config false;
+                description "An explaining string of the related object class. This is necesseary, because the current problem list of the NetworkElement object class acts as a container for all alarms, where its object classes are not modeled.";
+            }
+            uses microwave-model:mw-current-problem-g;
+            description "none";
+        }
+        grouping problem-severity-type-g {
+            leaf problem-type-name {
+                type string;
+                description "Name of the alarm according to Capability::supportedAlarms";
+            }
+            leaf problem-type-severity {
+                type microwave-model:severity-type;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        typedef processing-type {
+            type enumeration {
+                enum done {
+                    description "none";
+                }
+                enum processing {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+
+    /***********************
+    * package object-classes
+    **********************/ 
+        /***********************
+        * package network-element
+        **********************/ 
+            container network-element-pac {
+                leaf network-element {
+                    type leafref {
+                        path '/core-model:network-element/core-model:uuid';
+                    }
+                    description "none";
+                }
+                container network-element-capability {
+                    config false;
+                    uses network-element-capability-g;
+                    description "none";
+                }
+                container network-element-configuration {
+                    uses network-element-configuration-g;
+                    description "none";
+                }
+                container network-element-status {
+                    config false;
+                    uses network-element-status-g;
+                    description "none";
+                }
+                container network-element-current-problems {
+                    config false;
+                    uses network-element-current-problems-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping network-element-capability-g {
+                leaf-list supported-alarms {
+                    type string;
+                    config false;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping network-element-configuration-g {
+                list problem-type-severity-list {
+                    key 'problem-type-name';
+                    uses problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                leaf trigger-refresh {
+                    type boolean;
+                    description "A trigger to instruct the netconf server to refresh its internal database/cache. 
+                                 It is primary used for alarms status, but could be used for anything else too. 
+                                 It is assumed that the refresh mechanism takes some time. 
+                                 In order to indicate the process to the controller a refreshStatus attribute is used.";
+                }
+                description "none";
+            }
+            grouping network-element-status-g {
+                leaf refresh-status {
+                    type processing-type;
+                    config false;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping network-element-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses network-element-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+
+        /***********************
+        * package equipment
+        **********************/ 
+            list equipment-pac {
+                key 'equipment';
+                leaf equipment {
+                    type leafref {
+                        path '/core-model:equipment/core-model:uuid';
+                    }
+                    description "none";
+                }
+                container equipment-capability {
+                    config false;
+                    uses equipment-capability-g;
+                    description "none";
+                }
+                container equipment-configuration {
+                    uses equipment-configuration-g;
+                    description "none";
+                }
+                container equipment-status {
+                    config false;
+                    uses equipment-status-g;
+                    description "none";
+                }
+                container equipment-current-problems {
+                    config false;
+                    uses equipment-current-problems-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping equipment-capability-g {
+                leaf-list supported-alarms {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Names are to be separated by commas.";
+                }
+                description "none";
+            }
+            grouping equipment-configuration-g {
+                list problem-type-severity-list {
+                    key 'problem-type-name';
+                    uses problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping equipment-status-g {
+                description "none";
+            }
+            grouping equipment-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+
+        /***********************
+        * package holder
+        **********************/ 
+            list holder-pac {
+                key 'holder';
+                leaf holder {
+                    type leafref {
+                        path '/core-model:equipment/core-model:contained-holder/core-model:uuid';
+                    }
+                    description "none";
+                }
+                container holder-capability {
+                    config false;
+                    uses holder-capability-g;
+                    description "none";
+                }
+                container holder-configuration {
+                    uses holder-configuration-g;
+                    description "none";
+                }
+                container holder-status {
+                    config false;
+                    uses holder-status-g;
+                    description "none";
+                }
+                container holder-current-problems {
+                    config false;
+                    uses holder-current-problems-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping holder-capability-g {
+                leaf-list supported-alarms {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Names are to be separated by commas.";
+                }
+                description "none";
+            }
+            grouping holder-configuration-g {
+                list problem-type-severity-list {
+                    key 'problem-type-name';
+                    uses problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping holder-status-g {
+                description "none";
+            }
+            grouping holder-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+
+        /***********************
+        * package connector
+        **********************/ 
+            list connector-pac {
+                key 'connector';
+                leaf connector {
+                    type leafref {
+                        path '/core-model:equipment/core-model:exposed-cable/core-model:connector/core-model:uuid';
+                    }
+                    description "none";
+                }
+                container connector-capability {
+                    config false;
+                    uses connector-capability-g;
+                    description "none";
+                }
+                container connector-configuration {
+                    uses connector-configuration-g;
+                    description "none";
+                }
+                container connector-status {
+                    config false;
+                    uses connector-status-g;
+                    description "none";
+                }
+                container connector-current-problems {
+                    config false;
+                    uses connector-current-problems-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping connector-capability-g {
+                leaf-list supported-alarms {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Names are to be separated by commas.";
+                }
+                description "none";
+            }
+            grouping connector-configuration-g {
+                list problem-type-severity-list {
+                    key 'problem-type-name';
+                    uses problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                leaf remote-end-point {
+                    type string;
+                    description "A network wide identifier of the remote connector. The value is used for topology discovery. 
+Please see also ConnectorStatus::localEndPoint.";
+                }
+                description "none";
+            }
+            grouping connector-status-g {
+                leaf local-end-point {
+                    type string;
+                    description "A network wide global identifier of the this connector, which can be used to discover the physical connectivitiy.
+The value should contain the network element name, because the network element software can assume that the network element name is unique in the network. 
+The value should be formated:
+<connector:uuid>@<network-element-name>
+
+Please see also ConnectorConfiguration::remoteEndPoint";
+                }
+                description "none";
+            }
+            grouping connector-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-ethernet-conditional-packages@2017-04-02.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-ethernet-conditional-packages@2017-04-02.yang
new file mode 100644
index 0000000..4d6fb7c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-ethernet-conditional-packages@2017-04-02.yang
@@ -0,0 +1,88 @@
+module onf-ethernet-conditional-packages {
+    namespace "urn:onf:params:xml:ns:yang:onf-ethernet-conditional-packages";
+    prefix onf-ethernet-conditional-packages;
+    import core-model {
+        prefix core-model;
+    }
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "This model adds conditional packages to the ONF CoreModel in order address Ethernet use cases.";
+    revision 2017-04-02 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    /***********************
+    * package object-classes
+    **********************/ 
+        list ethernet-pac {
+            key 'layer-protocol';
+            leaf layer-protocol {
+                type leafref {
+                    path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                }
+                description "none";
+            }
+            container ethernet-capability {
+                config false;
+                uses ethernet-capability-g;
+                description "none";
+            }
+            container ethernet-configuration {
+                uses ethernet-configuration-g;
+                description "none";
+            }
+            container ethernet-status {
+                config false;
+                uses ethernet-status-g;
+                description "none";
+            }
+            container ethernet-current-problems {
+                config false;
+                uses ethernet-current-problems-g;
+                description "none";
+            }
+            container ethernet-current-performance {
+                config false;
+                uses ethernet-current-performance-g;
+                description "none";
+            }
+            container ethernet-historical-performances {
+                config false;
+                uses ethernet-historical-performances-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping ethernet-capability-g {
+            description "none";
+        }
+        grouping ethernet-configuration-g {
+            leaf vlan-id {
+                type int16;
+                description "value = 0: frames on ingress must be untagged, frames on egress get untagged; value = any other positive integer < 4096: frames on ingress must be tagged with this VLAN ID, frames on egress either already have or get this VLAN ID attached;";
+            }
+            description "none";
+        }
+        grouping ethernet-status-g {
+            description "none";
+        }
+        grouping ethernet-current-problems-g {
+            description "none";
+        }
+        grouping ethernet-current-performance-g {
+            description "none";
+        }
+        grouping ethernet-historical-performances-g {
+            description "none";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-otn-odu-conditional-packages@2017-10-20.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-otn-odu-conditional-packages@2017-10-20.yang
new file mode 100644
index 0000000..89d6cbf
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-otn-odu-conditional-packages@2017-10-20.yang
@@ -0,0 +1,361 @@
+module onf-otn-odu-conditional-packages {
+    namespace "urn:onf:params:xml:ns:yang:onf-otn-odu-conditional-packages";
+    prefix onf-otn-odu-conditional-packages;
+    import core-model {
+        prefix core-model;
+    }
+    organization "ONF (Open Networking Foundation) Open Transport Working Group";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             Editors:  Mohit Chamania 
+                       <MChamania@advaoptical.com>
+                       Dzmitry Khomchanka
+                       <dzmitry.khomchanka@vpi-minsk.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "This model adds conditional packages to the ONF CoreModel 1.2 
+                 in order address OTN ODU use cases. It is a temorary model for 
+                 demontration purposes and bases on the ideas an concepts of
+                 TAPI. However, modifications for a pure southbound were
+                 nessesary.";
+    revision 2017-10-20 {
+        description "Initial version";
+        reference "ONF TR 512: Core Model.";
+    }
+    /***********************
+    * package type-definitions (copied from TAPI; revision: 2017-05-31)
+    **********************/ 
+        typedef mapping-type {
+            type enumeration {
+                enum amp {
+                    description "none";
+                }
+                enum bmp {
+                    description "none";
+                }
+                enum gfp-f {
+                    description "none";
+                }
+                enum gmp {
+                    description "none";
+                }
+                enum ttp-gfp-bmp {
+                    description "none";
+                }
+                enum null {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef odu-named-payload-type {
+            type enumeration {
+                enum unknown {
+                    description "none";
+                }
+                enum uninterpretable {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef odu-slot-size {
+            type enumeration {
+                enum 1-g-25 {
+                    description "none";
+                }
+                enum 2-g-5 {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef odu-type {
+            type enumeration {
+                enum odu-0 {
+                    description "none";
+                }
+                enum odu-1 {
+                    description "none";
+                }
+                enum odu-2 {
+                    description "none";
+                }
+                enum odu-2-e {
+                    description "none";
+                }
+                enum odu-3 {
+                    description "none";
+                }
+                enum odu-4 {
+                    description "none";
+                }
+                enum odu-flex {
+                    description "none";
+                }
+                enum odu-cn {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping odu-payload-type-g {
+            leaf named-payload-type {
+                type odu-named-payload-type;
+                description "none";
+            }
+            leaf hex-payload-type {
+                type uint64;
+                description "none";
+            }
+            description "none";
+        }
+    /***********************
+    * package object-classes
+    **********************/ 
+
+        /***********************
+         * OTN ODU Connection (ODU-CTP)
+         **********************/ 
+        list otn-odu-connection-pac {
+            key 'layer-protocol';
+            leaf layer-protocol {
+                type leafref {
+                    path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                }
+                description "none";
+            }
+            container otn-odu-connection-capability {
+                config false;
+                uses otn-odu-connection-capability-g;
+                description "none";
+            }
+            container otn-odu-connection-configuration {
+                uses otn-odu-connection-configuration-g;
+                description "none";
+            }
+            container otn-odu-connection-status {
+                config false;
+                uses otn-odu-connection-status-g;
+                description "none";
+            }
+            container otn-odu-connection-current-problems {
+                config false;
+                uses otn-odu-connection-current-problems-g;
+                description "none";
+            }
+            container otn-odu-connection-current-performance {
+                config false;
+                uses otn-odu-connection-current-performance-g;
+                description "none";
+            }
+            container otn-odu-connection-historical-performances {
+                config false;
+                uses otn-odu-connection-historical-performances-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otn-odu-connection-capability-g {
+            container accepted-payload-type {
+                uses odu-payload-type-g;
+                description 
+                    "This attribute is applicable when the ODU CTP object 
+                     instance represents a lower order ODU CTP Sink at the 
+                     client layer of the ODUP/ODU[i]j or ODUP/ODUj-21 adaptation
+                     function. 
+                     This attribute is a 2-digit Hex code that indicates the new
+                     accepted payload type.
+                     Valid values are defined in Table 15-8 of ITU-T 
+                     Recommendation G.709 with one additional value 
+                     UN_INTERPRETABLE.";
+            }
+            description "none";
+        }
+        grouping otn-odu-connection-configuration-g {
+            leaf-list tributary-slot-list {
+                type uint64;
+                description 
+                    "This attribute contains a set of distinct (i.e. unique) 
+                     integers (e.g. 2, 3, 5, 9, 15 representing the tributary 
+                     slots TS2, TS3, TS5, TS9 and TS15) which represents the 
+                     resources occupied by the Low Order ODU Link Connection 
+                     (e.g. carrying an ODUflex with a bit rate of 6.25G). 
+                     This attribute applies when the LO ODU_ConnectionTerminationPoint 
+                     connects with an HO ODU_TrailTerminationPoint object. 
+                     It will not apply if this ODU_ConnectionTerminationPoint 
+                     object directly connects to an OTU_TrailTerminationPoint 
+                     object (i.e. OTU has no trib slots). 
+                     The upper bound of the integer allowed in this set is a 
+                     function of the HO-ODU server layer to which the ODU 
+                     connection has been mapped (adapted). 
+                     Thus, for example, M=8/32/80 for ODU2/ODU3/ODU4 server 
+                     layers (respectively). Note that the value of this 
+                     attribute can be changed only in the case of ODUflex and 
+                     has to be through specific operations (i.e. not be changing
+                     the attribute tributarySlotList directly).";
+            }
+            leaf tributary-port-number {
+                type uint64;
+                description 
+                    "This attribute identifies the tributary port number that is
+                     associated with the ODU CTP. 
+                     range of type : The value range depends on the size of the 
+                     Tributary Port Number (TPN) field used which depends on th 
+                     server-layer ODU or OTU.
+                     In case of ODUk mapping into OTUk, there is no TPN field, 
+                     so the tributaryPortNumber shall be zero.
+                     In case of LO ODUj mapping over ODU1, ODU2 or ODU3, the TPN
+                     is encoded in a 6-bit field so the value range is 0-63. 
+                     See clause 14.4.1/G.709-2016.
+                     In case of LO ODUj mapping over ODU4, the TPN is encoded in 
+                     a 7-bit field so the value range is 0-127. 
+                     See clause 14.4.1.4/G.709-2016.
+                     In case of ODUk mapping over ODUCn, the TPN is encoded in a
+                     14-bit field so the value range is 0-16383. See clause 
+                     20.4.1.1/G.709-2016.
+                    ";
+            }
+            leaf accepted-m-si {
+                type string;
+                description 
+                    "This attribute is applicable when the ODU CTP object 
+                     instance represents a lower order ODU1 or ODU2 CTP Sink at 
+                     the client layer of the ODU3P/ODU12 adaptation function or 
+                     represents a lower order ODUj CTP Sink at the client layer 
+                     of the ODUP/ODUj-21 adaptation function. This attribute is 
+                     a 1-byte field that represents the accepted multiplex 
+                     structure of the adaptation function. ";
+            }
+            leaf opu-tributary-slot-size {
+                type odu-slot-size;
+                description 
+                    "This attribute is applicable for ODU2 and ODU3 CTP only.
+                     [sko] Why that? 
+                     It indicates the slot size of the ODU CTP.";
+            }
+            leaf auto-payload-type {
+                type boolean;
+                description 
+                    "This attribute is applicable when the ODU CTP object 
+                     instance represents a lower order ODU CTP Source at the 
+                     client layer of the ODUP/ODUj-21 adaptation function. The 
+                     value of true of this attribute configures that the 
+                     adaptation source function shall fall back to the payload 
+                     type PT=20 if the conditions specified in 14.3.10.1/G.798 
+                     are satisfied. ";
+            }
+            leaf configured-mapping-type {
+                type mapping-type;
+                description 
+                    "This attributes indicates the configured mapping type.";
+            }
+            leaf configured-client-type {
+                type string;
+                description 
+                    "This attribute configures the type of the client CTP of the
+                     server ODU TTP.";
+            }
+            description 
+               "This Pac contains the attributes associated with the ODU-CTP.";
+        }
+        grouping otn-odu-connection-status-g {
+            description "none";
+        }
+        grouping otn-odu-connection-current-problems-g {
+            description "none";
+        }
+        grouping otn-odu-connection-current-performance-g {
+            description "none";
+        }
+        grouping otn-odu-connection-historical-performances-g {
+            description "none";
+        }
+
+
+        /***********************
+         * OTN ODU Termination (ODU-TTP)
+         **********************/ 
+        list otn-odu-termination-pac {
+            key 'layer-protocol';
+            leaf layer-protocol {
+                type leafref {
+                    path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                }
+                description "none";
+            }
+            container otn-odu-termination-capability {
+                config false;
+                uses otn-odu-termination-capability-g;
+                description "none";
+            }
+            container otn-odu-termination-configuration {
+                uses otn-odu-termination-configuration-g;
+                description "none";
+            }
+            container otn-odu-termination-status {
+                config false;
+                uses otn-odu-termination-status-g;
+                description "none";
+            }
+            container otn-odu-termination-current-problems {
+                config false;
+                uses otn-odu-termination-current-problems-g;
+                description "none";
+            }
+            container otn-odu-termination-current-performance {
+                config false;
+                uses otn-odu-termination-current-performance-g;
+                description "none";
+            }
+            container otn-odu-termination-historical-performances {
+                config false;
+                uses otn-odu-termination-historical-performances-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otn-odu-termination-capability-g {
+            description "none";
+        }
+        grouping otn-odu-termination-configuration-g {
+            leaf odu-type {
+                type odu-type;
+                description "This attribute specifies the type of the ODU 
+                             termination point.";
+            }
+            leaf odu-rate {
+                type uint64;
+                description "This attribute indicates the rate of the ODU 
+                             terminatinon point. 
+                             This attribute is Set at create; i.e., once created
+                             it cannot be changed directly. 
+                             In case of resizable ODU flex, its value can be 
+                             changed via HAO (not directly on the attribute).";
+            }
+            leaf odu-rate-tolerance {
+                type uint64;
+                units "ppm";
+                description "This attribute indicates the rate tolerance of the 
+                             ODU termination point. 
+                             Valid values are real value in the unit of ppm. 
+                             Standardized values are defined in Table 7-2/G.709.
+                             ";
+            }
+            description "none";
+        }
+        grouping otn-odu-termination-status-g {
+            description "none";
+        }
+        grouping otn-odu-termination-current-problems-g {
+            description "none";
+        }
+        grouping otn-odu-termination-current-performance-g {
+            description "none";
+        }
+        grouping otn-odu-termination-historical-performances-g {
+            description "none";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-ptp-dataset@2017-05-08.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-ptp-dataset@2017-05-08.yang
new file mode 100644
index 0000000..41a1c39
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-ptp-dataset@2017-05-08.yang
@@ -0,0 +1,125 @@
+module onf-ptp-dataset {
+    namespace "urn:onf:params:xml:ns:yang:onf-ptp-dataset";
+    prefix ptp-ex;
+
+    import ietf-yang-types {
+        prefix yang;
+    }
+    import core-model {
+        prefix core-model;
+    }
+    import ietf-ptp-dataset {
+        prefix ptp;
+    }
+
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             Editors:  Alfons Mittermaier
+                       <mailto:alfons.mittermaier@@highstreet-technologies.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "This module contains a collection of YANG definitions to extent ptp-dataset.";
+    revision 2017-05-08 {
+        description "Initial version";
+        reference "A YANG Data Model extending ptp-dataset.";
+    }
+
+    augment "/ptp:instance-list/ptp:default-ds" {
+        description
+            "Addition of data nodes for the default data set of the clock.";
+
+        leaf local-priority {
+            type uint8;
+            default 128;
+            description
+                "none";
+            reference 
+                "ITU-T G.8275.1 Precision time protocol telecom profile for phase/time 
+                 synchronization with full timing support from the network
+                 Chapter 6.3.2";
+        }
+
+        leaf max-steps-removed {
+            type uint8;
+            default 128;
+            description
+                "none";
+            reference 
+                "ITU-T G.8275.1 Precision time protocol telecom profile for phase/time 
+                 synchronization with full timing support from the network
+                 Chapter 6.3";
+        }
+
+        leaf multicast-mac-address {
+            type yang:mac-address;
+            description
+                "none";
+        }
+        
+        leaf designated-enabled {
+            type boolean;
+            default true;
+            description
+                "A PTP Clock needs to be enabled by management.";
+        }
+    }
+
+    augment "/ptp:instance-list/ptp:port-ds-list" {
+        description
+            "Addition of data nodes for the default data set of the clock.";
+
+        leaf master-only {
+            type boolean;
+            default true;
+            description
+                "Indicates that port can only be a master.";
+        }
+
+        leaf local-priority {
+            type uint8;
+            default 128;
+            description
+                "Local priority as used for alternate BMCA";
+            reference 
+                "ITU-T G.8275.1 Precision time protocol telecom profile for phase/time 
+                 synchronization with full timing support from the network
+                 Chapter 6.3.2";
+        }
+
+        leaf designated-enabled {
+            type boolean;
+            default true;
+            description
+                "A PTP Port needs to be enabled by management.";
+            reference 
+                "IEEE 1588-2008 IEEE Standard for a Precision Clock Synchronization Protocol 
+                 for Networked Measurement and Control Systems
+                 Chapter 9.2";
+        }
+
+        leaf delay-asymmetry {
+            type int64;
+            default 0;
+            description
+                "As per PTP	Known path asymmetry in ns.";
+            reference 
+                "ITU-T G.8275.1 Precision time protocol telecom profile for phase/time 
+                 synchronization with full timing support from the network
+                 Chapter 7.4.2";
+        }
+        
+        leaf logical-termination-point {
+            type leafref {
+                path '/core-model:network-element/core-model:ltp/core-model:uuid';
+            }
+            description
+                "A reference to a LTP of layer-protocol-name 'ETY' or 'MWPS', which is used 
+                 to discover the PTP topology.";
+        }
+
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/photonic-media@2018-09-24.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/photonic-media@2018-09-24.yang
new file mode 100644
index 0000000..8ad2095
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/photonic-media@2018-09-24.yang
@@ -0,0 +1,207 @@
+module photonic-media {
+
+    namespace "urn:onf:params:xml:ns:yang:otsi-interface";
+    prefix otsi-interface;
+
+    import core-model {
+        prefix core-model;
+    }
+
+    import tapi-photonic-media{
+        prefix tapi-photonic-media;
+    }
+
+    import tapi-oam{
+         prefix tapi-oam;
+    }
+
+    import ietf-yang-types {
+        prefix yang;
+    }
+
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/software-defined-standards/models-apis/>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Shrikanth Malavalli Divakar
+                       <mailto:shrikanth.divakar@wipro.com>";
+    description "This module contains a collection of YANG definitions for managing Optical networks.
+        This model is for vendor agnostic management of Optical Transport.";
+
+    revision 2018-09-24 {
+        description "Version 1.0";
+        reference "ONF TR-XXX: A YANG Data Model for Optical Transport.";
+    }
+
+    /***********************
+    * package type-definitions
+    **********************/
+    typedef severity-type {
+        type enumeration {
+            enum non-alarmed {
+                description "none";
+            }
+            enum warning {
+                description "none";
+            }
+            enum minor {
+                description "none";
+            }
+            enum major {
+                description "none";
+            }
+            enum critical {
+                description "none";
+            }
+        }
+        description "According to ITU-T M.3160";
+    }
+
+
+    grouping otsi-interface-performance-type-g{
+        container fec-properties-pac{
+            uses tapi-photonic-media:fec-properties-pac-g;
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping otsi-interface-current-performance-type-g {
+        container performance-data {
+            config false;
+            uses otsi-interface-performance-type-g;
+            description "none";
+        }
+        uses tapi-oam:pm-current-data-g;
+        description "Turns performance information into current performance information by inheriting from TAPI OAM current  data.";
+    }
+
+    grouping otsi-interface-historical-performance-type-g {
+        container performance-data {
+            config false;
+            uses otsi-interface-performance-type-g;
+            description "none";
+        }
+        uses tapi-oam:pm-history-data-g;
+        description "Turns performance information into historical performance information by inheriting from TAPI OAM History data.";
+    }
+
+    grouping otsi-interface-current-performance-g {
+        list current-performance-data-list {
+            key 'local-id';
+            config false;
+            min-elements 1;
+            max-elements 2;
+            uses otsi-interface-current-performance-type-g;
+            description "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+        }
+        description "Aggregated performance information of the air interface at a particular moment.";
+    }
+
+    grouping otsi-interface-historical-performances-g {
+        list historical-performance-data-list {
+            key 'local-id';
+            config false;
+            uses otsi-interface-historical-performance-type-g;
+            description "none";
+        }
+        description "Aggregated performance information of the air interface for a pre-defined measurement interval.";
+    }
+
+    grouping otsi-interface-current-problem-type-g {
+        leaf problem-name {
+            type string;
+            default "Problem name not specified.";
+            config false;
+            description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+        }
+        uses otsi-current-problem-g;
+        description "none";
+    }
+
+    grouping otsi-interface-current-problems-g {
+        list current-problem-list {
+            key 'sequence-number';
+            config false;
+            uses otsi-interface-current-problem-type-g;
+            description "none";
+        }
+        description "none";
+    }
+
+    /***********************
+    * package object-classes
+    **********************/
+    /***********************
+    * package otsi-interface
+    **********************/
+    list otsi-interface-pac {
+        key 'layer-protocol';
+        leaf layer-protocol {
+            type leafref {
+                path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+            }
+            description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+        }
+        container otsi-interface-capability {
+            config false;
+             uses tapi-photonic-media:otsi-capability-pac-g;
+            description "none";
+        }
+        container otsi-interface-configuration {
+             uses tapi-photonic-media:otsi-termination-config-pac-g;
+            description "none";
+        }
+        container otsi-interface-status {
+            config false;
+            uses tapi-photonic-media:otsi-termination-pac-g;
+            description "none";
+        }
+        container otsi-interface-current-problems {
+            config false;
+            uses otsi-interface-current-problems-g;
+            description "none";
+        }
+        container otsi-interface-current-performance {
+            config false;
+            uses otsi-interface-current-performance-g;
+            description "none";
+        }
+        container otsi-interface-historical-performances {
+            config false;
+            uses otsi-interface-historical-performances-g;
+            description "none";
+        }
+        description "none";
+    }
+
+    /***********************
+    * package super-classes
+    **********************/
+        grouping otsi-current-problem-g {
+            leaf sequence-number {
+                type int32;
+                config false;
+                description "Unique sequence number of the current problem object.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                config false;
+                description "Time and date of the problem.  ";
+            }
+            leaf problem-severity {
+                type severity-type;
+                default warning;
+                config false;
+                description "Severity of the alarm.";
+            }
+            description "none";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-common@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-common@2018-08-31.yang
new file mode 100644
index 0000000..6489e0e
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-common@2018-08-31.yang
@@ -0,0 +1,666 @@
+module tapi-common {
+    namespace "urn:onf:otcc:yang:tapi-common";
+    prefix tapi-common;
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "
+        This module contains TAPI Common Model definitions.
+        Source: TapiCommon.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0
+        ";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+
+    /*************************
+    * definitions of refrences
+    *************************/
+    grouping service-interface-point-ref-g {
+        leaf service-interface-point-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-common:service-interface-point/tapi-common:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping admin-state-pac-g {
+            leaf administrative-state {
+                type administrative-state;
+                description "none";
+            }
+            leaf operational-state {
+                type operational-state;
+                config false;
+                description "none";
+            }
+            leaf lifecycle-state {
+                type lifecycle-state;
+                config false;
+                description "none";
+            }
+            description "Provides state attributes that are applicable to an entity that can be administered. Such an entity also has operational and lifecycle aspects.";
+        }
+        grouping global-class-g {
+            leaf uuid {
+                type uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable. An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            list name {
+                key 'value-name';
+                uses name-and-value-g;
+                description "List of names. A property of an entity with a value that is unique in some namespace but may change during the life of the entity. A name carries no semantics with respect to the purpose of the entity.";
+            }
+            description "The TAPI GlobalComponent serves as the super class for all TAPI entities that can be directly retrieved by their ID. As such, these are first class entities and their ID is expected to be globally unique. ";
+        }
+        grouping lifecycle-state-pac-g {
+            leaf lifecycle-state {
+                type lifecycle-state;
+                config false;
+                description "none";
+            }
+            description "Provides state attributes for an entity that has lifeccycle aspects only.";
+        }
+        grouping local-class-g {
+            leaf local-id {
+                type string;
+                description "none";
+            }
+            list name {
+                key 'value-name';
+                uses name-and-value-g;
+                description "List of names. A property of an entity with a value that is unique in some namespace but may change during the life of the entity. A name carries no semantics with respect to the purpose of the entity.";
+            }
+            description "The TAPI GlobalComponent serves as the super class for all TAPI entities that can be directly retrieved by their ID. As such, these are first class entities and their ID is expected to be globally unique. ";
+        }
+        grouping operational-state-pac-g {
+            leaf operational-state {
+                type operational-state;
+                config false;
+                description "none";
+            }
+            leaf lifecycle-state {
+                type lifecycle-state;
+                config false;
+                description "none";
+            }
+            description "Provides state attributes that are applicable to an entity that reflects operational aspects. Such an entity is expected to also have lifecycle aspects.";
+        }
+        container context {
+            uses tapi-context-g;
+            presence "Root container for all TAPI interaction";
+            description "none";
+        }
+        grouping tapi-context-g {
+            list service-interface-point {
+                key 'uuid';
+                uses service-interface-point-g;
+                description "none";
+            }
+            uses global-class-g;
+            description "The Network Control Domain (NCD) object class represents the scope of control that a particular SDN controller has with respect to a particular network, (i.e., encompassing a designated set of interconnected (virtual) network elements).";
+        }
+        grouping resource-spec-g {
+            uses global-class-g;
+            description "none";
+        }
+        grouping service-spec-g {
+            uses global-class-g;
+            description "none";
+        }
+        grouping service-interface-point-g {
+            leaf layer-protocol-name {
+                type layer-protocol-name;
+                config false;
+                description "Usage of layerProtocolName [>1]  in the ServiceInterfacePoint should be considered experimental";
+            }
+            leaf-list supported-layer-protocol-qualifier {
+                type layer-protocol-qualifier;
+                config false;
+                min-elements 1;
+                description "none";
+            }
+            uses resource-spec-g;
+            uses admin-state-pac-g;
+            uses capacity-pac-g;
+            description "The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. 
+                The structure of LTP supports all transport protocols including circuit and packet forms.";
+        }
+        grouping capacity-pac-g {
+            container total-potential-capacity {
+                config false;
+                uses capacity-g;
+                description "An optimistic view of the capacity of the TopologicalEntity assuming that any shared capacity is available to be taken.";
+            }
+            container available-capacity {
+                config false;
+                uses capacity-g;
+                description "Capacity available to be assigned.";
+            }
+            description "The TopologicalEntity derives capacity from the underlying realization. 
+                A TopologicalEntity may be an abstraction and virtualization of a subset of the underlying capability offered in a view or may be directly reflecting the underlying realization.
+                A TopologicalEntity may be directly used in the view or may be assigned to another view for use.
+                The clients supported by a multi-layer TopologicalEntity may interact such that the resources used by one client may impact those available to another. This is derived from the LTP spec details.
+                Represents the capacity available to user (client) along with client interaction and usage. 
+                A TopologicalEntity may reflect one or more client protocols and one or more members for each profile.";
+        }
+        grouping termination-pac-g {
+            leaf termination-direction {
+                type termination-direction;
+                config false;
+                description "The overall directionality of the LP. 
+                    - A BIDIRECTIONAL LP will have some SINK and/or SOURCE flowss.
+                    - A SINK LP can only contain elements with SINK flows or CONTRA_DIRECTION_SOURCE flows
+                    - A SOURCE LP can only contain SOURCE flows or CONTRA_DIRECTION_SINK flows";
+            }
+            leaf termination-state {
+                type termination-state;
+                config false;
+                description "Indicates whether the layer is terminated and if so how.";
+            }
+            description "Each transport layer is represented by a LayerProtocol (LP) instance. The LayerProtocol instances it can be used for controlling termination and monitoring functionality. 
+                It can also be used for controlling the adaptation (i.e. encapsulation and/or multiplexing of client signal), tandem connection monitoring, traffic conditioning and/or shaping functionality at an intermediate point along a connection. 
+                Where the client – server relationship is fixed 1:1 and immutable, the layers can be encapsulated in a single LTP instance. Where the is a n:1 relationship between client and server, the layers must be split over two separate instances of LTP. ";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/ 
+        identity LAYER_PROTOCOL_QUALIFIER {
+            description "none";
+        }
+        typedef administrative-state {
+            type enumeration {
+                enum LOCKED {
+                    description "Users are administratively prohibited from making use of the resource.";
+                }
+                enum UNLOCKED {
+                    description "Users are allowed to use the resource";
+                }
+            }
+            description "The possible values of the administrativeState.";
+        }
+        typedef date-and-time {
+            type string;
+            description "This primitive type defines the date and time according to the following structure:
+                yyyyMMddhhmmss.s[Z|{+|-}HHMm] where:
+                yyyy    0000..9999    year
+                MM    01..12            month
+                dd        01..31            day
+                hh        00..23            hour
+                mm    00..59            minute
+                ss        00..59            second
+                s        .0...9            tenth of second (set to .0 if EMS or NE cannot support this granularity)
+                Z        Z                indicates UTC (rather than local time)
+                {+|-}    + or -            delta from UTC
+                HH        00..23            time zone difference in hours
+                Mm    00..59            time zone difference in minutes.";
+        }
+        typedef directive-value {
+            type enumeration {
+                enum MINIMIZE {
+                    description "none";
+                }
+                enum MAXIMIZE {
+                    description "none";
+                }
+                enum ALLOW {
+                    description "none";
+                }
+                enum DISALLOW {
+                    description "none";
+                }
+                enum DONT_CARE {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef forwarding-direction {
+            type enumeration {
+                enum BIDIRECTIONAL {
+                    description "The Fowarding entity supports both BIDIRECTIONAL flows at all Ports (i.e. all Ports have both an INPUT flow and an OUTPUT flow defined)";
+                }
+                enum UNIDIRECTIONAL {
+                    description "The Forwarding entity has Ports that are either INPUT or OUTPUT. It has no BIDIRECTIONAL Ports.";
+                }
+                enum UNDEFINED_OR_UNKNOWN {
+                    description "Not a normal state. The system is unable to determine the correct value.";
+                }
+            }
+            description "The directionality of a Forwarding entity.";
+        }
+        typedef layer-protocol-name {
+            type enumeration {
+                enum ODU {
+                    description "Models the ODU layer as per ITU-T G.872";
+                }
+                enum ETH {
+                    description "Models the ETH layer as per ITU-T G.8010";
+                }
+                enum DSR {
+                    description "Models a Digital Signal of an unspecified rate. This value can be used when the intent is to respresent an generic digital layer signal without making any statement on its format or overhead (processing) capabilities.";
+                }
+                enum PHOTONIC_MEDIA {
+                    description "Models the OCH, OTSi, OTSiA, OTSiG, OMS, OTS and Media channels as per ITU-T G.872 (2017) version 4";
+                }
+            }
+            description "Provides a controlled list of layer protocol names and indicates the naming authority.
+                Note that it is expected that attributes will be added to this structure to convey the naming authority name, the name of the layer protocol using a human readable string and any particular standard reference.
+                Layer protocol names include:
+                -    Layer 1 (L1): OTU, ODU
+                -    Layer 2 (L2): Carrier Grade Ethernet (ETY, ETH), MPLS-TP (MT)
+                ";
+        }
+        typedef lifecycle-state {
+            type enumeration {
+                enum PLANNED {
+                    description "The resource is planned but is not present in the network.";
+                }
+                enum POTENTIAL_AVAILABLE {
+                    description "The supporting resources are present in the network but are shared with other clients; or require further configuration before they can be used; or both.
+                        o    When a potential resource is configured and allocated to a client it is moved to the installed state for that client.
+                        o    If the potential resource has been consumed (e.g. allocated to another client) it is moved to the planned state for all other clients.";
+                }
+                enum POTENTIAL_BUSY {
+                    description "The supporting resources are present in the network but are shared with other clients; or require further configuration before they can be used; or both.
+                        o    When a potential resource is configured and allocated to a client it is moved to the installed state for that client.
+                        o    If the potential resource has been consumed (e.g. allocated to another client) it is moved to the planned state for all other clients.";
+                }
+                enum INSTALLED {
+                    description "The resource is present in the network and is capable of providing the service expected.";
+                }
+                enum PENDING_REMOVAL {
+                    description "The resource has been marked for removal";
+                }
+            }
+            description "The possible values of the lifecycleState.";
+        }
+        grouping name-and-value-g {
+            leaf value-name {
+                type string;
+                description "The name of the value. The value need not have a name.";
+            }
+            leaf value {
+                type string;
+                description "The value";
+            }
+            description "A scoped name-value pair";
+        }
+        typedef operational-state {
+            type enumeration {
+                enum DISABLED {
+                    description "The resource is unable to meet the SLA of the user of the resource. If no (explicit) SLA is defined the resource is disabled if it is totally inoperable and unable to provide service to the user.";
+                }
+                enum ENABLED {
+                    description "The resource is partially or fully operable and available for use";
+                }
+            }
+            description "The possible values of the operationalState.";
+        }
+        typedef port-direction {
+            type enumeration {
+                enum BIDIRECTIONAL {
+                    description "The Port has both an INPUT flow and an OUTPUT flow defined.";
+                }
+                enum INPUT {
+                    description "The Port only has definition for a flow into the Forwarding entity (i.e. an ingress flow).";
+                }
+                enum OUTPUT {
+                    description "The Port only has definition for a flow out of the Forwarding entity (i.e. an egress flow).";
+                }
+                enum UNIDENTIFIED_OR_UNKNOWN {
+                    description "Not a normal state. The system is unable to determine the correct value.";
+                }
+            }
+            description "The orientation of flow at the Port of a Forwarding entity";
+        }
+        typedef port-role {
+            type enumeration {
+                enum SYMMETRIC {
+                    description "none";
+                }
+                enum ROOT {
+                    description "none";
+                }
+                enum LEAF {
+                    description "none";
+                }
+                enum TRUNK {
+                    description "none";
+                }
+                enum UNKNOWN {
+                    description "none";
+                }
+            }
+            description "The role of an end in the context of the function of the forwarding entity that it bounds";
+        }
+        typedef termination-direction {
+            type enumeration {
+                enum BIDIRECTIONAL {
+                    description "A Termination with both SINK and SOURCE flows.";
+                }
+                enum SINK {
+                    description "The flow is up the layer stack from the server side to the client side. 
+                        Considering an example of a Termination function within the termination entity, a SINK flow:
+                        - will arrive at at the base of the termination function (the server side) where it is essentially at an INPUT to the termination component
+                        - then will be decoded and deconstructed 
+                        - then relevant parts of the flow will be sent out of the termination function (the client side) where it is essentially at an OUTPUT from the termination component
+                        A SINK termination is one that only supports a SINK flow.
+                        A SINK termiation can be bound to an OUTPUT Port of a Forwarding entity";
+                }
+                enum SOURCE {
+                    description "The flow is down the layer stack from the server side to the client side. 
+                        Considering an example of a Termination function within the termination entity, a SOURCE flow:
+                        - will arrive at at the top of the termination function (the client side) where it is essentially at an INPUT to the termination component
+                        - then will be assembled with various overheads etc and will be coded 
+                        - then coded form of the assembly of flow will be sent out of the termination function (the server side) where it is essentially at an OUTPUT from the termination component
+                        A SOURCE termination is one that only supports a SOURCE flow.
+                        A SOURCE termiation can be bound to an INPUT Port of a Forwarding entity";
+                }
+                enum UNDEFINED_OR_UNKNOWN {
+                    description "Not a normal state. The system is unable to determine the correct value.";
+                }
+            }
+            description "The directionality of a termination entity";
+        }
+        typedef termination-state {
+            type enumeration {
+                enum LP_CAN_NEVER_TERMINATE {
+                    description "A non-flexible case that can never be terminated.";
+                }
+                enum LT_NOT_TERMINATED {
+                    description "A flexible termination that can terminate but is currently not terminated.";
+                }
+                enum TERMINATED_SERVER_TO_CLIENT_FLOW {
+                    description "A flexible termination that is currently terminated for server to client flow only.";
+                }
+                enum TERMINATED_CLIENT_TO_SERVER_FLOW {
+                    description "A flexible termination that is currently terminated for client to server flow only.";
+                }
+                enum TERMINATED_BIDIRECTIONAL {
+                    description "A flexible termination that is currently terminated in both directions of flow.";
+                }
+                enum LT_PERMENANTLY_TERMINATED {
+                    description "A non-flexible termination that is always terminated (in both directions of flow for a bidirectional case and in the one direction of flow for both unidirectional cases).";
+                }
+                enum TERMINATION_STATE_UNKNOWN {
+                    description "There TerminationState cannot be determined.";
+                }
+            }
+            description "Provides support for the range of behaviours and specific states that an LP can take with respect to termination of the signal.
+                Indicates to what degree the LayerTermination is terminated.";
+        }
+        typedef uuid {
+            type string;
+            description "The univeral ID value where the mechanism for generation is defned by some authority not directly referenced in the structure.
+                UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+        }
+        grouping capacity-g {
+            container total-size {
+                uses capacity-value-g;
+                description "Total capacity of the TopologicalEntity in MB/s. In case of bandwidthProfile, this is expected to same as the committedInformationRate.";
+            }
+            container bandwidth-profile {
+                uses bandwidth-profile-g;
+                description "none";
+            }
+            description "Information on capacity of a particular TopologicalEntity.";
+        }
+        grouping bandwidth-profile-g {
+            leaf bw-profile-type {
+                type bandwidth-profile-type;
+                description "none";
+            }
+            container committed-information-rate {
+                uses capacity-value-g;
+                description "none";
+            }
+            container committed-burst-size {
+                uses capacity-value-g;
+                description "none";
+            }
+            container peak-information-rate {
+                uses capacity-value-g;
+                description "none";
+            }
+            container peak-burst-size {
+                uses capacity-value-g;
+                description "none";
+            }
+            leaf color-aware {
+                type boolean;
+                description "none";
+            }
+            leaf coupling-flag {
+                type boolean;
+                description "none";
+            }
+            description "none";
+        }
+        grouping capacity-value-g {
+            leaf value {
+                type uint64;
+                description "none";
+            }
+            leaf unit {
+                type capacity-unit;
+                description "none";
+            }
+            description "The Capacity (Bandwidth) values that are applicable for digital layers.";
+        }
+        typedef capacity-unit {
+            type enumeration {
+                enum TB {
+                    description "Indicates that the integer CapacityValue is in TeraBytes";
+                }
+                enum TBPS {
+                    description "Indicates that the integer CapacityValue is in Terabit-per-second";
+                }
+                enum GB {
+                    description "Indicates that the integer CapacityValue is in GigaBytes";
+                }
+                enum GBPS {
+                    description "Indicates that the integer CapacityValue is in Gigabit-per-second";
+                }
+                enum MB {
+                    description "Indicates that the integer CapacityValue is in MegaBytes";
+                }
+                enum MBPS {
+                    description "Indicates that the integer CapacityValue is in Megabit-per-second";
+                }
+                enum KB {
+                    description "Indicates that the integer CapacityValue is in KiloBytes";
+                }
+                enum KBPS {
+                    description "Indicates that the integer CapacityValue is in Kilobit-per-second";
+                }
+                enum GHz {
+                    description "none";
+                }
+                enum MHz {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef bandwidth-profile-type {
+            type enumeration {
+                enum MEF_10.x {
+                    description "none";
+                }
+                enum RFC_2697 {
+                    description "none";
+                }
+                enum RFC_2698 {
+                    description "none";
+                }
+                enum RFC_4115 {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping time-range-g {
+            leaf end-time {
+                type date-and-time;
+                description "none";
+            }
+            leaf start-time {
+                type date-and-time;
+                description "none";
+            }
+            description "none";
+        }
+        grouping time-period-g {
+            leaf value {
+                type uint64;
+                description "none";
+            }
+            leaf unit {
+                type time-unit;
+                description "none";
+            }
+            description "none";
+        }
+        typedef time-unit {
+            type enumeration {
+                enum YEARS {
+                    description "none";
+                }
+                enum MONTHS {
+                    description "none";
+                }
+                enum DAYS {
+                    description "none";
+                }
+                enum HOURS {
+                    description "none";
+                }
+                enum MINUTES {
+                    description "none";
+                }
+                enum SECONDS {
+                    description "none";
+                }
+                enum MILLISECONDS {
+                    description "none";
+                }
+                enum MICROSECONDS {
+                    description "none";
+                }
+                enum NANOSECONDS {
+                    description "none";
+                }
+                enum PICOSECONDS {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping time-interval-g {
+            list period {
+                min-elements 1;
+                max-elements 5;
+                uses time-period-g;
+                description "none";
+            }
+            description "none";
+        }
+        typedef layer-protocol-qualifier {
+            type identityref {
+                base LAYER_PROTOCOL_QUALIFIER;
+            }
+            description "This enumeration is used to qualify the sub-layers (if applicable) for a specific LayerProtocol.
+                This extensible enumeration is intentionally empty in the common module and will be augmented with layer-specific values in the respective technology-specific modules.
+                Examples:
+                - LayerProtocolName := OPTICAL_DATA_UNIT
+                LayerProtocolQualifier := 'ODU_FLEX', 'ODU_0', 'ODU_1', 'ODU_2', 'ODU_2E', 'ODU_3', 'ODU_4'', 'ODU_CBR'', 'ODU_GFP'', 'ODU_GFP_HAO', etc
+                - LayerProtocolName := DIGITAL_SIGNAL_RATE
+                LayerProtocolQualifier := 'GBE', '10_GBE_WAN', '10_GBE_LAN', '100_GBE', 'FC_100', 'FC_200', 'FC_400', 'FC_800', 'FC_1200', 'FC_1600', 'FC_3200', 'STM_1', 'STM_4', 'STM_16', 'STM_64', 'STM_256', 'OC_3', 'OC_12', 'OC_48', 'OC_192', 'OC_768', 'OTU_1', 'OTU_2', 'OTU_2E', 'OTU_3', 'OTU_4', 'GPON', 'XGPON', 'IB_SDR', 'IB_DDR', 'IB_QDR', 'SBCON_ESCON', 'DVB_ASI', 'SDI', 'SDI_1G5', 'SDI_3G', etc
+                - LayerProtocolName := PHOTONIC_MEDIA
+                LayerProtocolQualifier := OCH, OTSi, OTSiA, NMC, NMCA, SMC, SMCA, OMS, OTS
+                ";
+        }
+
+    /***********************
+    * package interfaces
+    **********************/ 
+        rpc get-service-interface-point-details {
+            description "none";
+            input {
+                leaf sip-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container sip {
+                    uses service-interface-point-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-service-interface-point-list {
+            description "none";
+            output {
+                list sip {
+                    uses service-interface-point-g;
+                    description "none";
+                }
+            }
+        }
+        rpc update-service-interface-point {
+            description "none";
+            input {
+                leaf sip-id-or-name {
+                    type string;
+                    description "none";
+                }
+                leaf state {
+                    type administrative-state;
+                    description "none";
+                }
+            }
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-connectivity@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-connectivity@2018-08-31.yang
new file mode 100644
index 0000000..be08419
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-connectivity@2018-08-31.yang
@@ -0,0 +1,718 @@
+module tapi-connectivity {
+    namespace "urn:onf:otcc:yang:tapi-connectivity";
+    prefix tapi-connectivity;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    import tapi-path-computation {
+        prefix tapi-path-computation;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "
+        This module contains TAPI Connectivity Model definitions.
+        Source: TapiConnectivity.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    augment "/tapi-common:context" {
+        uses connectivity-context-g;
+        description "Augments the base TAPI Context with ConnectivityService information";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point" {
+        uses cep-list-g;
+        description "none";
+    }
+
+    /*************************
+    * definitions of references
+    *************************/
+    grouping connectivity-service-ref-g {
+        leaf connectivity-service-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-connectivity:connectivity-service/tapi-connectivity:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping connectivity-service-end-point-ref-g {
+        uses connectivity-service-ref-g;
+        leaf connectivity-service-end-point-local-id {
+            type leafref {
+                path '/tapi-common:context/tapi-connectivity:connectivity-service/tapi-connectivity:end-point/tapi-connectivity:local-id';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping connection-end-point-ref-g {
+        uses tapi-topology:node-edge-point-ref-g;
+        leaf connection-end-point-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point/tapi-connectivity:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping connection-ref-g {
+        leaf connection-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-connectivity:connection/tapi-connectivity:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping switch-control-ref-g {
+        uses connection-ref-g;
+        leaf switch-control-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-connectivity:connection/tapi-connectivity:switch-control/tapi-connectivity:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping route-ref-g {
+        uses connection-ref-g;
+        leaf route-local-id {
+            type leafref {
+                path '/tapi-common:context/tapi-connectivity:connection/tapi-connectivity:route/tapi-connectivity:local-id';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    /***********************
+    * package object-classes
+    **********************/
+        grouping connection-g {
+            list connection-end-point {
+                uses connection-end-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
+                config false;
+                min-elements 2;
+                description "none";
+            }
+            list lower-connection {
+                uses connection-ref-g;
+                key 'connection-uuid';
+                config false;
+                description "An Connection object supports a recursive aggregation relationship such that the internal construction of an Connection can be exposed as multiple lower level Connection objects (partitioning).
+                    Aggregation is used as for the Node/Topology  to allow changes in hierarchy.
+                    Connection aggregation reflects Node/Topology aggregation.
+                    The FC represents a Cross-Connection in an NE. The Cross-Connection in an NE is not necessarily the lowest level of FC partitioning.";
+            }
+            list supported-client-link {
+                uses tapi-topology:link-ref-g;
+                key 'topology-uuid link-uuid';
+                config false;
+                description "none";
+            }
+            list route {
+                key 'local-id';
+                config false;
+                uses route-g;
+                description "none";
+            }
+            list switch-control {
+                key 'uuid';
+                config false;
+                uses switch-control-g;
+                description "none";
+            }
+            leaf direction {
+                type tapi-common:forwarding-direction;
+                config false;
+                description "none";
+            }
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            uses tapi-common:operational-state-pac-g;
+            description "The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms.
+                At the lowest level of recursion, a FC represents a cross-connection within an NE.";
+        }
+        grouping connection-end-point-g {
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            leaf layer-protocol-qualifier {
+                type tapi-common:layer-protocol-qualifier;
+                config false;
+                description "none";
+            }
+            container parent-node-edge-point {
+                uses tapi-topology:node-edge-point-ref-g;
+                config false;
+                description "none";
+            }
+            list client-node-edge-point {
+                uses tapi-topology:node-edge-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid';
+                config false;
+                description "none";
+            }
+            list aggregated-connection-end-point {
+                uses connection-end-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
+                config false;
+                description "none";
+            }
+            leaf connection-port-direction {
+                type tapi-common:port-direction;
+                config false;
+                description "The orientation of defined flow at the EndPoint.";
+            }
+            leaf connection-port-role {
+                type tapi-common:port-role;
+                config false;
+                description "Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root)  in the context of the FC with respect to the FC function. ";
+            }
+            uses tapi-common:resource-spec-g;
+            uses tapi-common:operational-state-pac-g;
+            uses tapi-common:termination-pac-g;
+            description "The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers.
+                The structure of LTP supports all transport protocols including circuit and packet forms.";
+        }
+        grouping connectivity-constraint-g {
+            leaf service-layer {
+                type tapi-common:layer-protocol-name;
+                description "none";
+            }
+            leaf service-type {
+                type service-type;
+                description "none";
+            }
+            leaf service-level {
+                type string;
+                description "An abstract value the meaning of which is mutually agreed – typically represents metrics such as - Class of service, priority, resiliency, availability";
+            }
+            container requested-capacity {
+                uses tapi-common:capacity-g;
+                description "none";
+            }
+            leaf connectivity-direction {
+                type tapi-common:forwarding-direction;
+                description "none";
+            }
+            container schedule {
+                uses tapi-common:time-range-g;
+                description "none";
+            }
+            container coroute-inclusion {
+                uses connectivity-service-ref-g;
+                description "none";
+            }
+            list diversity-exclusion {
+                uses connectivity-service-ref-g;
+                key 'connectivity-service-uuid';
+                description "none";
+            }
+            description "none";
+        }
+        grouping connectivity-service-g {
+            list end-point {
+                key 'local-id';
+                min-elements 2;
+                uses connectivity-service-end-point-g;
+                description "none";
+            }
+            list connection {
+                uses connection-ref-g;
+                key 'connection-uuid';
+                config false;
+                description "none";
+            }
+            uses tapi-common:service-spec-g;
+            uses connectivity-constraint-g;
+            uses tapi-path-computation:routing-constraint-g;
+            uses tapi-path-computation:topology-constraint-g;
+            uses resilience-constraint-g;
+            uses tapi-common:admin-state-pac-g;
+            description "The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms.
+                At the lowest level of recursion, a FC represents a cross-connection within an NE.";
+        }
+        grouping connectivity-service-end-point-g {
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                description "none";
+            }
+            leaf layer-protocol-qualifier {
+                type tapi-common:layer-protocol-qualifier;
+                description "none";
+            }
+            container service-interface-point {
+                uses tapi-common:service-interface-point-ref-g;
+                description "none";
+            }
+            list connection-end-point {
+                uses connection-end-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
+                config false;
+                description "none";
+            }
+            container capacity {
+                uses tapi-common:capacity-g;
+                description "none";
+            }
+            leaf direction {
+                type tapi-common:port-direction;
+                description "The orientation of defined flow at the EndPoint.";
+            }
+            leaf role {
+                type tapi-common:port-role;
+                description "Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root)  in the context of the FC with respect to the FC function. ";
+            }
+            leaf protection-role {
+                type protection-role;
+                description "To specify the protection role of this Port when create or update ConnectivityService.";
+            }
+            uses tapi-common:local-class-g;
+            uses tapi-common:admin-state-pac-g;
+            description "The association of the FC to LTPs is made via EndPoints.
+                The EndPoint (EP) object class models the access to the FC function.
+                The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances.
+                In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC.
+                It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point.
+                The EP replaces the Protection Unit of a traditional protection model.
+                The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component";
+        }
+        grouping route-g {
+            list connection-end-point {
+                uses connection-end-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
+                config false;
+                min-elements 2;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            description "The FC Route (FcRoute) object class models the individual routes of an FC.
+                The route of an FC object is represented by a list of FCs at a lower level.
+                Note that depending on the service supported by an FC, an the FC can have multiple routes.";
+        }
+        grouping connectivity-context-g {
+            list connectivity-service {
+                key 'uuid';
+                uses connectivity-service-g;
+                description "none";
+            }
+            list connection {
+                key 'uuid';
+                config false;
+                uses connection-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping switch-g {
+            list selected-connection-end-point {
+                uses connection-end-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
+                min-elements 1;
+                description "none";
+            }
+            list selected-route {
+                uses route-ref-g;
+                key 'connection-uuid route-local-id';
+                min-elements 1;
+                description "none";
+            }
+            leaf selection-control {
+                type selection-control;
+                description "Degree of administrative control applied to the switch selection.";
+            }
+            leaf selection-reason {
+                type selection-reason;
+                config false;
+                description "The reason for the current switch selection.";
+            }
+            leaf switch-direction {
+                type tapi-common:port-direction;
+                description "Indicates whether the switch selects from ingress to the FC or to egress of the FC, or both.";
+            }
+            uses tapi-common:local-class-g;
+            description "The class models the switched forwarding of traffic (traffic flow) between FcPorts (ConnectionEndPoints) and is present where there is protection functionality in the FC (Connection).
+                If an FC exposes protection (having two or more FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects to represent the alternative flow choices visible at the edge of the FC.
+                The FC switch represents and defines a protection switch structure encapsulated in the FC.
+                Essentially performs one of the functions of the Protection Group in a traditional model. It associates to 2 or more FcPorts each playing the role of a Protection Unit.
+                One or more protection, i.e. standby/backup, FcPorts provide protection for one or more working (i.e. regular/main/preferred) FcPorts where either protection or working can feed one or more protected FcPort.
+                The switch may be used in revertive or non-revertive (symmetric) mode. When in revertive mode it may define a waitToRestore time.
+                It may be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 and 1:1).
+                It may be locked out (prevented from switching), force switched or manual switched.
+                It will indicate switch state and change of state.
+                The switch can be switched away from all sources such that it becomes open and hence two coordinated switches can both feed the same LTP so long as at least one of the two is switched away from all sources (is 'open').
+                The ability for a Switch to be 'high impedance' allows bidirectional ForwardingConstructs to be overlaid on the same bidirectional LTP where the appropriate control is enabled to prevent signal conflict.
+                This ability allows multiple alternate routes to be present that otherwise would be in conflict.";
+        }
+        grouping switch-control-g {
+            list sub-switch-control {
+                uses switch-control-ref-g;
+                key 'connection-uuid switch-control-uuid';
+                description "none";
+            }
+            list switch {
+                key 'local-id';
+                uses switch-g;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            uses resilience-constraint-g;
+            description "Represents the capability to control and coordinate switches, to add/delete/modify FCs and to add/delete/modify LTPs/LPs so as to realize a protection scheme.";
+        }
+        grouping resilience-constraint-g {
+            container resilience-type {
+                uses tapi-topology:resilience-type-g;
+                description "none";
+            }
+            leaf restoration-coordinate-type {
+                type coordinate-type;
+                description " The coordination mechanism between multi-layers.";
+            }
+            leaf restore-priority {
+                type uint64;
+                description "none";
+            }
+            leaf reversion-mode {
+                type reversion-mode;
+                description "Indcates whether the protection scheme is revertive or non-revertive.";
+            }
+            leaf wait-to-revert-time {
+                type uint64;
+                default "15";
+                description "If the protection system is revertive, this attribute specifies the time, in minutes, to wait after a fault clears on a higher priority (preferred) resource before reverting to the preferred resource.";
+            }
+            leaf hold-off-time {
+                type uint64;
+                description "This attribute indicates the time, in milliseconds, between declaration of signal degrade or signal fail, and the initialization of the protection switching algorithm.";
+            }
+            leaf is-lock-out {
+                type boolean;
+                description "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of.
+                    This overrides all other protection control states including forced.
+                    If the item is locked out then it cannot be used under any circumstances.
+                    Note: Only relevant when part of a protection scheme.";
+            }
+            leaf is-frozen {
+                type boolean;
+                description "Temporarily prevents any switch action to be taken and, as such, freezes the current state.
+                    Until the freeze is cleared, additional near-end external commands are rejected and fault condition changes and received APS messages are ignored.
+                    All administrative controls of any aspect of protection are rejected.";
+            }
+            leaf is-coordinated-switching-both-ends {
+                type boolean;
+                description "Is operating such that switching at both ends of each flow acorss the FC is coordinated at both ingress and egress ends.";
+            }
+            leaf max-switch-times {
+                type uint64;
+                description "Used to limit the maximum swtich times. When work fault disappears , and traffic return to the original work path, switch counter reset.";
+            }
+            leaf-list preferred-restoration-layer {
+                type tapi-common:layer-protocol-name;
+                description "Indicate which layer this resilience parameters package configured for.";
+            }
+            description "A list of control parameters to apply to a switch.";
+        }
+        grouping cep-list-g {
+            list connection-end-point {
+                key 'uuid';
+                uses connection-end-point-g;
+                description "none";
+            }
+            description "none";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/
+        typedef service-type {
+            type enumeration {
+                enum POINT_TO_POINT_CONNECTIVITY {
+                    description "none";
+                }
+                enum POINT_TO_MULTIPOINT_CONNECTIVITY {
+                    description "none";
+                }
+                enum MULTIPOINT_CONNECTIVITY {
+                    description "none";
+                }
+                enum ROOTED_MULTIPOINT_CONNECTIVITY {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef reversion-mode {
+            type enumeration {
+                enum REVERTIVE {
+                    description "An FC switched to a lower priority (non-preferred) resource will revert to a higher priority (preferred) resource when that recovers (potentially after some hold-off time).";
+                }
+                enum NON-REVERTIVE {
+                    description "An FC switched to a lower priority (non-preferred) resource will not revert to a higher priority (preferred) resource when that recovers.";
+                }
+            }
+            description "The reversion mode associated with protection.";
+        }
+        typedef selection-control {
+            type enumeration {
+                enum LOCK_OUT {
+                    description "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of.
+                        This overrides all other protection control states including forced.
+                        If the item is locked out then it cannot be used under any circumstances.
+                        Note: Only relevant when part of a protection scheme.";
+                }
+                enum NORMAL {
+                    description "none";
+                }
+                enum MANUAL {
+                    description "none";
+                }
+                enum FORCED {
+                    description "none";
+                }
+            }
+            description "Possible degrees of administrative control applied to the Route selection.";
+        }
+        typedef selection-reason {
+            type enumeration {
+                enum LOCKOUT {
+                    description "none";
+                }
+                enum NORMAL {
+                    description "none";
+                }
+                enum MANUAL {
+                    description "none";
+                }
+                enum FORCED {
+                    description "none";
+                }
+                enum WAIT_TO_REVERT {
+                    description "none";
+                }
+                enum SIGNAL_DEGRADE {
+                    description "none";
+                }
+                enum SIGNAL_FAIL {
+                    description "none";
+                }
+            }
+            description "The cause of the current route selection.";
+        }
+        typedef coordinate-type {
+            type enumeration {
+                enum NO_COORDINATE {
+                    description "none";
+                }
+                enum HOLD_OFF_TIME {
+                    description "none";
+                }
+                enum WAIT_FOR_NOTIFICATION {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef protection-role {
+            type enumeration {
+                enum WORK {
+                    description "none";
+                }
+                enum PROTECT {
+                    description "none";
+                }
+                enum PROTECTED {
+                    description "none";
+                }
+                enum NA {
+                    description "none";
+                }
+                enum WORK_RESTORE {
+                    description "none";
+                }
+                enum PROTECT_RESTORE {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+
+    /***********************
+    * package interfaces
+    **********************/
+        rpc get-connection-details {
+            description "none";
+            input {
+                leaf service-id-or-name {
+                    type string;
+                    description "none";
+                }
+                leaf connection-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container connection {
+                    uses connection-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-connectivity-service-list {
+            description "none";
+            output {
+                list service {
+                    uses connectivity-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-connectivity-service-details {
+            description "none";
+            input {
+                leaf service-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses connectivity-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc create-connectivity-service {
+            description "none";
+            input {
+                list end-point {
+                    key 'local-id';
+                    min-elements 2;
+                    uses connectivity-service-end-point-g;
+                    description "none";
+                }
+                container connectivity-constraint {
+                    uses connectivity-constraint-g;
+                    description "none";
+                }
+                container routing-constraint {
+                    uses tapi-path-computation:routing-constraint-g;
+                    description "none";
+                }
+                container topology-constraint {
+                    uses tapi-path-computation:topology-constraint-g;
+                    description "none";
+                }
+                list resilience-constraint {
+                    uses resilience-constraint-g;
+                    description "none";
+                }
+                leaf state {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses connectivity-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc update-connectivity-service {
+            description "none";
+            input {
+                leaf service-id-or-name {
+                    type string;
+                    description "none";
+                }
+                container end-point {
+                    uses connectivity-service-end-point-g;
+                    description "none";
+                }
+                container connectivity-constraint {
+                    uses connectivity-constraint-g;
+                    description "none";
+                }
+                container routing-constraint {
+                    uses tapi-path-computation:routing-constraint-g;
+                    description "none";
+                }
+                container topology-constraint {
+                    uses tapi-path-computation:topology-constraint-g;
+                    description "none";
+                }
+                list resilience-constraint {
+                    uses resilience-constraint-g;
+                    description "none";
+                }
+                leaf state {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses connectivity-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc delete-connectivity-service {
+            description "none";
+            input {
+                leaf service-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-dsr@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-dsr@2018-08-31.yang
new file mode 100644
index 0000000..68e1fbf
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-dsr@2018-08-31.yang
@@ -0,0 +1,204 @@
+module tapi-dsr {
+    namespace "urn:onf:otcc:yang:tapi-dsr";
+    prefix tapi-dsr;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "none";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    /***********************
+    * package type-definitions
+    **********************/ 
+        identity DIGITAL_SIGNAL_TYPE {
+        	base tapi-common:LAYER_PROTOCOL_QUALIFIER;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_GigE {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_10_GigE_LAN {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_10_GigE_WAN {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_40_GigE {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_100_GigE {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_FC_100 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_FC_200 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_FC_400 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_FC_800 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_FC_1200 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_FC_1600 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_FC_3200 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_STM_1 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_STM_4 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_STM_16 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_STM_64 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_STM_256 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OC_3 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OC_12 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OC_48 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OC_192 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OC_768 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OTU_1 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OTU_2 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OTU_2E {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OTU_3 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OTU_4 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_GPON {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_XGPON {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_IB_SDR {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_IB_DDR {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_IB_QDR {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_SBCON_ESCON {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_DVB_ASI {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_SDI {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_SDI_1G5 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_SDI_3G {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        typedef digital-signal-type {
+            type identityref {
+                base DIGITAL_SIGNAL_TYPE;
+            }
+            description "none";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-eth@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-eth@2018-08-31.yang
new file mode 100644
index 0000000..e8c44e7
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-eth@2018-08-31.yang
@@ -0,0 +1,1770 @@
+module tapi-eth {
+    namespace "urn:onf:otcc:yang:tapi-eth";
+    prefix tapi-eth;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    import tapi-connectivity {
+        prefix tapi-connectivity;
+    }
+    import tapi-oam {
+        prefix tapi-oam;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "This module contains TAPI ETH Model definitions.
+        Source: TapiEth.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point" {
+        uses eth-connection-end-point-spec-g;
+        description "Augments the base LayerProtocol information in ConnectionEndPoint with ETH-specific information";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job" {
+        uses eth-loopback-job-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:meg" {
+        uses eth-meg-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:meg/tapi-oam:mep" {
+        uses eth-mep-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:meg/tapi-oam:mip" {
+        uses eth-mip-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job" {
+        uses eth-pro-active-2way-measurement-job-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job" {
+        uses eth-link-trace-job-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job" {
+        uses eth-test-job-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job" {
+        uses eth-pro-active-1way-measurement-job-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-pro-active-dm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:pm-history-data" {
+        uses eth-pro-active-dm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-pro-active-lm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:pm-history-data" {
+        uses eth-pro-active-lm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-on-demand-dm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-on-demand-1-lm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-on-demand-1-dm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-pro-active-1-dm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:pm-history-data" {
+        uses eth-pro-active-1-dm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-pro-active-1-lm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:pm-history-data" {
+        uses eth-pro-active-1-lm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job" {
+        uses eth-on-demand-1way-measurement-job-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job" {
+        uses eth-on-demand-2way-measurement-job-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:pm-history-data" {
+        uses eth-on-demand-1-dm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:pm-history-data" {
+        uses eth-on-demand-1-lm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:pm-history-data" {
+        uses eth-on-demand-dm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-on-demand-lm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:pm-history-data" {
+        uses eth-on-demand-lm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-profile/tapi-oam:pm-threshold-data" {
+        uses eth-1-dm-threshold-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-profile/tapi-oam:pm-threshold-data" {
+        uses eth-1-lm-threshold-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-profile/tapi-oam:pm-threshold-data" {
+        uses eth-dm-threshold-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-profile/tapi-oam:pm-threshold-data" {
+        uses eth-lm-threshold-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-link-trace-result-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-test-result-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-loopback-result-data-g;
+        description "none";
+    }
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping eth-ctp-pac-g {
+            leaf-list auxiliary-function-position-sequence {
+                type uint64;
+                description "This attribute indicates the positions (i.e., the relative order) of all the MEP, MIP, and TCS objects which are associated with the CTP.";
+            }
+            leaf vlan-config {
+                type uint64;
+                description "This attribute models the ETHx/ETH-m_A_So_MI_Vlan_Config information defined in G.8021.
+                    range of type : -1, 0, 1..4094";
+            }
+            leaf csf-rdi-fdi-enable {
+                type boolean;
+                description "This attribute models the MI_CSFrdifdiEnable information defined in G.8021.";
+            }
+            leaf csf-report {
+                type boolean;
+                description "This attribute models the MI_CSF_Reported information defined in G.8021.
+                    range of type : true, false";
+            }
+            leaf-list filter-config-snk {
+                type mac-address;
+                description "This attribute models the FilteConfig MI defined in 8.3/G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are:
+                    01-80-C2-00-00-10, 
+                    01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 
+                    01-80-C2-00-00-20 to 01-80-C2-00-00-2F.
+                    The filter action is Pass or Block. 
+                    If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. 
+                    If none of the above addresses match, the ETH_CI_D is passed.";
+            }
+            leaf mac-length {
+                type uint64;
+                default "2000";
+                description "This attribute models the MAC_Lenght MI defined in 8.6/G.8021 for the MAC Length Check process. It indicates the allowed maximum frame length in bytes.
+                    range of type : 1518, 1522, 2000";
+            }
+            container filter-config {
+                uses control-frame-filter-g;
+                description "This attribute models the FilterConfig MI defined in section 8.3/G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are:
+                    - All bridges address: 01-80-C2-00-00-10,
+                    - Reserved addresses: 01-80-C2-00-00-00 to 01-80-C2-00-00-0F,
+                    - GARP Application addresses: 01-80-C2-00-00-20 to 01-80-C2-00-00-2F.
+                    The filter action is Pass or Block. 
+                    If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. 
+                    If none of the above addresses match, the ETH_CI_D is passed.";
+            }
+            leaf is-ssf-reported {
+                type boolean;
+                description "This attribute provisions whether the SSF defect should be reported as fault cause or not.
+                    It models the ETH-LAG_FT_Sk_MI_SSF_Reported defined in G.8021.";
+            }
+            leaf pll-thr {
+                type uint64;
+                description "This attribute provisions the threshold for the number of active ports. If the number of active ports is more than zero but less than the provisioned threshold, a cPLL (Partial Link Loss) is raised. See section 9.7.1.2 of G.8021.
+                    range of type : 0..number of ports";
+            }
+            leaf actor-oper-key {
+                type uint64;
+                config false;
+                description "See 802.1AX:
+                    The current operational value of the Key for the Aggregator. The administrative Key value may differ from the operational Key value for the reasons discussed in 5.6.2.
+                    The meaning of particular Key values is of local significance.
+                    range of type : 16 bit";
+            }
+            leaf actor-system-id {
+                type mac-address;
+                description "See 802.1AX:
+                    A MAC address used as a unique identifier for the System that contains this Aggregator.";
+            }
+            leaf actor-system-priority {
+                type uint64;
+                description "See 802.1AX:
+                    Indicating the priority associated with the Actor’s System ID.
+                    range of type : 2-octet";
+            }
+            leaf collector-max-delay {
+                type uint64;
+                description "See 802.1AX:
+                    The value of this attribute defines the maximum delay, in tens of microseconds, that may be imposed by the Frame Collector between receiving a frame from an Aggregator Parser, and either delivering the frame to its MAC Client or discarding the frame (see IEEE 802.1AX clause 5.2.3.1.1).
+                    range of type : 16-bit";
+            }
+            leaf data-rate {
+                type uint64;
+                config false;
+                description "See 802.1AX:
+                    The current data rate, in bits per second, of the aggregate link. The value is calculated as N times the data rate of a single link in the aggregation, where N is the number of active links.";
+            }
+            leaf partner-oper-key {
+                type uint64;
+                config false;
+                description "See 802.1AX:
+                    The current operational value of the Key for the Aggregator’s current protocol Partner. If the aggregation is manually configured, this Key value will be a value assigned by the local System.
+                    range of type : 16-bit";
+            }
+            leaf partner-system-id {
+                type mac-address;
+                config false;
+                description "See 802.1AX:
+                    A MAC address consisting of the unique identifier for the current protocol Partner of this Aggregator. A value of zero indicates that there is no known Partner. If the aggregation is manually configured, this System ID value will be a value assigned by the local System.";
+            }
+            leaf partner-system-priority {
+                type uint64;
+                config false;
+                description "See 802.1AX:
+                    Indicates the priority associated with the Partner’s System ID. If the aggregation is manually configured, this System Priority value will be a value assigned by the local System.
+                    range of type : 2-octet";
+            }
+            leaf csf-config {
+                type csf-config;
+                description "This attribute models the combination of all CSF related MI signals (MI_CSF_Enable, MI_CSFrdifdi_Enable, MI_CSFdci_Enable) as defined in G.8021.
+                    range of type : true, false";
+            }
+            container traffic-shaping {
+                uses traffic-shaping-pac-g;
+                description "none";
+            }
+            container traffic-conditioning {
+                uses traffic-conditioning-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping eth-connection-end-point-spec-g {
+            container ety-term {
+                uses ety-termination-pac-g;
+                description "none";
+            }
+            container eth-term {
+                uses eth-termination-pac-g;
+                description "none";
+            }
+            container eth-ctp {
+                uses eth-ctp-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping eth-termination-pac-g {
+            container priority-regenerate {
+                uses priority-mapping-g;
+                description "This attribute models the ETHx/ETH-m _A_Sk_MI_P_Regenerate information defined in G.8021.";
+            }
+            leaf ether-type {
+                type vlan-type;
+                description "This attribute models the ETHx/ETH-m _A_Sk_MI_Etype information defined in G.8021.";
+            }
+            leaf-list filter-config-1 {
+                type mac-address;
+                description "This attribute models the ETHx/ETH-m_A_Sk_MI_Filter_Config information defined in G.8021.
+                    It indicates the configured filter action for each of the 33 group MAC addresses for control frames.
+                    The 33 MAC addresses are:
+                    01-80-C2-00-00-10, 
+                    01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 
+                    01-80-C2-00-00-20 to 01-80-C2-00-00-2F.
+                    The filter action is Pass or Block. 
+                    If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. 
+                    If none of the above addresses match, the ETH_CI_D is passed.
+                    range of type : MacAddress: 
+                    01-80-C2-00-00-10, 
+                    01-80-C2-00-00-00 to 
+                    01-80-C2-00-00-0F, and 
+                    01-80-C2-00-00-20 to 
+                    01-80-C2-00-00-2F;
+                    ActionEnum:
+                    PASS, BLOCK";
+            }
+            leaf frametype-config {
+                type frame-type;
+                description "This attribute models the ETHx/ETH-m_A_Sk_MI_Frametype_Config information defined in G.8021.
+                    range of type : see Enumeration";
+            }
+            leaf port-vid {
+                type vid;
+                default "1";
+                description "This attribute models the ETHx/ETH-m _A_Sk_MI_PVID information defined in G.8021.";
+            }
+            leaf priority-code-point-config {
+                type pcp-coding;
+                description "This attribute models the ETHx/ETH-m _A_Sk_MI_PCP_Config information defined in G.8021.
+                    range of type : see Enumeration";
+            }
+            description "This object class models the Ethernet Flow Termination function located at a layer boundary.";
+        }
+        grouping ety-termination-pac-g {
+            leaf is-fts-enabled {
+                type boolean;
+                description "This attribute indicates whether Forced Transmitter Shutdown (FTS) is enabled or not. It models the ETYn_TT_So_MI_FTSEnable information.";
+            }
+            leaf is-tx-pause-enabled {
+                type boolean;
+                description "This attribute identifies whether the Transmit Pause process is enabled or not. It models the MI_TxPauseEnable defined in G.8021.";
+            }
+            leaf phy-type {
+                type ety-phy-type;
+                config false;
+                description "This attribute identifies the PHY type of the ETY trail termination. See IEEE 802.3 clause 30.3.2.1.2.";
+            }
+            leaf-list phy-type-list {
+                type ety-phy-type;
+                config false;
+                description "This attribute identifies the possible PHY types that could be supported at the ETY trail termination. See IEEE 802.3 clause 30.3.2.1.3.";
+            }
+            description "none";
+        }
+        grouping traffic-conditioning-pac-g {
+            list prio-config-list {
+                config false;
+                uses priority-configuration-g;
+                description "This attribute indicates the Priority Splitter function for the mapping of the Ethernet frame priority (ETH_CI_P) values to the output queue.";
+            }
+            list cond-config-list {
+                config false;
+                uses traffic-conditioning-configuration-g;
+                description "This attribute indicates for the conditioner process the conditioning parameters:
+                    - Queue ID: Indicates the Queue ID
+                    - Committed Information Rate (CIR): number of bits per second
+                    - Committed Burst Size (CBS): number of bytes
+                    - Excess Information Rate (EIR): number of bits per second
+                    - Excess Burst Size (EBS): number of bytes
+                    - Coupling flag (CF): 0 or 1
+                    - Color mode (CM): color-blind and color-aware.";
+            }
+            leaf codirectional {
+                type boolean;
+                config false;
+                description "This attribute indicates the direction of the conditioner. The value of true means that the conditioner (modeled as a TCS Sink according to G.8021) is associated with the sink part of the containing CTP. The value of false means that the conditioner (modeled as a TCS Sink according to G.8021) is associated with the source part of the containing CTP.";
+            }
+            description "This object class models the ETH traffic conditioning function as defined in G.8021.
+                Basic attributes: codirectional, condConfigList, prioConfigList";
+        }
+        grouping traffic-shaping-pac-g {
+            list prio-config-list {
+                config false;
+                uses priority-configuration-g;
+                description "This attribute configures the Priority Splitter function for the mapping of the Ethernet frame priority (ETH_CI_P) values to the output queue.";
+            }
+            list queue-config-list {
+                config false;
+                uses queue-configuration-g;
+                description "This attribute configures the Queue depth and Dropping threshold parameters of the Queue process. The Queue depth sets the maximum size of the queue in bytes. An incoming ETH_CI traffic unit is dropped if there is insufficient space in the queue to hold the whole unit. The Dropping threshold sets the threshold of the queue. If the queue is filled beyond this threshold, incoming ETH_CI traffic units accompanied by the ETH_CI_DE signal set are dropped.";
+            }
+            leaf sched-config {
+                type scheduling-configuration;
+                config false;
+                description "This attribute configures the scheduler process. The value of this attribute is for further study because it is for further study in G.8021.
+                    Scheduler is a pointer to a Scheduler object, which is to be defined in the future (because in G.8021, this is FFS).
+                    Note that the only significance of the GTCS function defined in G.8021 is the use of a common scheduler for shaping. Given that, G.8052 models the common scheduler feature by having a common value for this attribute.";
+            }
+            leaf codirectional {
+                type boolean;
+                config false;
+                description "This attribute indicates the direction of the shaping function. The value of true means that the shaping (modeled as a TCS Source according to G.8021) is associated with the source part of the containing CTP. The value of false means that the shaping (modeled as a TCS Source according to G.8021) is associated with the sink part of the containing CTP.";
+            }
+            description "This object class models the ETH traffic shaping function as defined in G.8021.
+                Basic attribute: codirectional, prioConfigList, queueConfigList, schedConfig";
+        }
+        grouping eth-meg-spec-g {
+            leaf client-mel {
+                type uint64;
+                description "none";
+            }
+            description "none";
+        }
+        grouping eth-mep-spec-g {
+            container eth-mep-common {
+                uses eth-mep-common-g;
+                description "none";
+            }
+            container eth-mep-source-pac {
+                uses eth-mep-source-g;
+                description "none";
+            }
+            container eth-mep-sink {
+                uses eth-mep-sink-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping eth-mip-spec-g {
+            description "none";
+        }
+        grouping eth-loopback-job-g {
+            container eth-lb-msg {
+                uses eth-oam-msg-common-pac-g;
+                description "none";
+            }
+            leaf number {
+                type uint64;
+                description "G.8052: This parameter specifies how many LB messages to be sent for the LB_Series process.";
+            }
+            description "This class represents the Loopback (LB) process (send a series of LB messages carrying a test pattern to a particular MEP). The termination occurs at specified stop time (schedule attribute of OamJob).
+                This class models also the 'loopback discover' process, when destinationAddress is multicast.
+                When number is greater than 1, then the process is to perform a Loopback (LB) Series process (send a series of N LB messages to a particular MEP/MIP. ";
+        }
+        grouping eth-mep-common-g {
+            leaf mep-mac {
+                type mac-address;
+                config false;
+                description "This attribute contains the MAC Address of the MEP.";
+            }
+            leaf is-cc-enabled {
+                type boolean;
+                description "This attribute models the MI_CC_Enable signal defined in G.8021 and configured as specified in G8051.";
+            }
+            leaf cc-period {
+                type oam-period;
+                description "This attribute models the MI_CC_Period signal defined in G.8021 and configured as specified in G8051. 
+                    It is the period at which the CCM message should be sent. 
+                    Default values are: 3.33 ms for PS, 100 ms for PM, 1 s for FM.";
+            }
+            leaf cc-priority {
+                type uint64 {
+                    range "0..7";
+                }
+                default "7";
+                description "This attribute models the MI_CC_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the CCM message should be sent.";
+            }
+            leaf lck-period {
+                type oam-period;
+                description "This attribute models the MI_LCK_Period signal defined in G.8021 and configured as specified in G8051. It is the frequency at which the LCK messages should be sent.
+                    range of type : 1s, 1min";
+            }
+            leaf lck-priority {
+                type uint64 {
+                    range "0..7";
+                }
+                default "7";
+                description "This attribute models the MI_LCK_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the LCK messages should be sent.";
+            }
+            description "Basic attributes: adminState, clientMel, megIdentifier, mepMac
+                Continuity Check Process related attributes: ccPeriod, ccPriority, isCcEnabled
+                Lock Process related attributes: lckPeriod, lckPriority
+                This object class models the MEP functions that are common to MEP Sink and MEP Source.";
+        }
+        grouping eth-mep-sink-g {
+            leaf-list dm-1-priority {
+                type uint64;
+                description "This attribute indicates the list of 1DM priorities for the MepSink.";
+            }
+            leaf ais-priority {
+                type uint64 {
+                    range "0..7";
+                }
+                default "7";
+                description "This attribute models the MI_AIS_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the AIS messages should be sent.";
+            }
+            leaf ais-period {
+                type oam-period;
+                description "This attribute models the MI_AIS_Period signal defined in G.8021 and configured as specified in G8051. It is the frequency at which the AIS messages should be sent.
+                    range of type : 1s, 1min";
+            }
+            leaf is-csf-reported {
+                type boolean;
+                default "true";
+                description "This attribute models the MI_CSF_Reported signal defined in G.8021 and configured as specified in G8051. It configures whether the secondary failure CSF should be reported or not.";
+            }
+            leaf is-csf-rdi-fdi-enabled {
+                type boolean;
+                default "true";
+                description "This attribute models the MI_CSFrdifdiEnable signal defined in G.8021 and configured as specified in G8051.";
+            }
+            container bandwidth-report {
+                config false;
+                uses bandwidth-report-g;
+                description "This attribute models the content of the bandwidth report received by the MEP Sink from the peer MEP Source.";
+            }
+            leaf lm-degm {
+                type uint64;
+                default "10";
+                description "This attribute defines the number of consecutive bad seconds necessary for the 'degraded' detection. See also section 'Degraded signal defect (dDEG)' in G.8021.";
+            }
+            leaf lm-deg-thr {
+                type uint64;
+                default "30";
+                description "This attribute defines the threshold for declaring a 'bad second'. See also section 'Degraded signal defect (dDEG)' in G.8021.";
+            }
+            leaf lm-m {
+                type uint64 {
+                    range "2..10";
+                }
+                default "10";
+                description "This attribute defines the number of consecutive good seconds necessary for the clearing of 'degraded'. See also section 'Degraded signal defect (dDEG)' in G.8021.";
+            }
+            leaf lm-tf-min {
+                type uint64;
+                description "This attribute defines the necessary number of transmitted frames to enable the detection of 'bad seconds'. See also section 'Degraded signal defect (dDEG)' in G.8021.";
+            }
+            description "1DM related attribute: 1DmPriority
+                AIS Process related attributes: aisPeriod, aisPriority
+                Bandwidth notification Process related attribute: bandwidthReport
+                Basic attribute: peerMepRefList
+                CSF Process related attributes: isCsfRdiFdiEnabled, isCsfReported
+                Defect correlation Process related attribute: currentProblemList
+                This object class models the MEP sink function. Instance of this object class can be created and contained by ETH CTP or TTP objects.
+                It also provides the management of the dual-ended maintenance job, such as test.
+                This object contains the configuration parameters for detecting 'degraded signal' (DEG).";
+        }
+        grouping eth-mep-source-g {
+            leaf aps-priority {
+                type uint64 {
+                    range "0..7";
+                }
+                default "7";
+                description "This attribute specifies the priority of the APS messages.
+                    See section 8.1.5    APS insert process in G.8021.";
+            }
+            leaf csf-priority {
+                type uint64 {
+                    range "0..7";
+                }
+                default "7";
+                description "This attribute models the MI_CSF_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the CSF messages should be sent";
+            }
+            leaf csf-period {
+                type oam-period;
+                description "This attribute models the MI_CSF_Period signal defined in G.8021 and configured as specified in G8051. It is the period at which the CSF messages should be sent.
+                    range of type : 1s, 1min";
+            }
+            leaf csf-config {
+                type csf-config;
+                description "This attribute models the combination of all CSF related MI signals (MI_CSF_Enable, MI_CSFrdifdi_Enable, MI_CSFdci_Enable) as defined in G.8021.";
+            }
+            description "APS Process related attribute: apsPriority
+                Basic attribute: mepIdentifier
+                CSF Process related attributes: csfConfig, csfPeriod, csfPriority
+                Link trace related operation: linkTrace
+                Loopback related operations: loopbackDiscover, loopbackSeries, loopbackTest, loopbackTestTerminate
+                On demand measurement job control related operation: establishOnDemandDualEndedMeasurementJobSource
+                Proactive measurement job control related operation: establishProActiveDualEndedMeasurementJobSource
+                Test related operations: testInitiatorStart, testInitiatorTerminate
+                This object class models the MEP source function. Instance of this object class can be created and contained by ETH CTP or TTP objects.
+                It also provides the management of single-ended maintenance jobs, such as loopback test, loopback discover, loopback series, link trace, and dual-ended maintenance job, such as test.";
+        }
+        grouping eth-link-trace-job-g {
+            container eth-lt-msg {
+                uses eth-oam-operation-common-pac-g;
+                description "none";
+            }
+            leaf time-to-live {
+                type uint64;
+                description "G.8052: This parameter provides the Time To Live (TTL) parameter of the Link Track protocol.
+                    The TTL parameter allows the receiver (MIP or MEP) of the LTM frame to determine if the frame can be terminated. TTL is decremented every time the LTM frame is relayed. LTM frame with TTL<=1 is terminated and not relayed.";
+            }
+            description "This class represents the Link Trace (LT) process for fault localization or for discovering the intermediate MIPs along the link from the MEP Source to a target MEP or MIP. An LTM frame will be sent from the MEP source to the target MEP/MIP.
+                The termination occurs at specified stop time (schedule attribute of OamJob).";
+        }
+        grouping eth-test-job-g {
+            container eth-test-msg {
+                uses eth-oam-msg-common-pac-g;
+                description "none";
+            }
+            description "This class represents the 1-way on-demand in-service or out-of-service diagnostic test. The diagnostic test includes verifying bandwidth throughput, frame loss, bit errors, etc. TST frames are transmitted.
+                The termination occurs at specified stop time (schedule attribute of OamJob).";
+        }
+        grouping eth-on-demand-measurement-job-control-sink-g {
+            leaf responder-mep-id {
+                type string;
+                description "none";
+            }
+            leaf source-address {
+                type mac-address;
+                description "This attribute contains the MAC address of the peer MEP. See G.8013 for details.";
+            }
+            leaf priority {
+                type uint64;
+                default "7";
+                description "This attribute contains the priority of the OAM PDU frames.
+                    range of type : 0, 1, 2, 3, 4, 5, 6, 7";
+            }
+            leaf test-identifier {
+                type uint64;
+                description "This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP.
+                    range of type : 0..(2^32) - 1";
+            }
+            description "This object class represents an on-demand measurement job controller sink for 1-way measurements. It is created as a result of an establishOnDemandDualEndedMeasurementJobSink() operation. It is deleted either automatically after the measurement job has completed (stop time reached) and the performance data AVC notification has been sent, or by an explicit abortOnDemandMeasurementJob() operation when the measurement job is running.";
+        }
+        grouping eth-on-demand-measurement-job-control-source-g {
+            leaf controller-mep-id {
+                type string;
+                description "none";
+            }
+            leaf oam-pdu-generation-type {
+                type oam-pdu-generation-type;
+                description "This attribute contains the pattern that is used for the generation of OAM PDUs.";
+            }
+            leaf destination-address {
+                type mac-address;
+                description "This attribute contains the MAC address of the peer MEP. See G.8013 for details.";
+            }
+            leaf priority {
+                type uint64;
+                default "7";
+                description "This attribute contains the priority of the OAM PDU frames.
+                    range of type : 0, 1, 2, 3, 4, 5, 6, 7";
+            }
+            leaf message-period {
+                type message-period;
+                description "This attribute contains the frequency of the OAM message (PDU) generation within a series. 
+                    Note that the value 0 means that only one OAM message per measurement interval is generated.
+                    range of type : See corresponding Enum.";
+            }
+            leaf repetition-period {
+                type repetition-period;
+                description "This attribute contains the time between the start of two measurement intervals. This IS applicable for the repetitive instance type and MAY be applicable for the repetitive series type. 
+                    Note that a value of 0 means not applicable (NA), which is for the cases of single instance, single series, or repetitive series without extra gap in between the measurement intervals (i.e., also as known as continuous series).";
+            }
+            leaf measurement-interval {
+                type uint64;
+                description "This attribute contains the discrete non overlapping periods of time (in seconds) during which measurements are performed (i.e., OAM messages are generated) and reports are gathered at the end of the measurement intervals. Note that the value 0 means a degenerated measurement interval with a single OAM message and the report is sent as immediately as possible.
+                    range of type : Non-negative";
+            }
+            leaf test-identifier {
+                type uint64;
+                description "This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP.
+                    Note: The attribute is not used in case of LMM/LMR measurement.
+                    range of type : 0..(2^32) - 1";
+            }
+            leaf data-tlv-length {
+                type uint64;
+                description "This parameter provides the size of the optional data TLV.
+                    Non-negative integer represents the number of bytes for the length of the padding TLV.
+                    Notes:
+                    When configuring this parameter one should be aware of the maximum allowed total frame size limitation.
+                    The attribute is not used in case of 2-way loss measurement.
+                    range of type : Depends on the allowed MTU size.";
+            }
+            description "Basic attributes: destinationAddress, priority
+                Measurement configuration related attributes: oamPduGenerationType, startTime, stopTime, messagePeriod, repetitionPeriod, measurementInterval
+                Optional attributes: dataTlvLength, testIdentifier
+                This object class represents an on-demand measurement job controller source for 1-way measurements. It is created as a result of an establishOnDemandDualEndedMeasurementJobSource() operation. It is deleted either automatically after the measurement job has completed (stop time reached), or by an explicit abortOnDemandMeasurementJob() operation while the measurement job is running.";
+        }
+        grouping eth-pro-active-measurement-job-control-sink-g {
+            leaf responder-mep-id {
+                type string;
+                description "none";
+            }
+            leaf is-enabled {
+                type boolean;
+                default "true";
+                description "This attribute identifies the state of the measurement job. If set to TRUE, the MEP performs proactive Performance Measurement.";
+            }
+            leaf source-address {
+                type mac-address;
+                description "This attribute contains the MAC address of the peer MEP. See G.8013 for details.";
+            }
+            leaf test-identifier {
+                type uint64;
+                description "This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP.
+                    range of type : 0..(2^32) - 1";
+            }
+            description "This object class allows the control of the proactive 1-way measurement. It is created as a part of an establishProActiveDualEndedMeasurementJobSink() operation. Lifecycle: A pre-condition of deleting the object is that the “Enable” attribute should have the value “FALSE”.";
+        }
+        grouping eth-pro-active-measurement-job-control-source-g {
+            leaf controller-mep-id {
+                type string;
+                description "none";
+            }
+            leaf is-enabled {
+                type boolean;
+                default "true";
+                description "This attribute identifies the state of the measurement job. If set to TRUE, the MEP performs proactive Performance Measurement.";
+            }
+            leaf destination-address {
+                type mac-address;
+                description "This attribute provides the Unicast MAC address of the intented destination.";
+            }
+            leaf priority {
+                type uint64 {
+                    range "0..7";
+                }
+                default "7";
+                description "This attribute contains the priority value on which the MEP performs the measurement. When the measurement is enabled, the MEP should use this value to encode the priority of generated measurement frames. The EMF usese this value to assign the “P” parameter of the measurement operation.";
+            }
+            leaf period {
+                type oam-period;
+                description "This attribute indicates the period (frequency) of the measurement frame transmission.
+                    range of type : 100ms, 1s, 10s";
+            }
+            leaf test-identifier {
+                type uint64;
+                description "This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP.
+                    Note: The attribute is not used in case of 2-way loss measurement. 
+                    range of type : 0..(2^32) - 1";
+            }
+            leaf data-tlv-length {
+                type uint64;
+                description "This parameter provides the size of the optional data TLV.
+                    Non-negative integer represents the number of bytes for the length of the padding TLV.
+                    Notes:
+                    When configuring this parameter one should be aware of the maximum allowed total frame size limitation.
+                    The attribute is not used in case of 2-way loss measurement.
+                    range of type : Depends on the allowed MTU size.";
+            }
+            description "This object class represents a proactive measurement job controller source for 1way measurements. It is created as a part of an establishProactiveDualEndedMeasurementJobSource() operation.";
+        }
+        grouping eth-pro-active-1-dm-performance-data-g {
+            container pro-active-near-end-1-dm-parameters {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the statistical near end performnace parameters.";
+            }
+            description "This object class represents the PM current data collected in a pro-active delay measurement job (using 1DM).";
+        }
+        grouping eth-pro-active-1-lm-performance-data-g {
+            container pro-active-near-end-1-lm-parameters {
+                uses statistical-lm-performance-parameters-g;
+                description "This attribute contains the statistical near end performnace parameters.";
+            }
+            description "This object class represents the PM current data collected in a pro-active loss measurement job (using 1SL).";
+        }
+        grouping eth-pro-active-dm-performance-data-g {
+            container pro-active-bi-dir-dm-parameters {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the statistical bidirectional performnace parameters.";
+            }
+            container pro-active-far-end-dm-parameters {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the statistical far end performnace parameters.";
+            }
+            container pro-active-near-end-dm-parameters {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the statistical near end performnace parameters.";
+            }
+            description "This object class represents the PM current data collected in a pro-active delay measurement job (using DMM/DMR).";
+        }
+        grouping eth-pro-active-lm-performance-data-g {
+            container pro-active-far-end-lm-parameters {
+                uses statistical-lm-performance-parameters-g;
+                description "This attribute contains the statistical far end performnace parameters.";
+            }
+            container pro-active-near-end-lm-parameters {
+                uses statistical-lm-performance-parameters-g;
+                description "This attribute contains the statistical near end performnace parameters.";
+            }
+            leaf bidirectional-uas {
+                type uint64;
+                description "This attribute contains the bidirectional UAS (unavailable seconds) detected in the monitoring interval.
+                    range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval.";
+            }
+            description "This object class represents the PM current data collected in a pro-active loss measurement job (using LMM/LMR or SLM/SLR).";
+        }
+        grouping eth-on-demand-1-dm-performance-data-g {
+            container on-demand-near-end-1-dm-parameters {
+                uses on-demand-dm-performance-parameters-g;
+                description "This attribute contains the results of an on-demand frame delay measurement job in the ingress direction.";
+            }
+            description "none";
+        }
+        grouping eth-on-demand-1-lm-performance-data-g {
+            container on-demand-near-end-1-lm-parameters {
+                uses on-demand-lm-performance-parameters-g;
+                description "This attribute contains the results of an on-demand synthetic loss measurement job in the ingress direction.";
+            }
+            description "none";
+        }
+        grouping eth-on-demand-dm-performance-data-g {
+            container on-demand-far-end-dm-parameters {
+                uses on-demand-dm-performance-parameters-g;
+                description "This attribute contains the results of an on-demand frame delay measurement job in the ingress direction.";
+            }
+            container on-demand-near-end-dm-parameters {
+                uses on-demand-dm-performance-parameters-g;
+                description "This attribute contains the results of an on-demand frame delay measurement job in the ingress direction.";
+            }
+            description "none";
+        }
+        grouping eth-on-demand-lm-performance-data-g {
+            container on-demand-far-end-lm-parameters {
+                uses on-demand-lm-performance-parameters-g;
+                description "This attribute contains the results of an on-demand synthetic loss measurement job in the egress direction.";
+            }
+            container on-demand-near-end-lm-parameters {
+                uses on-demand-lm-performance-parameters-g;
+                description "This attribute contains the results of an on-demand synthetic loss measurement job in the ingress direction.";
+            }
+            description "none";
+        }
+        grouping eth-pro-active-1way-measurement-job-g {
+            container pro-active-control-1way-source {
+                uses eth-pro-active-measurement-job-control-source-g;
+                description "none";
+            }
+            container pro-active-control-1way-sink {
+                uses eth-pro-active-measurement-job-control-sink-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping eth-pro-active-2way-measurement-job-g {
+            container pro-active-control-2way-source {
+                uses eth-pro-active-measurement-job-control-source-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping eth-on-demand-2way-measurement-job-g {
+            container on-demand-control-2way-source {
+                uses eth-on-demand-measurement-job-control-source-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping eth-on-demand-1way-measurement-job-g {
+            container on-demand-control-1way-source {
+                uses eth-on-demand-measurement-job-control-source-g;
+                description "none";
+            }
+            container on-demand-control-1way-sink {
+                uses eth-on-demand-measurement-job-control-sink-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping eth-1-dm-threshold-data-g {
+            container near-end-1-dm-cross-threshold {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the near end cross threshold values of the delay measurements.";
+            }
+            container near-end-1-dm-clear-threshold {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the near end clear threshold values of the delay measurements.";
+            }
+            description "This data type contains the threshold values for frame delay related 1-way measurements.";
+        }
+        grouping eth-1-lm-threshold-data-g {
+            container near-end-1-lm-cross-threshold {
+                uses statistical-lm-performance-parameters-g;
+                description "This attribute contains the near end cross threshold values of the loss measurements.";
+            }
+            container near-end-1-lm-clear-threshold {
+                uses statistical-lm-performance-parameters-g;
+                description "This attribute is only valid for frame loss ratio parameters and counter type parameters working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the near end clear threshold values of the loss measurements.";
+            }
+            description "This data type contains the threshold values for frame loss related 1-way measurements.";
+        }
+        grouping eth-dm-threshold-data-g {
+            container near-end-dm-cross-threshold {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the near end cross threshold values of the delay measurements.";
+            }
+            container near-end-dm-clear-threshold {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the near end clear threshold values of the delay measurements.";
+            }
+            container far-end-dm-cross-threshold {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the far end cross threshold values of the delay measurements.";
+            }
+            container far-end-dm-clear-threshold {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the far end clear threshold values of the delay measurements.";
+            }
+            container bi-dir-dm-cross-threshold {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the bidirectional cross threshold values of the delay measurements.";
+            }
+            container bi-dir-dm-clear-threshold {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the bidirectional clear threshold values of the delay measurements.";
+            }
+            description "This data type contains the threshold values for frame delay related 2-way measurements.";
+        }
+        grouping eth-lm-threshold-data-g {
+            container near-end-lm-cross-threshold {
+                uses statistical-lm-performance-parameters-g;
+                description "This attribute contains the near end cross threshold values of the loss measurements.";
+            }
+            container near-end-lm-clear-threshold {
+                uses statistical-lm-performance-parameters-g;
+                description "This attribute is only valid for frame loss ratio parameters and counter type parameters working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the near end clear threshold values of the loss measurements.";
+            }
+            container far-end-lm-cross-threshold {
+                uses statistical-lm-performance-parameters-g;
+                description "This attribute contains the far end cross threshold values of the loss measurements.";
+            }
+            container far-end-lm-clear-threshold {
+                uses statistical-lm-performance-parameters-g;
+                description "This attribute is only valid for frame loss ratio parameters and counter type parameters working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the far end clear threshold values of the loss measurements.";
+            }
+            leaf bi-dir-lm-uas-cross-threshold {
+                type uint64;
+                description "This attribute contains the bidirectional cross threshold value of the UAS loss measurement.";
+            }
+            leaf bi-dir-lm-uas-clear-threshold {
+                type uint64;
+                description "This attribute is only valid for the UAS parameter working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the bidirectional clear threshold value of the UAS loss measurement.";
+            }
+            description "This data type contains the threshold values for frame loss related 2-way measurements.";
+        }
+        grouping eth-loopback-result-data-g {
+            leaf rec-lbr-frames {
+                type uint64;
+                config false;
+                description "G.8052: This parameter returns the total number of received LBR messages, including the out of order LBR frames.";
+            }
+            leaf out-of-order-lbr-frames {
+                type uint64;
+                config false;
+                description "G.8052: This parameter returns the number of LBR traffic unites (messages) that were received out of order (OO).";
+            }
+            leaf sent-lbm-frames {
+                type uint64;
+                config false;
+                description "G.8052: This parameter returns the total number of sent LBM frames.";
+            }
+            leaf crc-lbr-frames {
+                type uint64;
+                config false;
+                description "G.8052: This parameter returns the number of LBR frames where the CRC in the pattern failed.";
+            }
+            leaf ber-lbr-frames {
+                type uint64;
+                config false;
+                description "G.8052: This parameter returns the number of LBR frames where there was a bit error in the pattern.";
+            }
+            leaf-list detected-peer-mep {
+                type mac-address;
+                config false;
+                description "G.8052: This parameter returns the MAC addresses of the discovered peer MEPs of the subject MEP.";
+            }
+            description "none";
+        }
+        grouping eth-link-trace-result-data-g {
+            list result-list {
+                config false;
+                uses link-trace-result-g;
+                description "G.8052: This parameter returns the results of the LT process. It contains a list of the result received from the individual LTR frames.
+                    The result from the individual LTR frame include the Source Mac Address, the TTL, and TLV.";
+            }
+            description "none";
+        }
+        grouping eth-test-result-data-g {
+            leaf sent-tst-frames {
+                type uint64;
+                config false;
+                description "G.8052: This parameter returns the total number of sent TST frames.";
+            }
+            description "none";
+        }
+        grouping eth-oam-operation-common-pac-g {
+            leaf destination-address {
+                type mac-address;
+                description "G.8052: This parameter provides the destination address, i.e., the MAC Address of the target MEP or MIP.";
+            }
+            leaf priority {
+                type uint64;
+                default "7";
+                description "G.8052: This parameter provides the priority to be used in the LBM frame.";
+            }
+            description "none";
+        }
+        grouping eth-oam-msg-common-pac-g {
+            leaf period {
+                type oam-period;
+                description "G.8052: This parameter provides the periodicity of the TST OAM messages.";
+            }
+            leaf drop-eligibility {
+                type boolean;
+                description "G.8052: This parameter provides the eligibility of frames with unicast ETH-TST information to be discarded when congestion conditions are encountered.";
+            }
+            leaf data-tlv-length {
+                type uint64;
+                description "G.8052: This parameter provides the length (in number of octet) of the optional Data TLV to be included in the TST frame.";
+            }
+            leaf test-pattern {
+                type uint64;
+                description "G.8052: This parameter provides the test pattern to be used in the optional Data TLV.
+                    Examples of test patterns include pseudo-random bit sequence (PRBS) 2^31-1 as specified in clause 5.8 of [ITU-T O.150], all '0' pattern, etc.
+                    The following values of pattern types are defined:
+                    0: 'Null signal without CRC-32'
+                    1: 'Null signal with CRC-32'
+                    2: 'PRBS 2^31-1 without CRC-32'
+                    3: 'PRBS 2^31-1 with CRC-32'.";
+            }
+            uses eth-oam-operation-common-pac-g;
+            description "none";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/ 
+        identity ETH_OAM_JOB_TYPE {
+        	base tapi-oam:OAM_JOB_TYPE;
+            description "none";
+        }
+        identity ETH_OAM_JOB_TYPE_ETH_1DM {
+            base ETH_OAM_JOB_TYPE;
+            description "none";
+        }
+        identity ETH_OAM_JOB_TYPE_ETH_1SLM {
+            base ETH_OAM_JOB_TYPE;
+            description "none";
+        }
+        identity ETH_OAM_JOB_TYPE_ETH_LM_CCM {
+            base ETH_OAM_JOB_TYPE;
+            description "none";
+        }
+        identity ETH_OAM_JOB_TYPE_ETH_LM_LMM {
+            base ETH_OAM_JOB_TYPE;
+            description "none";
+        }
+        identity ETH_OAM_JOB_TYPE_ETH_SLM {
+            base ETH_OAM_JOB_TYPE;
+            description "none";
+        }
+        identity ETH_OAM_JOB_TYPE_ETH_DM {
+            base ETH_OAM_JOB_TYPE;
+            description "none";
+        }
+        identity ETH_OAM_JOB_TYPE_ETH_LTC {
+            base ETH_OAM_JOB_TYPE;
+            description "none";
+        }
+        identity ETH_OAM_JOB_TYPE_ETH_LBK {
+            base ETH_OAM_JOB_TYPE;
+            description "none";
+        }
+        identity ETH_OAM_JOB_TYPE_ETH_TEST {
+            base ETH_OAM_JOB_TYPE;
+            description "none";
+        }
+        grouping priority-configuration-g {
+            leaf priority {
+                type uint64 {
+                    range "0..7";
+                }
+                description "none";
+            }
+            leaf queue-id {
+                type uint64 {
+                    range "1..8";
+                }
+                description "none";
+            }
+            description "none";
+        }
+        grouping queue-configuration-g {
+            leaf queue-id {
+                type uint64;
+                description "This attribute indicates the queue id.";
+            }
+            leaf queue-depth {
+                type uint64;
+                description "This attribute defines the depth of the queue in bytes.";
+            }
+            leaf queue-threshold {
+                type uint64;
+                description "This attribute defines the threshold of the queue in bytes.";
+            }
+            description "none";
+        }
+        grouping traffic-conditioning-configuration-g {
+            leaf cir {
+                type uint64;
+                description "This attribute indicates the Committed Information Rate in bits/s.";
+            }
+            leaf cbs {
+                type uint64;
+                description "This attribute indicates the Committed Burst Size in bytes.";
+            }
+            leaf eir {
+                type uint64;
+                description "This attribute indicates the Excess Information Rate in bits/s.";
+            }
+            leaf ebs {
+                type uint64;
+                description "This attribute indicates the Excess Burst Size in bytes.";
+            }
+            leaf coupling-flag {
+                type boolean;
+                description "This attribute indicates the coupling flag.";
+            }
+            leaf colour-mode {
+                type colour-mode;
+                description "This attribute indicates the colour mode.";
+            }
+            leaf queue-id {
+                type uint64 {
+                    range "1..8";
+                }
+                description "This attribute indicates the queue id.";
+            }
+            description "none";
+        }
+        typedef mac-address {
+            type string;
+            description "This primitive data type contains an Ethernet MAC address defined by IEEE 802a. The format of the address consists of 12 hexadecimal characters, grouped in pairs and separated by '-' (e.g., 03-27-AC-75-3E-1D).";
+        }
+        grouping priority-mapping-g {
+            leaf priority-0 {
+                type uint64 {
+                    range "0..7";
+                }
+                description "This attribute defines the new priority value for the old priority value 0.";
+            }
+            leaf priority-1 {
+                type uint64 {
+                    range "0..7";
+                }
+                default "1";
+                description "This attribute defines the new priority value for the old priority value 1.";
+            }
+            leaf priority-2 {
+                type uint64 {
+                    range "0..7";
+                }
+                default "2";
+                description "This attribute defines the new priority value for the old priority value 2.";
+            }
+            leaf priority-3 {
+                type uint64 {
+                    range "0..7";
+                }
+                default "3";
+                description "This attribute defines the new priority value for the old priority value 3.";
+            }
+            leaf priority-4 {
+                type uint64 {
+                    range "0..7";
+                }
+                default "4";
+                description "This attribute defines the new priority value for the old priority value 4.";
+            }
+            leaf priority-5 {
+                type uint64 {
+                    range "0..7";
+                }
+                default "5";
+                description "This attribute defines the new priority value for the old priority value 5.";
+            }
+            leaf priority-6 {
+                type uint64 {
+                    range "0..7";
+                }
+                default "6";
+                description "This attribute defines the new priority value for the old priority value 6.";
+            }
+            leaf priority-7 {
+                type uint64 {
+                    range "0..7";
+                }
+                default "7";
+                description "This attribute defines the new priority value for the old priority value 7.";
+            }
+            description "This data type provides the priority mapping done in the 'P Regenerate' process defined in G.8021.";
+        }
+        typedef vid {
+            type string;
+            description "This primitive type models the 12 Bit VLAN identifier of a VLAN tag.";
+        }
+        typedef modify-cross-connection-data {
+            type string;
+            description "none";
+        }
+        grouping address-tuple-g {
+            leaf address {
+                type mac-address;
+                description "This attribute contains the MAC address of the address tuple.";
+            }
+            leaf-list port-list {
+                type mac-address;
+                description "This attribute contains the ports associated to the MAC address in the address tuple.";
+            }
+            description "This data type contains an address tuple consisting of a MAC address and a corresponding port list.";
+        }
+        typedef scheduling-configuration {
+            type string;
+            description "The syntax of this dataType is pending on the specification in G.8021, which is for further study.";
+        }
+        grouping control-frame-filter-g {
+            leaf c-2-00-00-10 {
+                type boolean;
+                description "This attribute identifies the 'All LANs Bridge Management Group Address'.";
+            }
+            leaf c-2-00-00-00 {
+                type boolean;
+                description "This attribute identifies the STP/RSTP/MSTP protocol address.";
+            }
+            leaf c-2-00-00-01 {
+                type boolean;
+                description "This attribute identifies the IEEE MAC-specific Control Protocols group address (PAUSE protocol).";
+            }
+            leaf c-2-00-00-02 {
+                type boolean;
+                description "This attribute identifies the IEEE 802.3 Slow_Protocols_Multicast address (LACP/LAMP or Link OAM protocols).";
+            }
+            leaf c-2-00-00-03 {
+                type boolean;
+                description "This attribute identifies the Nearest non-TPMR Bridge group address (Port Authentication protocol).";
+            }
+            leaf c-2-00-00-04 {
+                type boolean;
+                description "This attribute identifies the IEEE MAC-specific Control Protocols group address.";
+            }
+            leaf c-2-00-00-05 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-06 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-07 {
+                type boolean;
+                description "This attribute identifies the Metro Ethernet Forum E-LMI protocol group address.";
+            }
+            leaf c-2-00-00-08 {
+                type boolean;
+                description "This attribute identifies the Provider Bridge Group address.";
+            }
+            leaf c-2-00-00-09 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-0-a {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-0-b {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-0-c {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-0-d {
+                type boolean;
+                description "This attribute identifies the Provider Bridge MVRP address.";
+            }
+            leaf c-2-00-00-0-e {
+                type boolean;
+                description "This attribute identifies the Individual LAN Scope group address, Nearest Bridge group address (LLDP protocol).";
+            }
+            leaf c-2-00-00-0-f {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-20 {
+                type boolean;
+                description "This attribute identifies the Customer and Provider Bridge MMRP address.";
+            }
+            leaf c-2-00-00-21 {
+                type boolean;
+                description "This attribute identifies the Customer Bridge MVRP address.";
+            }
+            leaf c-2-00-00-22 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-23 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-24 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-25 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-26 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-27 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-28 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-29 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-2-a {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-2-b {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-2-c {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-2-d {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-2-e {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-2-f {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            description "This data type identifies the filter action for each of the 33 group MAC addresses (control frames).
+                Value 'false' means block: The frame is discarded by the filter process.
+                Value 'true' means pass: The frame is passed unchanged through the filter process.";
+        }
+        grouping bandwidth-report-g {
+            leaf source-mac-address {
+                type mac-address;
+                description "The sourceMacAddress is the address from the far end.";
+            }
+            leaf port-id {
+                type uint64;
+                description "This attribute returns the far end port identifier.";
+            }
+            leaf nominal-bandwidth {
+                type uint64;
+                description "This attribute returns the configured bandwidth";
+            }
+            leaf current-bandwidth {
+                type uint64;
+                description "This attribute returns the current bandwidth.";
+            }
+            description "Data type for the bandwidth report.";
+        }
+        typedef admin-state {
+            type enumeration {
+                enum LOCK {
+                    description "none";
+                }
+                enum NORMAL {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef colour-mode {
+            type enumeration {
+                enum COLOUR_BLIND {
+                    description "none";
+                }
+                enum COLOUR_AWARE {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef csf-config {
+            type enumeration {
+                enum DISABLED {
+                    description "This literal covers the following states of the CSF related MI informations:
+                        - MI_CSF_Enable is false
+                        - MI_CSFrdifdi_Enable is false
+                        - MI_CSFdci_Enable is false.";
+                }
+                enum ENABLED {
+                    description "This literal covers the following states of the CSF related MI informations:
+                        - MI_CSF_Enable is true
+                        - MI_CSFrdifdi_Enable is false
+                        - MI_CSFdci_Enable is false.";
+                }
+                enum ENABLED_WITH_RDI_FDI {
+                    description "This literal covers the following states of the CSF related MI informations:
+                        - MI_CSF_Enable is true
+                        - MI_CSFrdifdi_Enable is true
+                        - MI_CSFdci_Enable is false.";
+                }
+                enum ENABLED_WITH_RDI_FDI_DCI {
+                    description "This literal covers the following states of the CSF related MI informations:
+                        - MI_CSF_Enable is true
+                        - MI_CSFrdifdi_Enable is true
+                        - MI_CSFdci_Enable is true.";
+                }
+                enum ENABLED_WITH_DCI {
+                    description "This literal covers the following states of the CSF related MI informations:
+                        - MI_CSF_Enable is true
+                        - MI_CSFrdifdi_Enable is false
+                        - MI_CSFdci_Enable is true.";
+                }
+            }
+            description "none";
+        }
+        typedef ety-phy-type {
+            type enumeration {
+                enum OTHER {
+                    description "none";
+                }
+                enum UNKNOWN {
+                    description "none";
+                }
+                enum NONE {
+                    description "none";
+                }
+                enum 2BASE_TL {
+                    description "none";
+                }
+                enum 10MBIT_S {
+                    description "none";
+                }
+                enum 10PASS_TS {
+                    description "none";
+                }
+                enum 100BASE_T4 {
+                    description "none";
+                }
+                enum 100BASE_X {
+                    description "none";
+                }
+                enum 100BASE_T2 {
+                    description "none";
+                }
+                enum 1000BASE_X {
+                    description "none";
+                }
+                enum 1000BASE_T {
+                    description "none";
+                }
+                enum 10GBASE-X {
+                    description "none";
+                }
+                enum 10GBASE_R {
+                    description "none";
+                }
+                enum 10GBASE_W {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef frame-type {
+            type enumeration {
+                enum ADMIT_ONLY_VLAN_TAGGED_FRAMES {
+                    description "none";
+                }
+                enum ADMIT_ONLY_UNTAGGED_AND_PRIORITY_TAGGED_FRAMES {
+                    description "none";
+                }
+                enum ADMIT_ALL_FRAMES {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef oam-period {
+            type enumeration {
+                enum 3_33MS {
+                    description "Default for protection.";
+                }
+                enum 10MS {
+                    description "none";
+                }
+                enum 100MS {
+                    description "none";
+                }
+                enum 1S {
+                    description "none";
+                }
+                enum 10S {
+                    description "none";
+                }
+                enum 1MIN {
+                    description "none";
+                }
+                enum 10MIN {
+                    description "none";
+                }
+            }
+            description "Provides the frequency for the OAM PDU insertion.";
+        }
+        typedef pcp-coding {
+            type enumeration {
+                enum 8P0D {
+                    description "none";
+                }
+                enum 7P1D {
+                    description "none";
+                }
+                enum 6P2D {
+                    description "none";
+                }
+                enum 5P3D {
+                    description "none";
+                }
+                enum DEI {
+                    description "This enumeration value means that all priorities should be drop eligible.
+                        DEI = Drop Eligibility Indicator";
+                }
+            }
+            description "This enum models the coding of the Priority Code Point as defined in section 'Priority Code Point encoding' of IEEE 802.1Q.";
+        }
+        typedef vlan-type {
+            type enumeration {
+                enum C_Tag {
+                    description "0x8100";
+                }
+                enum S_Tag {
+                    description "0x88a8";
+                }
+                enum I_Tag {
+                    description "88-e7";
+                }
+            }
+            description "This enumeration contains the Ethertypes defined in IEEE 802.1Q.";
+        }
+        typedef repetition-period {
+            type enumeration {
+                enum 1MIN {
+                    description "none";
+                }
+                enum 1S {
+                    description "none";
+                }
+                enum 10S {
+                    description "none";
+                }
+                enum 0 {
+                    description "none";
+                }
+            }
+            description "This enumeration defines the allowed values for the repetition period in on-demand measurements.
+                Note: The value 0 means that the value is not relevant.";
+        }
+        typedef message-period {
+            type enumeration {
+                enum 10MS {
+                    description "none";
+                }
+                enum 100MS {
+                    description "none";
+                }
+                enum 1S {
+                    description "none";
+                }
+                enum 10S {
+                    description "none";
+                }
+                enum 0 {
+                    description "none";
+                }
+            }
+            description "This enumeration defines the allowed values for the message period in on-demand measurements.
+                Notes:
+                The value 10ms is only used in synthetic loss measurements.
+                The value 0 means that the value is not relevant.";
+        }
+        typedef oam-pdu-generation-type {
+            type enumeration {
+                enum SINGLE_INSTANCE {
+                    description "none";
+                }
+                enum REPETITIVE_INSTANCE {
+                    description "none";
+                }
+                enum SINGLE_SERIES {
+                    description "none";
+                }
+                enum REPETITIVE_SERIES {
+                    description "none";
+                }
+            }
+            description "This enumeration defines the generation pattern of the on-demand OAM PDUs (messages). ";
+        }
+        grouping on-demand-dm-performance-parameters-g {
+            leaf number-of-samples {
+                type uint64;
+                description "This attribute contains the number of received DM frames (successful samples) used for this frame delay measurement.
+                    range of type : non-negative";
+            }
+            leaf-list frame-delay-list {
+                type uint64;
+                description "This attribute contains the frame delays measured in ns (nano second, 1x10e-9 seconds). The multiplicity is defined by the numberOfSamples attribute.";
+            }
+            leaf-list frame-delay-variation-list {
+                type uint64;
+                description "This attribute contains the frame delay variations measured in ns (nano second).  The multiplicity is defined by (numberOfSamples - 1, for numberOfSamples > 0).";
+            }
+            description "This data type contains the results of an on-demand delay measurement job.";
+        }
+        grouping on-demand-lm-performance-parameters-g {
+            leaf total-transmitted-frames {
+                type uint64;
+                description "This attribute contains the total number of frames transmitted.";
+            }
+            leaf total-lost-frames {
+                type uint64;
+                description "This attribute contains the total number of frames lost.";
+            }
+            leaf total-frame-loss-ratio {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "This attribute contains the frame loss ratio (number of lost frames divided by the number of total frames (N_LF / N_TF)).
+                    The accuracy of the value is for further study.";
+            }
+            description "This data type contains the results of an on-demand loss measurement job.";
+        }
+        grouping statistical-dm-performance-parameters-g {
+            leaf minimum-frame-delay {
+                type uint64;
+                description "This attribute contains the minimum frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds).";
+            }
+            leaf average-frame-delay {
+                type uint64;
+                description "This attribute contains the average frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds).";
+            }
+            leaf maximum-frame-delay {
+                type uint64;
+                description "This attribute contains the maximum frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds).";
+            }
+            leaf minimum-frame-delay-variation {
+                type uint64;
+                description "This attribute contains the minimum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds).";
+            }
+            leaf average-frame-delay-variation {
+                type uint64;
+                description "This attribute contains the average frame delay variation measured in units of ns (nano second, 1x10e-9 seconds).";
+            }
+            leaf maximum-frame-delay-variation {
+                type uint64;
+                description "This attribute contains the maximum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds).";
+            }
+            description "This data type contains the statistical delay measurement performance parameters.";
+        }
+        grouping statistical-lm-performance-parameters-g {
+            leaf minimum-frame-loss-ratio {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "This attribute contains the minimum frame loss ratio calculated over a period of time.
+                    The accuracy of the value is for further study.";
+            }
+            leaf average-frame-loss-ratio {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "This attribute contains the average frame loss ratio calculated over a period of time.
+                    The accuracy of the value is for further study.";
+            }
+            leaf maximum-frame-loss-ratio {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "This attribute contains the maximum frame loss ratio calculated over a period of time.
+                    The accuracy of the value is for further study.";
+            }
+            leaf ses {
+                type uint64;
+                description "This attribute contains the SES detected in the monitoring interval.
+                    range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval.";
+            }
+            leaf uas {
+                type uint64;
+                description "This attribute contains UAS (unavailable seconds) detected in the monitoring interval.
+                    range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval.";
+            }
+            description "This data type contains the statistical loss measurement performance parameters.";
+        }
+        typedef eth-oam-job-type {
+            type identityref {
+                base ETH_OAM_JOB_TYPE;
+            }
+            description "none";
+        }
+        grouping link-trace-result-g {
+            leaf source-address {
+                type mac-address;
+                description "G.8052: This attribute contains the source MAC Address of an individual LTR frame result.";
+            }
+            leaf time-to-live {
+                type uint64;
+                description "G.8052: This attribute contains the Time To Live (TTL) value of an individual LTR frame result.";
+            }
+            leaf data-tlv-length {
+                type uint64;
+                description "G.8052: This attribute contains the length (in number of octets) of the Data TLV of an individual LTR frame result.";
+            }
+            description "G.8052: This data type contains the result from an individual LTR frame.";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-notification@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-notification@2018-08-31.yang
new file mode 100644
index 0000000..3ac3ef5
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-notification@2018-08-31.yang
@@ -0,0 +1,581 @@
+module tapi-notification {
+    namespace "urn:onf:otcc:yang:tapi-notification";
+    prefix tapi-notification;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "
+        This module contains TAPI Notification Model definitions.
+        Source: TapiNotification.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    augment "/tapi-common:context" {
+        uses notification-context-g;
+        description "Augments the base TAPI Context with NotificationService information";
+    }
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping notification-subscription-service-g {
+            list notification {
+                key 'uuid';
+                config false;
+                uses notification-g;
+                description "none";
+            }
+            container notification-channel {
+                uses notification-channel-g;
+                description "none";
+            }
+            container subscription-filter {
+                uses subscription-filter-g;
+                description "none";
+            }
+            leaf subscription-state {
+                type subscription-state;
+                description "none";
+            }
+            leaf-list supported-notification-types {
+                type notification-type;
+                config false;
+                min-elements 1;
+                description "none";
+            }
+            leaf-list supported-object-types {
+                type object-type;
+                config false;
+                min-elements 1;
+                description "none";
+            }
+            uses tapi-common:service-spec-g;
+            description "none";
+        }
+        grouping subscription-filter-g {
+            leaf-list requested-notification-types {
+                type notification-type;
+                config false;
+                description "none";
+            }
+            leaf-list requested-object-types {
+                type object-type;
+                config false;
+                description "none";
+            }
+            leaf-list requested-layer-protocols {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            leaf-list requested-object-identifier {
+                type tapi-common:uuid;
+                config false;
+                description "none";
+            }
+            leaf include-content {
+                type boolean;
+                config false;
+                description "Indicates whether the published Notification includes content or just the Notification Id (which enables retrieval of the notification at the later stage)";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        notification notification {
+            uses notification-g;
+            description "none";
+        }
+        grouping notification-g {
+            leaf notification-type {
+                type notification-type;
+                description "none";
+            }
+            leaf target-object-type {
+                type object-type;
+                description "none";
+            }
+            leaf target-object-identifier {
+                type tapi-common:uuid;
+                description "none";
+            }
+            list target-object-name {
+                key 'value-name';
+                min-elements 1;
+                uses tapi-common:name-and-value-g;
+                description "none";
+            }
+            leaf event-time-stamp {
+                type tapi-common:date-and-time;
+                description "none";
+            }
+            leaf sequence-number {
+                type uint64;
+                config false;
+                description "A monotonous increasing sequence number associated with the notification.
+                    The exact semantics of how this sequence number is assigned (per channel or subscription or source or system) is left undefined.";
+            }
+            leaf source-indicator {
+                type source-indicator;
+                description "none";
+            }
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                description "none";
+            }
+            list changed-attributes {
+                key 'value-name';
+                uses name-and-value-change-g;
+                description "none";
+            }
+            list additional-info {
+                key 'value-name';
+                uses tapi-common:name-and-value-g;
+                description "none";
+            }
+            leaf additional-text {
+                type string;
+                description "none";
+            }
+            container tca-info {
+                uses tca-info-g;
+                description "none";
+            }
+            container alarm-info {
+                uses alarm-info-g;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            description "none";
+        }
+        grouping notification-channel-g {
+            leaf stream-address {
+                type string;
+                config false;
+                description "The address/location/URI of the channel/stream to which the subscribed notifications are published.
+                    This specifics of this is typically dependent on the implementation protocol & mechanism and hence is typed as a string.";
+            }
+            leaf next-sequence-no {
+                type uint64;
+                config false;
+                description "The sequence number of the next notification that will be published on the channel";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        grouping notification-context-g {
+            list notif-subscription {
+                key 'uuid';
+                uses notification-subscription-service-g;
+                description "none";
+            }
+            list notification {
+                key 'uuid';
+                config false;
+                uses notification-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping alarm-info-g {
+            leaf is-transient {
+                type boolean;
+                config false;
+                description "none";
+            }
+            leaf perceived-severity {
+                type perceived-severity-type;
+                config false;
+                description "none";
+            }
+            leaf probable-cause {
+                type string;
+                config false;
+                description "none";
+            }
+            leaf service-affecting {
+                type service-affecting;
+                description "none";
+            }
+            description "none";
+        }
+        grouping tca-info-g {
+            leaf is-transient {
+                type boolean;
+                config false;
+                description "none";
+            }
+            leaf threshold-crossing {
+                type threshold-crossing-type;
+                description "none";
+            }
+            leaf threshold-parameter {
+                type string;
+                config false;
+                description "none";
+            }
+            leaf threshold-value {
+                type uint64;
+                config false;
+                description "none";
+            }
+            leaf perceived-severity {
+                type perceived-tca-severity;
+                description "none";
+            }
+            leaf measurement-interval {
+                type tapi-common:date-and-time;
+                description "none";
+            }
+            leaf suspect-interval-flag {
+                type boolean;
+                description "none";
+            }
+            description "none";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/ 
+        grouping name-and-value-change-g {
+            leaf value-name {
+                type string;
+                description "The name of the value. The value need not have a name.";
+            }
+            leaf old-value {
+                type string;
+                description "The value";
+            }
+            leaf new-value {
+                type string;
+                description "The value";
+            }
+            description "A scoped name-value triple, including old value and new value";
+        }
+        typedef notification-type {
+            type enumeration {
+                enum OBJECT_CREATION {
+                    description "Not a normal state. The system is unable to determine the correct value.";
+                }
+                enum OBJECT_DELETION {
+                    description "none";
+                }
+                enum ATTRIBUTE_VALUE_CHANGE {
+                    description "none";
+                }
+                enum ALARM_EVENT {
+                    description "none";
+                }
+                enum THRESHOLD_CROSSING_ALERT {
+                    description "none";
+                }
+            }
+            description "List of supported Notifications types.";
+        }
+        typedef object-type {
+            type enumeration {
+                enum TOPOLOGY {
+                    description "none";
+                }
+                enum NODE {
+                    description "none";
+                }
+                enum LINK {
+                    description "none";
+                }
+                enum CONNECTION {
+                    description "none";
+                }
+                enum PATH {
+                    description "none";
+                }
+                enum CONNECTIVITY_SERVICE {
+                    description "none";
+                }
+                enum VIRTUAL_NETWORK_SERVICE {
+                    description "none";
+                }
+                enum PATH_COMPUTATION_SERVICE {
+                    description "none";
+                }
+                enum NODE_EDGE_POINT {
+                    description "none";
+                }
+                enum SERVICE_INTERFACE_POINT {
+                    description "none";
+                }
+                enum CONNECTION_END_POINT {
+                    description "none";
+                }
+                enum MAINTENANCE_ENTITY_GROUP {
+                    description "none";
+                }
+                enum MAINTENANCE_ENTITY {
+                    description "none";
+                }
+                enum MEG_END_POINT {
+                    description "none";
+                }
+                enum MEG_INTERMEDIATE_POINT {
+                    description "none";
+                }
+                enum SWITCH_CONTROL {
+                    description "none";
+                }
+                enum SWITCH {
+                    description "none";
+                }
+                enum ROUTE {
+                    description "none";
+                }
+                enum NODE_RULE_GROUP {
+                    description "none";
+                }
+                enum INTER_RULE_GROUP {
+                    description "none";
+                }
+                enum RULE {
+                    description "none";
+                }
+                enum OAM_JOB {
+                    description "none";
+                }
+            }
+            description "The list of TAPI Global Object Class types on which Notifications can be raised.";
+        }
+        typedef source-indicator {
+            type enumeration {
+                enum RESOURCE_OPERATION {
+                    description "none";
+                }
+                enum MANAGEMENT_OPERATION {
+                    description "none";
+                }
+                enum UNKNOWN {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef subscription-state {
+            type enumeration {
+                enum SUSPENDED {
+                    description "none";
+                }
+                enum ACTIVE {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef perceived-severity-type {
+            type enumeration {
+                enum CRITICAL {
+                    description "none";
+                }
+                enum MAJOR {
+                    description "none";
+                }
+                enum MINOR {
+                    description "none";
+                }
+                enum WARNING {
+                    description "none";
+                }
+                enum CLEARED {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef threshold-crossing-type {
+            type enumeration {
+                enum THRESHOLD_ABOVE {
+                    description "none";
+                }
+                enum THRESHOLD_BELOW {
+                    description "none";
+                }
+                enum CLEARED {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef service-affecting {
+            type enumeration {
+                enum SERVICE_AFFECTING {
+                    description "none";
+                }
+                enum NOT_SERVICE_AFFECTING {
+                    description "none";
+                }
+                enum UNKNOWN {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef perceived-tca-severity {
+            type enumeration {
+                enum WARNING {
+                    description "none";
+                }
+                enum CLEAR {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+
+    /***********************
+    * package interfaces
+    **********************/ 
+        rpc get-supported-notification-types {
+            description "none";
+            output {
+                leaf-list supported-notification-types {
+                    type notification-type;
+                    min-elements 1;
+                    description "none";
+                }
+                leaf-list supported-object-types {
+                    type object-type;
+                    min-elements 1;
+                    description "none";
+                }
+            }
+        }
+        rpc create-notification-subscription-service {
+            description "none";
+            input {
+                container subscription-filter {
+                    uses subscription-filter-g;
+                    description "none";
+                }
+                leaf subscription-state {
+                    type subscription-state;
+                    description "none";
+                }
+            }
+            output {
+                container subscription-service {
+                    uses notification-subscription-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc update-notification-subscription-service {
+            description "none";
+            input {
+                leaf subscription-id-or-name {
+                    type string;
+                    description "none";
+                }
+                container subscription-filter {
+                    uses subscription-filter-g;
+                    description "none";
+                }
+                leaf subscription-state {
+                    type subscription-state;
+                    description "none";
+                }
+            }
+            output {
+                container subscription-service {
+                    uses notification-subscription-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc delete-notification-subscription-service {
+            description "none";
+            input {
+                leaf subscription-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container subscription-service {
+                    uses notification-subscription-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-notification-subscription-service-details {
+            description "none";
+            input {
+                leaf subscription-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container subscription-service {
+                    uses notification-subscription-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-notification-subscription-service-list {
+            description "none";
+            output {
+                list subscription-service {
+                    uses notification-subscription-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-notification-list {
+            description "none";
+            input {
+                leaf subscription-id-or-name {
+                    type string;
+                    description "none";
+                }
+                leaf time-period {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                list notification {
+                    uses notification-g;
+                    description "none";
+                }
+            }
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-oam@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-oam@2018-08-31.yang
new file mode 100644
index 0000000..7873597
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-oam@2018-08-31.yang
@@ -0,0 +1,830 @@
+module tapi-oam {
+    namespace "urn:onf:otcc:yang:tapi-oam";
+    prefix tapi-oam;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    import tapi-connectivity {
+        prefix tapi-connectivity;
+    }
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "
+        This module contains TAPI OAM Model definitions.
+        Source: TapiOam.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    augment "/tapi-common:context" {
+        uses oam-context-g;
+        description "Augments the base TAPI Context with OamService information";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point" {
+        uses mep-mip-list-g;
+        description "none";
+    }
+    
+    /*************************
+    * definitions of references
+    *************************/
+    grouping oam-service-ref-g {
+        leaf oam-service-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-oam:oam-service/tapi-oam:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping oam-service-end-point-ref-g {
+    	uses oam-service-ref-g;
+    	leaf oam-service-end-point-local-id {
+	    	type leafref {
+	            path '/tapi-common:context/tapi-oam:oam-service/tapi-oam:end-point/tapi-oam:local-id';
+	        }
+	    	description "none";
+    	}
+    	description "none";
+    }
+    
+    grouping meg-ref-g {
+        leaf meg-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-oam:meg/tapi-oam:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    
+    grouping maintenance-entity-ref-g {
+    	uses meg-ref-g;
+    	leaf maintenance-entity-local-id {
+	    	type leafref {
+	            path '/tapi-common:context/tapi-oam:meg/tapi-oam:me/tapi-oam:local-id';
+	        }
+	    	description "none";
+    	}
+    	description "none";
+    }
+    
+    grouping mep-ref-g {
+    	uses meg-ref-g;
+    	leaf mep-local-id {
+	    	type leafref {
+	            path '/tapi-common:context/tapi-oam:meg/tapi-oam:mep/tapi-oam:local-id';
+	        }
+	    	description "none";
+    	}
+    	description "none";
+    }
+    
+    grouping mip-ref-g {
+    	uses meg-ref-g;
+    	leaf mip-local-id {
+	    	type leafref {
+	            path '/tapi-common:context/tapi-oam:meg/tapi-oam:mip/tapi-oam:local-id';
+	        }
+	    	description "none";
+    	}
+    	description "none";
+    }
+    
+    grouping oam-job-ref-g {
+        leaf oam-job-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-oam:oam-job/tapi-oam:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    
+    grouping pm-current-data-ref-g {
+    	uses oam-job-ref-g;
+    	leaf pm-current-data-local-id {
+	    	type leafref {
+	            path '/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:local-id';
+	        }
+	    	description "none";
+    	}
+    	description "none";
+    }
+    
+    grouping pm-history-data-ref-g {
+    	uses pm-current-data-ref-g;
+    	leaf pm-history-data-local-id {
+	    	type leafref {
+	            path '/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:pm-history-data/tapi-oam:local-id';
+	        }
+	    	description "none";
+    	}
+    	description "none";
+    }
+    
+    grouping oam-profile-ref-g {
+        leaf oam-profile-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-oam:oam-profile/tapi-oam:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    
+    grouping pm-threshold-data-ref-g {
+    	uses oam-profile-ref-g;
+    	leaf pm-threshold-data-local-id {
+	    	type leafref {
+	            path '/tapi-common:context/tapi-oam:oam-profile/tapi-oam:pm-threshold-data/tapi-oam:local-id';
+	        }
+	    	description "none";
+    	}
+    	description "none";
+    }
+    
+    grouping pm-bin-data-ref-g {
+    	uses oam-profile-ref-g;
+    	leaf pm-bin-data-local-id {
+	    	type leafref {
+	            path '/tapi-common:context/tapi-oam:oam-profile/tapi-oam:pm-bin-data/tapi-oam:local-id';
+	        }
+	    	description "none";
+    	}
+    	description "none";
+    }
+    
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping mep-g {
+            container oam-service-end-point {
+                uses oam-service-end-point-ref-g;
+                config false;
+                description "none";
+            }
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            leaf direction {
+                type tapi-common:termination-direction;
+                config false;
+                description "none";
+            }
+            leaf mep-identifier {
+                type string;
+                config false;
+                description "none";
+            }
+            leaf-list peer-mep-identifier {
+                type string;
+                config false;
+                min-elements 1;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            uses tapi-common:operational-state-pac-g;
+            description "none";
+        }
+        grouping oam-job-g {
+            list oam-service-end-point {
+            	uses oam-service-end-point-ref-g;
+            	key 'oam-service-uuid oam-service-end-point-local-id';
+                min-elements 1;
+                max-elements 2;
+                description "none";
+            }
+            container oam-profile {
+                uses oam-profile-ref-g;
+                description "none";
+            }
+            list pm-current-data {
+                key 'local-id';
+                config false;
+                uses pm-current-data-g;
+                description "Granularity period of the CurrentData identifies the specific CurrentData instance in the scope of this OamJob.
+                    For example, typically at least
+                    one 15min and
+                    one 24hr;
+                    optionally one additional configurable (< 15min)";
+            }
+            leaf oam-job-type {
+                type oam-job-type;
+                description "none";
+            }
+            container schedule {
+                uses tapi-common:time-range-g;
+                description "none";
+            }
+            leaf creation-time {
+                type tapi-common:date-and-time;
+                config false;
+                description "none";
+            }
+            uses tapi-common:global-class-g;
+            uses tapi-common:admin-state-pac-g;
+            description "none";
+        }
+        grouping meg-g {
+            list me {
+                key 'local-id';
+                config false;
+                min-elements 1;
+                uses maintenance-entity-g;
+                description "none";
+            }
+            list mep {
+                key 'local-id';
+                config false;
+                uses mep-g;
+                description "1. ME may have 0 MEPs (case of transit domains where at least 1 MIP is present)
+                    2. ME may have 1 MEP (case of edge domaind, where the peer MEP is ouside the managed domain)
+                    3. ME may have 2 MEPs";
+            }
+            list mip {
+                key 'local-id';
+                config false;
+                uses mip-g;
+                description "ME may 0, 1, or more MIPs";
+            }
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            leaf direction {
+                type tapi-common:forwarding-direction;
+                config false;
+                description "none";
+            }
+            leaf meg-level {
+                type uint64;
+                config false;
+                description "none";
+            }
+            leaf meg-identifier {
+                type string;
+                config false;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            uses tapi-common:operational-state-pac-g;
+            description "none";
+        }
+        grouping maintenance-entity-g {
+            list mep {
+                uses mep-ref-g;
+                key 'meg-uuid mep-local-id';
+                config false;
+                max-elements 2;
+                description "none";
+            }
+            list mip {
+            	uses mip-ref-g;
+                key 'meg-uuid mip-local-id';
+                config false;
+                description "none";
+            }
+            container connection-route {
+                uses tapi-connectivity:route-ref-g;
+                config false;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        grouping mip-g {
+            container oam-service-end-point {
+            	uses oam-service-end-point-ref-g;
+                description "none";
+            }
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        grouping oam-service-g {
+            list end-point {
+                key 'local-id';
+                min-elements 1;
+                uses oam-service-end-point-g;
+                description "none";
+            }
+            container meg {
+                uses meg-ref-g;
+                config false;
+                description "none";
+            }
+            container oam-profile {
+                uses oam-profile-ref-g;
+                description "none";
+            }
+            uses tapi-common:service-spec-g;
+            uses tapi-common:admin-state-pac-g;
+            uses oam-constraint-g;
+            description "none";
+        }
+        grouping oam-context-g {
+            list oam-service {
+                key 'uuid';
+                uses oam-service-g;
+                description "none";
+            }
+            list meg {
+                key 'uuid';
+                config false;
+                uses meg-g;
+                description "none";
+            }
+            list oam-job {
+                key 'uuid';
+                uses oam-job-g;
+                description "none";
+            }
+            list oam-profile {
+                key 'uuid';
+                uses oam-profile-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping oam-service-end-point-g {
+            container service-interface-point {
+                uses tapi-common:service-interface-point-ref-g;
+                description "none";
+            }
+            container connectivity-service-end-point {
+                uses tapi-connectivity:connectivity-service-end-point-ref-g;
+                description "none";
+            }
+            container mep {
+                uses mep-ref-g;
+                config false;
+                description "none";
+            }
+            container mip {
+                uses mip-ref-g;
+                config false;
+                description "none";
+            }
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                description "none";
+            }
+            leaf direction {
+                type tapi-common:port-direction;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            uses tapi-common:admin-state-pac-g;
+            description "none";
+        }
+        grouping mep-mip-list-g {
+            list mip {
+                uses mip-ref-g;
+                key 'meg-uuid mip-local-id';
+                description "none";
+            }
+            list mep {
+                uses mep-ref-g;
+                key 'meg-uuid mep-local-id';
+                description "none";
+            }
+            description "none";
+        }
+        grouping oam-constraint-g {
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                description "none";
+            }
+            leaf direction {
+                type tapi-common:forwarding-direction;
+                description "none";
+            }
+            leaf meg-level {
+                type uint64;
+                description "none";
+            }
+            description "none";
+        }
+        grouping pm-current-data-g {
+            list pm-history-data {
+                key 'local-id';
+                config false;
+                uses pm-history-data-g;
+                description "in case of 24hr Current Data, at least 1 History Data.
+                    In case of 15min Current Data, at least 16 History Data.
+                    In case of <15min, the number of History Data shall be able to cover a span of 4 hours.";
+            }
+            container granularity-period {
+                uses tapi-common:time-period-g;
+                description "none";
+            }
+            leaf timestamp {
+                type tapi-common:date-and-time;
+                config false;
+                description "This attribute indicates the start of the current monitoring interval.
+                    The value is bound to the quarter of an hour in case of a 15 minute interval and bound to the hour in case of a 24 hour interval.";
+            }
+            container elapsed-time {
+                uses tapi-common:time-interval-g;
+                description "none";
+            }
+            leaf suspect-interval-flag {
+                type boolean;
+                description "This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are:
+                    – Suspect data were detected by the actual resource doing data collection.
+                    – Transition of the administrativeState attribute to/from the 'lock' state.
+                    – Transition of the operationalState to/from the 'disabled' state.
+                    – Scheduler setting that inhibits the collection function.
+                    – The performance counters were reset during the interval.
+                    – The currentData (or subclass) object instance was created during the monitoring period.";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        grouping pm-history-data-g {
+            container granularity-period {
+                uses tapi-common:time-period-g;
+                description "none";
+            }
+            leaf period-end-time {
+                type tapi-common:date-and-time;
+                description "none";
+            }
+            leaf suspect-interval-flag {
+                type boolean;
+                config false;
+                description "This attribute indicates that the performance data may not be reliable.";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        grouping oam-profile-g {
+            list pm-threshold-data {
+                key 'local-id';
+                min-elements 1;
+                uses pm-threshold-data-g;
+                description "none";
+            }
+            list pm-bin-data {
+                key 'local-id';
+                min-elements 1;
+                uses pm-bin-data-g;
+                description "none";
+            }
+            uses tapi-common:global-class-g;
+            description "none";
+        }
+        grouping pm-threshold-data-g {
+            container granularity-period {
+                uses tapi-common:time-period-g;
+                description "none";
+            }
+            leaf is-transient {
+                type boolean;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        grouping pm-bin-data-g {
+            container granularity-period {
+                uses tapi-common:time-period-g;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/ 
+        identity OAM_JOB_TYPE {
+            description "none";
+        }
+        typedef oam-job-type {
+            type identityref {
+                base OAM_JOB_TYPE;
+            }
+            description "none";
+        }
+
+    /***********************
+    * package interfaces
+    **********************/ 
+        rpc create-oam-service {
+            description "none";
+            input {
+                list end-point {
+                    min-elements 1;
+                    uses oam-service-end-point-g;
+                    description "none";
+                }
+                container oam-constraint {
+                    uses oam-constraint-g;
+                    description "none";
+                }
+                leaf state {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses oam-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc delete-oam-service {
+            description "none";
+            input {
+                leaf service-id {
+                    type string;
+                    description "none";
+                }
+            }
+        }
+        rpc get-oam-service {
+            description "none";
+            input {
+                leaf service-id {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses oam-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc create-oam-job {
+            description "none";
+            input {
+                leaf oam-job-type {
+                    type oam-job-type;
+                    description "none";
+                }
+                list oam-service-end-point {
+                    min-elements 1;
+                    max-elements 2;
+                    uses oam-service-end-point-g;
+                    description "none";
+                }
+                container oam-profile {
+                    uses oam-profile-g;
+                    description "none";
+                }
+                leaf state {
+                    type string;
+                    description "none";
+                }
+                leaf schedule {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container oam-job {
+                    uses oam-job-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-oam-job {
+            description "none";
+            input {
+                leaf job-id {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container oam-job {
+                    uses oam-job-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-oam-service-list {
+            description "none";
+            output {
+                list service {
+                    uses oam-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-meg {
+            description "none";
+            input {
+                leaf service-id {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container meg {
+                    uses meg-g;
+                    description "none";
+                }
+            }
+        }
+        rpc update-oam-service {
+            description "none";
+            input {
+                leaf service-id {
+                    type string;
+                    description "none";
+                }
+                list end-point {
+                    uses oam-service-end-point-g;
+                    description "none";
+                }
+                container oam-constraint {
+                    uses oam-constraint-g;
+                    description "none";
+                }
+                leaf state {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses oam-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc delete-oam-job {
+            description "none";
+            input {
+                leaf job-id {
+                    type string;
+                    description "none";
+                }
+            }
+        }
+        rpc update-oam-job {
+            description "none";
+            input {
+                leaf job-id {
+                    type string;
+                    description "none";
+                }
+                container oam-profile {
+                    uses oam-profile-g;
+                    description "none";
+                }
+                leaf state {
+                    type string;
+                    description "none";
+                }
+                leaf schedule {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container oam-job {
+                    uses oam-job-g;
+                    description "none";
+                }
+            }
+        }
+        rpc create-oam-service-end-point {
+            description "none";
+            input {
+                leaf service-id {
+                    type string;
+                    description "none";
+                }
+                leaf sip-id {
+                    type string;
+                    description "none";
+                }
+                leaf c-sep-id {
+                    type string;
+                    description "none";
+                }
+                leaf layer {
+                    type string;
+                    description "none";
+                }
+                leaf direction {
+                    type string;
+                    description "none";
+                }
+                leaf state {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container end-point {
+                    uses oam-service-end-point-g;
+                    description "none";
+                }
+            }
+        }
+        rpc delete-oam-service-end-point {
+            description "none";
+            input {
+                leaf service-id {
+                    type string;
+                    description "none";
+                }
+                leaf o-sep-id {
+                    type string;
+                    description "none";
+                }
+            }
+        }
+        rpc update-oam-service-end-point {
+            description "none";
+            input {
+                leaf service-id {
+                    type string;
+                    description "none";
+                }
+                leaf o-sep-id {
+                    type string;
+                    description "none";
+                }
+                leaf state {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container end-point {
+                    uses oam-service-end-point-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-oam-service-end-point {
+            description "none";
+            input {
+                leaf service-id {
+                    type string;
+                    description "none";
+                }
+                leaf o-sep-id {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container end-point {
+                    uses oam-service-end-point-g;
+                    description "none";
+                }
+            }
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-odu@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-odu@2018-08-31.yang
new file mode 100644
index 0000000..7b6382d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-odu@2018-08-31.yang
@@ -0,0 +1,687 @@
+module tapi-odu {
+    namespace "urn:onf:otcc:yang:tapi-odu";
+    prefix tapi-odu;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    import tapi-connectivity {
+        prefix tapi-connectivity;
+    }
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    import tapi-oam {
+        prefix tapi-oam;
+    }
+    import tapi-dsr {
+        prefix tapi-dsr;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "
+        This module contains TAPI Odu Model definitions.
+        Source: TapiOdu.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point" {
+        uses odu-node-edge-point-spec-g;
+        description "Augments the base LayerProtocol information in NodeEdgePoint with ODU-specific information";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point" {
+        uses odu-connection-end-point-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:meg/tapi-oam:mep" {
+        uses odu-connection-end-point-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:meg/tapi-oam:mip" {
+        uses odu-mip-spec-g;
+        description "none";
+    }
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping odu-termination-and-client-adaptation-pac-g {
+            leaf opu-tributary-slot-size {
+                type odu-slot-size;
+                config false;
+                description "This attribute is applicable for ODU2 and ODU3 CTP only. It indicates the slot size of the ODU CTP.";
+            }
+            leaf auto-payload-type {
+                type boolean;
+                config false;
+                description "This attribute is applicable when the ODU CTP object instance represents a lower order ODU CTP Source at the client layer of the ODUP/ODUj-21 adaptation function. The value of true of this attribute configures that the adaptation source function shall fall back to the payload type PT=20 if the conditions specified in 14.3.10.1/G.798 are satisfied. ";
+            }
+            leaf configured-client-type {
+                type tapi-dsr:digital-signal-type;
+                config false;
+                description "This attribute configures the type of the client CTP of the server ODU TTP.";
+            }
+            leaf configured-mapping-type {
+                type mapping-type;
+                config false;
+                description "This attributes indicates the configured mapping type.";
+            }
+            container accepted-payload-type {
+                config false;
+                uses odu-payload-type-g;
+                description "This attribute is applicable when the ODU CTP object instance represents a lower order ODU CTP Sink at the client layer of the ODUP/ODU[i]j or ODUP/ODUj-21 adaptation function. 
+                    This attribute is a 2-digit Hex code that indicates the new accepted payload type.
+                    Valid values are defined in Table 15-8 of ITU-T Recommendation G.709 with one additional value UN_INTERPRETABLE.";
+            }
+            description "This Pac contains the attributes associated with the client adaptation function of the server layer TTP
+                It is present only if the CEP contains a TTP";
+        }
+        grouping odu-connection-end-point-spec-g {
+            container odu-common {
+                uses odu-common-pac-g;
+                description "none";
+            }
+            container odu-term-and-adapter {
+                config false;
+                uses odu-termination-and-client-adaptation-pac-g;
+                description "none";
+            }
+            container odu-ctp {
+                config false;
+                uses odu-ctp-pac-g;
+                description "none";
+            }
+            container odu-protection {
+                config false;
+                uses odu-protection-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping odu-pool-pac-g {
+            leaf client-capacity {
+                type uint64;
+                description "none";
+            }
+            leaf max-client-instances {
+                type uint64;
+                config false;
+                description "none";
+            }
+            leaf max-client-size {
+                type uint64;
+                config false;
+                description "none";
+            }
+            description "none";
+        }
+        grouping odu-node-edge-point-spec-g {
+            container odu-pool {
+                config false;
+                uses odu-pool-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping odu-ctp-pac-g {
+            leaf-list tributary-slot-list {
+                type uint64;
+                config false;
+                description "This attribute contains a set of distinct (i.e. unique) integers (e.g. 2, 3, 5, 9, 15 representing the tributary slots TS2, TS3, TS5, TS9 and TS15) which represents the resources occupied by the Low Order ODU Link Connection (e.g. carrying an ODUflex with a bit rate of 6.25G). 
+                    This attribute applies when the LO ODU_ ConnectionTerminationPoint connects with an HO ODU_TrailTerminationPoint object. 
+                    It will not apply if this ODU_ ConnectionTerminationPoint object directly connects to an OTU_TrailTerminationPoint object (i.e. OTU has no trib slots). 
+                    The upper bound of the integer allowed in this set is a function of the HO-ODU server layer to which the ODU connection has been mapped (adapted). 
+                    Thus, for example, M=8/32/80 for ODU2/ODU3/ODU4 server layers (respectively). Note that the value of this attribute can be changed only in the case of ODUflex and has to be through specific operations (i.e. not be changing the attribute tributarySlotList directly).";
+            }
+            leaf tributary-port-number {
+                type uint64;
+                config false;
+                description "This attribute identifies the tributary port number that is associated with the ODU CTP.
+                    range of type : The value range depends on the size of the Tributary Port Number (TPN) field used which depends on th server-layer ODU or OTU.
+                    In case of ODUk mapping into OTUk, there is no TPN field, so the tributaryPortNumber shall be zero.
+                    In case of LO ODUj mapping over ODU1, ODU2 or ODU3, the TPN is encoded in a 6-bit field so the value range is 0-63. See clause 14.4.1/G.709-2016.
+                    In case of LO ODUj mapping over ODU4, the TPN is encoded in a 7-bit field so the value range is 0-127. See clause 14.4.1.4/G.709-2016.
+                    In case of ODUk mapping over ODUCn, the TPN is encoded in a 14-bit field so the value range is 0-16383. See clause 20.4.1.1/G.709-2016.
+                    ";
+            }
+            leaf accepted-msi {
+                type string;
+                config false;
+                description "This attribute is applicable when the ODU CTP object instance represents a lower order ODU1 or ODU2 CTP Sink at the client layer of the ODU3P/ODU12 adaptation function or represents a lower order ODUj CTP Sink at the client layer of the ODUP/ODUj-21 adaptation function. This attribute is a 1-byte field that represents the accepted multiplex structure of the adaptation function. ";
+            }
+            description "This Pac contains the attributes associated with the CTP
+                It is present only if the CEP contains a CTP";
+        }
+        grouping odu-mep-spec-g {
+            container odu-mep {
+                uses odu-mep-pac-g;
+                description "none";
+            }
+            container odu-ncm {
+                config false;
+                uses odu-ncm-pac-g;
+                description "none";
+            }
+            container odu-tcm {
+                config false;
+                uses odu-tcm-mep-pac-g;
+                description "none";
+            }
+            container odu-defect {
+                uses odu-defect-pac-g;
+                description "none";
+            }
+            container odu-pm {
+                uses odu-pm-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping odu-protection-pac-g {
+            leaf aps-enable {
+                type boolean;
+                default "true";
+                description "This attribute is for enabling/disabling the automatic protection switching (APS) capability at the transport adaptation function that is represented by the ODU_ConnectionTerminationPoint object class. It triggers the MI_APS_EN signal to the transport adaptation function.";
+            }
+            leaf aps-level {
+                type uint64;
+                description "This attribute is for configuring the automatic protection switching (APS) level that should operate at the transport adaptation function that is represented by the ODU_ConnectionTerminationPoint object class. It triggers the MI_APS_LVL signal to the transport adaptation function. The value 0 means path and the values 1 through 6 mean TCM level 1 through 6 respectively.";
+            }
+            description "none";
+        }
+        grouping odu-ncm-pac-g {
+            leaf-list tcm-fields-in-use {
+                type uint64;
+                config false;
+                description "This attribute indicates the used TCM fields of the ODU OH.";
+            }
+            description "none";
+        }
+        grouping odu-tcm-mep-pac-g {
+            leaf tcm-extension {
+                type tcm-extension;
+                description "none";
+            }
+            leaf tcm-mode {
+                type tcm-mode;
+                description "This attribute specifies the TCM mode at the entity. Valid values are: Operational, Monitor, and Transparent.";
+            }
+            leaf codirectional {
+                type boolean;
+                config false;
+                description "This attribute specifies the directionality of the ODUT MEP with respect to the associated ODU CEP. The value of TRUE means that the sink part of the ODUT MEP terminates the same signal direction as the sink part of the ODU CEP. The Source part behaves similarly. This attribute is meaningful only on objects instantiated under ODU CEP, and at least one among ODU CEP and the subordinate object is bidirectional.";
+            }
+            leaf ac-status-source {
+                type tcm-status;
+                config false;
+                description "This attribute indicates the status of the accepted TCM. ";
+            }
+            leaf ac-status-sink {
+                type tcm-status;
+                config false;
+                description "This attribute indicates the status of the accepted TCM. ";
+            }
+            leaf admin-state-source {
+                type tapi-common:administrative-state;
+                description "This attribute provides the capability to provision the LOCK signal at the source, which is one of the ODU maintenance signals.  When a Tandem Connection endpoint is set to admin state locked, it will insert the ODU-LCK signal in the source direction.";
+            }
+            leaf admin-state-sink {
+                type tapi-common:administrative-state;
+                description "This attribute provides the capability to provision the LOCK signal at the sink, which is one of the ODU maintenance signals. When a Tandem Connection endpoint is set to admin state locked, it will insert the ODU-LCK signal in the downstream direction.";
+            }
+            uses odu-tcm-mip-pac-g;
+            description "none";
+        }
+        grouping odu-mip-spec-g {
+            container odu-mip {
+                config false;
+                uses odu-mip-pac-g;
+                description "none";
+            }
+            container odu-ncm {
+                config false;
+                uses odu-ncm-pac-g;
+                description "none";
+            }
+            container odu-tcm {
+                config false;
+                uses odu-tcm-mip-pac-g;
+                description "none";
+            }
+            container odu-pm {
+                uses odu-pm-pac-g;
+                description "none";
+            }
+            container odu-defect {
+                uses odu-defect-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping odu-mip-pac-g {
+            leaf acti {
+                type string;
+                config false;
+                description "The Trail Trace Identifier (TTI) information recovered (Accepted) from the TTI overhead position at the sink of a trail.";
+            }
+            leaf ex-dapi {
+                type string;
+                description "The Expected Destination Access Point Identifier (ExDAPI), provisioned by the managing system, to be compared with the TTI accepted at the overhead position of the sink for the purpose of checking the integrity of connectivity.";
+            }
+            leaf ex-sapi {
+                type string;
+                description "The Expected Source Access Point Identifier (ExSAPI), provisioned by the managing system, to be compared with the TTI accepted at the overhead position of the sink for the purpose of checking the integrity of connectivity.
+                    ";
+            }
+            leaf tim-act-disabled {
+                type boolean;
+                default "true";
+                description "This attribute provides the control capability for the managing system to enable or disable the Consequent Action function when detecting Trace Identifier Mismatch (TIM) at the trail termination sink.";
+            }
+            leaf tim-det-mode {
+                type tim-det-mo;
+                description "This attribute indicates the mode of the Trace Identifier Mismatch (TIM) Detection function allowed values: OFF, SAPIonly, DAPIonly, SAPIandDAPI";
+            }
+            leaf deg-m {
+                type uint64;
+                description "This attribute indicates the threshold level for declaring a Degraded Signal defect (dDEG). A dDEG shall be declared if DegM consecutive bad PM Seconds are detected.";
+            }
+            container deg-thr {
+                uses deg-thr-g;
+                description "This attribute indicates the threshold level for declaring a performance monitoring (PM) Second to be bad. The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer.";
+            }
+            description "none";
+        }
+        grouping odu-tcm-mip-pac-g {
+            leaf tcm-field {
+                type uint64;
+                config false;
+                description "This attribute indicates the tandem connection monitoring field of the ODU OH.";
+            }
+            description "none";
+        }
+        grouping odu-mep-pac-g {
+            leaf dm-source {
+                type boolean;
+                description "This attribute is for configuring the delay measurement process at the trail termination function represented by the subject TTP object class. It models the MI_DM_Source MI signal. If MI_DM_Source is false, then the value of the DMp bit is determined by the RI_DM. If MI_DM_Source is true, then the value of the DMp bit is set to MI_DMValue.";
+            }
+            leaf dm-value {
+                type boolean;
+                description "This attribute is for setting the DMp and DMti bits of the delay measurement process. The value of 'true' sets the DMp and DMti bits to 0 and the value of 'false' to 1.";
+            }
+            leaf txti {
+                type string;
+                description "The Trail Trace Identifier (TTI) information, provisioned by the managing system at the termination source, to be placed in the TTI overhead position of the source of a trail for transmission.
+                    ";
+            }
+            uses odu-mip-pac-g;
+            description "none";
+        }
+        grouping odu-common-pac-g {
+            leaf odu-type {
+                type odu-type;
+                config false;
+                description "This attribute specifies the type of the ODU termination point.";
+            }
+            leaf odu-rate {
+                type uint64;
+                config false;
+                description "This attribute indicates the rate of the ODU terminatino point. 
+                    This attribute is Set at create; i.e., once created it cannot be changed directly. 
+                    In case of resizable ODU flex, its value can be changed via HAO (not directly on the attribute). 
+                    ";
+            }
+            leaf odu-rate-tolerance {
+                type uint64;
+                config false;
+                description "This attribute indicates the rate tolerance of the ODU termination point. 
+                    Valid values are real value in the unit of ppm. 
+                    Standardized values are defined in Table 7-2/G.709.";
+            }
+            description "none";
+        }
+        grouping odu-pm-pac-g {
+            leaf n-bbe {
+                type uint64;
+                description "Near-end Background Block Error";
+            }
+            leaf f-bbe {
+                type uint64;
+                config false;
+                description "Far-end Background Block Error";
+            }
+            leaf n-ses {
+                type uint64;
+                description "Near-end Severely Errored Second";
+            }
+            leaf f-ses {
+                type uint64;
+                description "Far-end Severely Errored Second";
+            }
+            container uas {
+                uses uas-choice-g;
+                description "UnAvailable Second";
+            }
+            description "Instance of this object class contains the ODUP layer-specific Current Data. This object class is a subclass of the OTN_CurrentData object class.
+                PM data attributes: fBbe, fSes, nBbe, nSes. uas";
+        }
+        grouping odu-defect-pac-g {
+            leaf bdi {
+                type boolean;
+                config false;
+                description "Backward Defect Indication";
+            }
+            leaf deg {
+                type boolean;
+                config false;
+                description "Signal Degraded";
+            }
+            leaf lck {
+                type boolean;
+                config false;
+                description "Locked";
+            }
+            leaf oci {
+                type boolean;
+                config false;
+                description "Open Connection Indicator";
+            }
+            leaf ssf {
+                type boolean;
+                config false;
+                description "Server Signal Failure";
+            }
+            leaf tim {
+                type boolean;
+                config false;
+                description "Trail Trace Identifier Mismatch";
+            }
+            description "The valid list of defects raised on the entity. If the value of any attribute is true, then the corresponding defect is raised.";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/ 
+        identity ODU_TYPE {
+        	base tapi-common:LAYER_PROTOCOL_QUALIFIER;
+            description "none";
+        }
+        identity ODU_TYPE_ODU0 {
+            base ODU_TYPE;
+            description "none";
+        }
+        identity ODU_TYPE_ODU1 {
+            base ODU_TYPE;
+            description "none";
+        }
+        identity ODU_TYPE_ODU2 {
+            base ODU_TYPE;
+            description "none";
+        }
+        identity ODU_TYPE_ODU2E {
+            base ODU_TYPE;
+            description "none";
+        }
+        identity ODU_TYPE_ODU3 {
+            base ODU_TYPE;
+            description "none";
+        }
+        identity ODU_TYPE_ODU4 {
+            base ODU_TYPE;
+            description "none";
+        }
+        identity ODU_TYPE_ODU_FLEX {
+            base ODU_TYPE;
+            description "none";
+        }
+        identity ODU_TYPE_ODU_CN {
+            base ODU_TYPE;
+            description "none";
+        }
+        typedef odu-type {
+            type identityref {
+                base ODU_TYPE;
+            }
+            description "none";
+        }
+        typedef mapping-type {
+            type enumeration {
+                enum AMP {
+                    description "none";
+                }
+                enum BMP {
+                    description "none";
+                }
+                enum GFP-F {
+                    description "none";
+                }
+                enum GMP {
+                    description "none";
+                }
+                enum TTP_GFP_BMP {
+                    description "none";
+                }
+                enum NULL {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef tim-det-mo {
+            type enumeration {
+                enum DAPI {
+                    description "none";
+                }
+                enum SAPI {
+                    description "none";
+                }
+                enum BOTH {
+                    description "none";
+                }
+                enum OFF {
+                    description "none";
+                }
+            }
+            description "List of modes for trace identifier mismatch detection.";
+        }
+        typedef odu-slot-size {
+            type enumeration {
+                enum 1G25 {
+                    description "none";
+                }
+                enum 2G5 {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping odu-payload-type-g {
+            leaf named-payload-type {
+                type odu-named-payload-type;
+                description "none";
+            }
+            leaf hex-payload-type {
+                type uint64;
+                description "none";
+            }
+            description "none";
+        }
+        typedef odu-named-payload-type {
+            type enumeration {
+                enum UNKNOWN {
+                    description "none";
+                }
+                enum UNINTERPRETABLE {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping deg-thr-g {
+            leaf deg-thr-value {
+                type uint64;
+                description "Percentage of detected errored blocks";
+            }
+            leaf deg-thr-type {
+                type deg-thr-type;
+                description "Number of errored blocks";
+            }
+            leaf percentage-granularity {
+                type percentage-granularity;
+                description "none";
+            }
+            description "Degraded Threshold, specify either the percentage or the number of Errored Blocks in the defined interval. 
+                degThrValue when type is PERCENTAGE:
+                percentageGranularity is used to indicate the number of decimal points
+                So if percentageGranularity is ones, a value of 1 in degThrValue would indicate 1%, a value of 10 = 10%, a value of 100 = 100%
+                So if percentageGranularity is thousandths a value of 1 in degThrValue would indicate 0.001%, a value of 1000 = 1%, a value of 1000000 = 100%
+                degThrValue when type is NUMBER_ERROR_BLOCKS:
+                Number of Errored Blocks is captured in an integer value.";
+        }
+        typedef deg-thr-type {
+            type enumeration {
+                enum PERCENTAGE {
+                    description "Choice of % or Number of errored blocks";
+                }
+                enum NUMBER_ERRORED_BLOCKS {
+                    description "Number of % or blocks";
+                }
+            }
+            description "The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer.";
+        }
+        typedef tcm-status {
+            type enumeration {
+                enum NO_SOURCE_TC {
+                    description "TCM byte 3 (bits 6 7 8) -- 0 0 0, No source Tandem Connection";
+                }
+                enum IN_USE_WITHOUT_IAE {
+                    description "TCM byte 3 (bits 6 7 8) -- 0 0 1,  In use without IAE (Incoming Alignment Error)";
+                }
+                enum IN_USE_WITH_IAE {
+                    description "TCM byte 3 (bits 6 7 8) -- 0 1 0, In use with IAE (Incoming Alignment Error)";
+                }
+                enum RESERVED_1 {
+                    description "TCM byte 3 (bits 6 7 8) -- 0 1 1, Reserved for future international standardization";
+                }
+                enum RESERVED_2 {
+                    description "TCM byte 3 (bits 6 7 8) -- 1 0 0, Reserved for future international standardization";
+                }
+                enum LCK {
+                    description "TCM byte 3 (bits 6 7 8) -- 1 0 1, Maintenance signal: ODU-LCK";
+                }
+                enum OCI {
+                    description "TCM byte 3 (bits 6 7 8) -- 1 1 0, Maintenance signal: ODU-OCI";
+                }
+                enum AIS {
+                    description "TCM byte 3 (bits 6 7 8) -- 1 1 1, Maintenance signal: ODU-AIS";
+                }
+            }
+            description "See Table 15-5/G.709/Y.1331 ";
+        }
+        typedef tcm-mode {
+            type enumeration {
+                enum OPERATIONAL {
+                    description "none";
+                }
+                enum TRANSPARENT {
+                    description "none";
+                }
+                enum MONITOR {
+                    description "none";
+                }
+            }
+            description "List of value modes for the sink side of the tandem connection monitoring function.";
+        }
+        typedef tcm-monitoring {
+            type enumeration {
+                enum INTRUSIVE {
+                    description "none";
+                }
+                enum NON-INTRUSIVE {
+                    description "none";
+                }
+            }
+            description "Monitoring types for the tandem connection monitoring function.";
+        }
+        typedef tcm-extension {
+            type enumeration {
+                enum NORMAL {
+                    description "none";
+                }
+                enum PASS-THROUGH {
+                    description "none";
+                }
+                enum ERASE {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef percentage-granularity {
+            type enumeration {
+                enum ONES {
+                    description "none";
+                }
+                enum ONE_TENTHS {
+                    description "value * (1/10)";
+                }
+                enum ONE_HUNDREDTHS {
+                    description "value * (1/100)";
+                }
+                enum ONE_THOUSANDTHS {
+                    description "value * (1/1000)";
+                }
+            }
+            description "none";
+        }
+        grouping uas-choice-g {
+            leaf bidirectional {
+                type boolean;
+                default "true";
+                description "none";
+            }
+            leaf uas {
+                type uint64;
+                description "none";
+            }
+            leaf nuas {
+                type uint64;
+                description "none";
+            }
+            leaf fuas {
+                type uint64;
+                description "none";
+            }
+            description "If bidirectional is TRUE then use the uas attribute, if bidirectional is FALSE use the nuas, and fuas attributes";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-path-computation@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-path-computation@2018-08-31.yang
new file mode 100644
index 0000000..a29fd9d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-path-computation@2018-08-31.yang
@@ -0,0 +1,436 @@
+module tapi-path-computation {
+    namespace "urn:onf:otcc:yang:tapi-path-computation";
+    prefix tapi-path-computation;
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    import tapi-common {
+        prefix tapi-common;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "
+        This module contains TAPI Path Computation Model definitions.
+        Source: TapiPathComputation.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    augment "/tapi-common:context" {
+        uses path-computation-context-g;
+        description "Augments the base TAPI Context with PathComputationService information";
+    }
+
+    /*************************
+    * definitions of refrences
+    *************************/
+    grouping path-ref-g {
+        leaf path-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-path-computation:path/tapi-path-computation:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    /***********************
+    * package object-classes
+    **********************/
+        grouping path-g {
+            list link {
+                uses tapi-topology:link-ref-g;
+                key 'topology-uuid link-uuid';
+                config false;
+                min-elements 1;
+                description "none";
+            }
+            container routing-constraint {
+                config false;
+                uses routing-constraint-g;
+                description "none";
+            }
+            leaf direction {
+                type tapi-common:forwarding-direction;
+                description "none";
+            }
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            description "Path is described by an ordered list of TE Links. A TE Link is defined by a pair of Node/NodeEdgePoint IDs. A Connection is realized by concatenating link resources (associated with a Link) and the lower-level connections (cross-connections) in the different nodes";
+        }
+        grouping path-service-end-point-g {
+            container service-interface-point {
+                uses tapi-common:service-interface-point-ref-g;
+                config false;
+                description "none";
+            }
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            leaf layer-protocol-qualifier {
+                type tapi-common:layer-protocol-qualifier;
+                description "none";
+            }
+            container capacity {
+                uses tapi-common:capacity-g;
+                description "none";
+            }
+            leaf role {
+                type tapi-common:port-role;
+                config false;
+                description "Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root)  in the context of the FC with respect to the FC function. ";
+            }
+            leaf direction {
+                type tapi-common:port-direction;
+                config false;
+                description "The orientation of defined flow at the EndPoint.";
+            }
+            uses tapi-common:local-class-g;
+            description "The association of the FC to LTPs is made via EndPoints.
+                The EndPoint (EP) object class models the access to the FC function.
+                The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances.
+                In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC.
+                It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point.
+                The EP replaces the Protection Unit of a traditional protection model.
+                The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component";
+        }
+        grouping path-computation-service-g {
+            list path {
+                uses path-ref-g;
+                key 'path-uuid';
+                config false;
+                min-elements 1;
+                description "none";
+            }
+            list end-point {
+                key 'local-id';
+                min-elements 2;
+                max-elements 2;
+                uses path-service-end-point-g;
+                description "none";
+            }
+            container routing-constraint {
+                uses routing-constraint-g;
+                description "none";
+            }
+            container topology-constraint {
+                uses topology-constraint-g;
+                description "none";
+            }
+            container objective-function {
+                uses path-objective-function-g;
+                description "none";
+            }
+            container optimization-constraint {
+                uses path-optimization-constraint-g;
+                description "none";
+            }
+            uses tapi-common:service-spec-g;
+            description "none";
+        }
+        grouping path-objective-function-g {
+            leaf bandwidth-optimization {
+                type tapi-common:directive-value;
+                config false;
+                description "none";
+            }
+            leaf concurrent-paths {
+                type tapi-common:directive-value;
+                config false;
+                description "none";
+            }
+            leaf cost-optimization {
+                type tapi-common:directive-value;
+                config false;
+                description "none";
+            }
+            leaf link-utilization {
+                type tapi-common:directive-value;
+                config false;
+                description "none";
+            }
+            leaf resource-sharing {
+                type tapi-common:directive-value;
+                config false;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        grouping path-optimization-constraint-g {
+            leaf traffic-interruption {
+                type tapi-common:directive-value;
+                config false;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        grouping routing-constraint-g {
+            list cost-characteristic {
+                key 'cost-name';
+                uses tapi-topology:cost-characteristic-g;
+                description "The list of costs where each cost relates to some aspect of the TopologicalEntity.";
+            }
+            list latency-characteristic {
+                key 'traffic-property-name';
+                uses tapi-topology:latency-characteristic-g;
+                description "The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic.";
+            }
+            list risk-diversity-characteristic {
+                key 'risk-characteristic-name';
+                uses tapi-topology:risk-characteristic-g;
+                description "none";
+            }
+            leaf diversity-policy {
+                type diversity-policy;
+                description "none";
+            }
+            leaf route-objective-function {
+                type route-objective-function;
+                description "none";
+            }
+            leaf route-direction {
+                type tapi-common:forwarding-direction;
+                description "none";
+            }
+            leaf is-exclusive {
+                type boolean;
+                default "true";
+                description "To distinguish if the resources are to be exclusive to the service";
+            }
+            description "none";
+        }
+        grouping path-computation-context-g {
+            list path-comp-service {
+                key 'uuid';
+                uses path-computation-service-g;
+                description "none";
+            }
+            list path {
+                key 'uuid';
+                config false;
+                uses path-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping topology-constraint-g {
+            list include-topology {
+                uses tapi-topology:topology-ref-g;
+                key 'topology-uuid';
+                config false;
+                description "none";
+            }
+            list avoid-topology {
+                uses tapi-topology:topology-ref-g;
+                key 'topology-uuid';
+                config false;
+                description "none";
+            }
+            list include-path {
+                uses tapi-path-computation:path-ref-g;
+                key 'path-uuid';
+                config false;
+                description "none";
+            }
+            list exclude-path {
+                uses tapi-path-computation:path-ref-g;
+                key 'path-uuid';
+                config false;
+                description "none";
+            }
+            list include-link {
+                uses tapi-topology:link-ref-g;
+                key 'topology-uuid link-uuid';
+                config false;
+                description "This is a loose constraint - that is it is unordered and could be a partial list ";
+            }
+            list exclude-link {
+                uses tapi-topology:link-ref-g;
+                key 'topology-uuid link-uuid';
+                config false;
+                description "none";
+            }
+            list include-node {
+                uses tapi-topology:node-ref-g;
+                key 'topology-uuid node-uuid';
+                config false;
+                description "This is a loose constraint - that is it is unordered and could be a partial list";
+            }
+            list exclude-node {
+                uses tapi-topology:node-ref-g;
+                key 'topology-uuid node-uuid';
+                config false;
+                description "none";
+            }
+            leaf-list preferred-transport-layer {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "soft constraint requested by client to indicate the layer(s) of transport connection that it prefers to carry the service. This could be same as the service layer or one of the supported server layers";
+            }
+            description "none";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/
+        typedef route-objective-function {
+            type enumeration {
+                enum MIN_WORK_ROUTE_HOP {
+                    description "none";
+                }
+                enum MIN_WORK_ROUTE_COST {
+                    description "none";
+                }
+                enum MIN_WORK_ROUTE_LATENCY {
+                    description "none";
+                }
+                enum MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_HOP {
+                    description "none";
+                }
+                enum MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_COST {
+                    description "none";
+                }
+                enum MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_LATENCY {
+                    description "none";
+                }
+                enum LOAD_BALANCE_MAX_UNUSED_CAPACITY {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef diversity-policy {
+            type enumeration {
+                enum SRLG {
+                    description "none";
+                }
+                enum SRNG {
+                    description "none";
+                }
+                enum SNG {
+                    description "none";
+                }
+                enum NODE {
+                    description "none";
+                }
+                enum LINK {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+
+    /***********************
+    * package interfaces
+    **********************/
+        rpc compute-p-2-p-path {
+            description "none";
+            input {
+                list sep {
+                    min-elements 2;
+                    max-elements 2;
+                    uses path-service-end-point-g;
+                    description "none";
+                }
+                container routing-constraint {
+                    uses routing-constraint-g;
+                    description "none";
+                }
+                container topology-constraint {
+                    uses topology-constraint-g;
+                    description "none";
+                }
+                container objective-function {
+                    uses path-objective-function-g;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses path-computation-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc optimize-p-2-p-path {
+            description "none";
+            input {
+                leaf path-id-or-name {
+                    type string;
+                    description "none";
+                }
+                container routing-constraint {
+                    uses routing-constraint-g;
+                    description "none";
+                }
+                container optimization-constraint {
+                    uses path-optimization-constraint-g;
+                    description "none";
+                }
+                container objective-function {
+                    uses path-objective-function-g;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses path-computation-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc delete-p-2-p-path {
+            description "none";
+            input {
+                leaf path-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses path-computation-service-g;
+                    description "none";
+                }
+            }
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-photonic-media@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-photonic-media@2018-08-31.yang
new file mode 100644
index 0000000..cf326b3
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-photonic-media@2018-08-31.yang
@@ -0,0 +1,746 @@
+module tapi-photonic-media {
+    namespace "urn:onf:otcc:yang:tapi-photonic-media";
+    prefix tapi-photonic-media;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    import tapi-connectivity {
+        prefix tapi-connectivity;
+    }
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "
+        This module contains TAPI PhotonicMedia Model definitions.
+        Source: TapiPhotonicMedia.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point" {
+        uses otsi-connection-end-point-spec-g;
+        description "Augments the base LayerProtocol information in ConnectionEndPoint with OCH-specific information";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point" {
+        uses media-channel-node-edge-point-spec-g;
+        description "Augments the base LayerProtocol information in NodeEdgePoint with OCH-specific information";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point" {
+        uses otsi-assembly-connection-end-point-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-common:service-interface-point" {
+        uses otsi-service-interface-point-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-connectivity:connectivity-service/tapi-connectivity:end-point" {
+        uses otsi-connectivity-service-end-point-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-common:service-interface-point" {
+        uses media-channel-service-interface-point-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-connectivity:connectivity-service/tapi-connectivity:end-point" {
+        uses media-channel-service-interface-point-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point" {
+        uses media-channel-connection-end-point-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point" {
+        uses ots-connection-end-point-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point" {
+        uses media-channel-assembly-spec-g;
+        description "none";
+    }
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping otsi-gserver-adaptation-pac-g {
+            leaf number-of-otsi {
+                type uint64;
+                config false;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otsi-connection-end-point-spec-g {
+            container otsi-termination {
+                config false;
+                uses otsi-termination-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otsi-termination-pac-g {
+            container selected-central-frequency {
+                config false;
+                uses central-frequency-or-wavelength-g;
+                description "none";
+            }
+            container selected-application-identifier {
+                config false;
+                uses application-identifier-g;
+                description "This attribute indicates the selected Application Identifier that is used by the OCh trail termination function. The syntax of ApplicationIdentifier is a pair {ApplicationIdentifierType, PrintableString}. The value of ApplicationIdentifierType is either STANDARD or PROPRIETARY. The value of PrintableString represents the standard application code as defined in the ITU-T Recommendations or a vendor-specific proprietary code. If the ApplicationIdentifierType is STANDARD the value of PrintableString represents a standard application code as defined in the ITU-T Recommendations. If the ApplicationIdentifierType is PROPRIETARY, the first six characters of the PrintableString must contain the Hexadecimal representation of an OUI assigned to the vendor whose implementation generated the Application Identifier; the remaining octets of the PrintableString are unspecified. The value of this attribute of an object instance has to be one of the values identified in the attribute SupportableApplicationIdentifierList of the same object instance. The values and value ranges of the optical interface parameters of a standard application code must be consistent with those values specified in the ITU-T Recommendation for that application code.";
+            }
+            leaf selected-modulation {
+                type modulation-technique;
+                default "UNDEFINED";
+                config false;
+                description "This parameter defines the modulation used at the source";
+            }
+            container selected-spectrum {
+                config false;
+                uses spectrum-g;
+                description "none";
+            }
+            container transmited-power {
+                config false;
+                uses power-properties-pac-g;
+                description "Measured power at the Transmitter.";
+            }
+            container received-power {
+                uses power-properties-pac-g;
+                description "none";
+            }
+            container laser-properties {
+                config false;
+                uses laser-properties-pac-g;
+                description "Laser properties.";
+            }
+            description "Provides status information only.";
+        }
+        grouping media-channel-pool-capability-pac-g {
+            list supportable-spectrum {
+                config false;
+                uses spectrum-g;
+                description "none";
+            }
+            list available-spectrum {
+                config false;
+                uses spectrum-g;
+                description "none";
+            }
+            list occupied-spectrum {
+                config false;
+                uses spectrum-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping media-channel-node-edge-point-spec-g {
+            container mc-pool {
+                config false;
+                uses media-channel-pool-capability-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otsi-routing-spec-g {
+            leaf optical-routing-strategy {
+                type optical-routing-strategy;
+                description "none";
+            }
+            description "none";
+        }
+        grouping media-channel-properties-pac-g {
+            container occupied-spectrum {
+                config false;
+                uses spectrum-g;
+                description "none";
+            }
+            container measured-power-ingress {
+                config false;
+                uses power-properties-pac-g;
+                description "none";
+            }
+            container measured-power-egress {
+                uses power-properties-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otsi-assembly-connection-end-point-spec-g {
+            container otsi-adapter {
+                config false;
+                uses otsi-gserver-adaptation-pac-g;
+                description "none";
+            }
+            container fec-parameters {
+                config false;
+                uses fec-properties-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otsi-capability-pac-g {
+            list supportable-lower-central-frequency {
+                config false;
+                uses central-frequency-or-wavelength-g;
+                description "The lower frequency of the channel spectrum";
+            }
+            list supportable-upper-central-frequency {
+                config false;
+                uses central-frequency-or-wavelength-g;
+                description "The Upper frequency of the channel spectrum";
+            }
+            list supportable-application-identifier {
+                config false;
+                uses application-identifier-g;
+                description "The list of supportable ApplicationIdentifiers.";
+            }
+            leaf-list supportable-modulation {
+                type modulation-technique;
+                config false;
+                description "This parameter defines the modulation used at the source";
+            }
+            container total-power-warn-threshold {
+                config false;
+                uses total-power-threshold-pac-g;
+                description "none";
+            }
+            description "Can read the status of the warning for the upper value that the power can reach.";
+        }
+        grouping otsi-service-interface-point-spec-g {
+            container otsi-capability {
+                config false;
+                uses otsi-capability-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otsi-connectivity-service-end-point-spec-g {
+            container otsi-config {
+                uses otsi-termination-config-pac-g;
+                description "none";
+            }
+            container nmc-config {
+                uses media-channel-config-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otsi-termination-config-pac-g {
+            container central-frequency {
+                uses central-frequency-or-wavelength-g;
+                description "The central frequency of the laser. It is the oscillation frequency of the corresponding electromagnetic wave";
+            }
+            container application-identifier {
+                uses application-identifier-g;
+                description "This attribute indicates the selected Application Identifier.";
+            }
+            leaf modulation {
+                type modulation-technique;
+                description "The modulation techniqu selected at the source.";
+            }
+            leaf laser-control {
+                type laser-control-type;
+                description "Laser control can be FORCED-ON, FORCED-OFF or AUTOMATIC-LASER-SHUTDOWN";
+            }
+            container transmit-power {
+                uses power-properties-pac-g;
+                description "Transmit power as requested.";
+            }
+            leaf total-power-warn-threshold-upper {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "Configure the Max, Default and Min values for the Upper power threshold.";
+            }
+            leaf total-power-warn-threshold-lower {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "Configure  Max, Default and Min values for lower power threshold.";
+            }
+            description "none";
+        }
+        grouping fec-properties-pac-g {
+            leaf pre-fec-ber {
+                type uint64;
+                config false;
+                description "counter: bit error rate before correction by FEC";
+            }
+            leaf post-fec-ber {
+                type uint64;
+                config false;
+                description "counter: bit error rate after correction by FEC";
+            }
+            leaf corrected-bytes {
+                type uint64;
+                config false;
+                description "Bytes corrected between those that were received corrupted";
+            }
+            leaf corrected-bits {
+                type uint64;
+                config false;
+                description "Bits corrected between those that were received corrupted";
+            }
+            leaf uncorrectable-bytes {
+                type uint64;
+                config false;
+                description "Bytes that could not be corrected by FEC";
+            }
+            leaf uncorrectable-bits {
+                type uint64;
+                config false;
+                description "Bits that could not be corrected by FEC";
+            }
+            description "none";
+        }
+        grouping media-channel-service-interface-point-spec-g {
+            container mc-pool {
+                config false;
+                uses media-channel-pool-capability-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping media-channel-connectivity-service-end-point-spec-g {
+            container mc-config {
+                uses media-channel-config-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping media-channel-config-pac-g {
+            container spectrum {
+                uses spectrum-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping media-channel-connection-end-point-spec-g {
+            container media-channel {
+                config false;
+                uses media-channel-properties-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping ots-connection-end-point-spec-g {
+            container ots-media-channel {
+                config false;
+                uses media-channel-properties-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping media-channel-assembly-spec-g {
+            description "none";
+        }
+        grouping laser-properties-pac-g {
+            leaf laser-status {
+                type laser-control-status-type;
+                config false;
+                description "none";
+            }
+            leaf laser-application-type {
+                type laser-type;
+                config false;
+                description "The type of laser, its operational wavelengths, and its applications. String size 255.";
+            }
+            leaf laser-bias-current {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                config false;
+                description "The Bias current of the laser that is the medium polarization current of the laser.";
+            }
+            leaf laser-temperature {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                config false;
+                description "The temperature of the laser";
+            }
+            description "none";
+        }
+        grouping power-properties-pac-g {
+            leaf total-power {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "The total power at any point in a channel specified in dBm.
+                    range of type : -99.000..99.000";
+            }
+            leaf power-spectral-density {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                config false;
+                description "This describes how power of a signal  is distributed over frequency specified in nW/MHz
+                    range of type : -2147483648..2147483648";
+            }
+            description "Indication with severity warning raised when a total power value measured is above the threshold.";
+        }
+        grouping total-power-threshold-pac-g {
+            leaf total-power-upper-warn-threshold-default {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "Can read the value of the default  threshold that was set";
+            }
+            leaf total-power-upper-warn-threshold-min {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "Can read the value of the lower threshold that was set";
+            }
+            leaf total-power-upper-warn-threshold-max {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "Can  read the value of the upper threshold that was set";
+            }
+            leaf total-power-lower-warn-threshold-default {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "Can read the value of the default  threshold that was set";
+            }
+            leaf total-power-lower-warn-threshold-max {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "Can  read the value of the upper threshold that was set";
+            }
+            leaf total-power-lower-warn-threshold-min {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "Can read the value of the lower threshold that was set";
+            }
+            description "none";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/ 
+        identity SPECTRUM_TYPE {
+        	base tapi-common:LAYER_PROTOCOL_QUALIFIER;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_OTSi {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_OTSiA {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_OTSiG {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_NMC {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_NMCA {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_SMC {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_SMCA {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_OCH {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_OMS {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_OTS {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        grouping application-identifier-g {
+            leaf application-identifier-type {
+                type application-identifier-type;
+                description "The ITU-T recommendation which defines the application code format.";
+            }
+            leaf application-code {
+                type string;
+                description "none";
+            }
+            description "The syntax of ApplicationIdentifier is a pair {ApplicationIdentifierType, PrintableString}. The value of ApplicationIdentifierType is either STANDARD or PROPRIETARY. The value of PrintableString represents the standard application code as defined in the ITU-T Recommendations or a vendor-specific proprietary code. If the ApplicationIdentifierType is STANDARD the value of PrintableString represents a standard application code as defined in the ITU-T Recommendations. If the ApplicationIdentifierType is PROPRIETARY, the first six characters of the PrintableString must contain the Hexadecimal representation of an OUI assigned to the vendor whose implementation generated the Application Identifier; the remaining octets of the PrintableString are unspecified. The value of this attribute of an object instance has to be one of the values identified in the attribute SupportableApplicationIdentifierList of the same object instance. The values and value ranges of the optical interface parameters of a standard application code must be consistent with those values specified in the ITU-T Recommendation for that application code.";
+        }
+        grouping central-frequency-or-wavelength-g {
+            leaf grid-type {
+                type grid-type;
+                description "Specifies the frequency grid standard used to determine the nominal central frequency and frequency slot width";
+            }
+            leaf adjustment-granularity {
+                type adjustment-granularity;
+                description "Adjustment granularity in Gigahertz. As per ITU-T G.694.1, it is used to calculate nominal central frequency (in THz)";
+            }
+            leaf central-frequency {
+                type uint64;
+                description "The central frequency of the laser specified in MHz. It is the oscillation frequency of the corresponding electromagnetic wave. ";
+            }
+            leaf channel-number {
+                type uint64;
+                description "As per ITU-T G.694.1, this attribute is denoted as 'n' and is used to calculate the nominal central frequency (in THz) as follows:
+                    193.1 + <channelNumber> × <adjustmentGranularity> where channelNumber is a positive or negative integer including 0 and adjustment_granularity is the nominal central frequency granularity in THz";
+            }
+            description "This data-type holds the central frequency directly or optionally the information to determine the nominal central frequency of a FIXED grid (DWDM or CWDM) and FLEX grid type systems.
+                As per ITU-T G.694.1, the nominal central frequency (in THz) is calculated as follows:
+                193.1 + <channelNumber> × <adjustmentGranularity> where channelNumber is a positive or negative integer including 0 and <adjustment_granularity> is the nominal central frequency granularity in THz
+                For FIXED grid types, the adjustmentGranularity is one of (0.1/0.05/0.025/0.0125) THz corresponding to channel spacing of one of (100/50/25/12.5) GHz
+                For FLEX grid type, the adjusmentGranularity is 0.00625 THz and the slot width is variable in increments of 12.5 GHz";
+        }
+        typedef optical-routing-strategy {
+            type enumeration {
+                enum OPTIMAL_OSNR {
+                    description "none";
+                }
+                enum NO_RELAY {
+                    description "none";
+                }
+                enum MIN_RELAY {
+                    description "none";
+                }
+                enum PREFERRED_NO_CHANGE_WAVELENGTH_AS_RESTORE {
+                    description "none";
+                }
+                enum PREFERRED_NO_SKIPPING_WAVELENGTH {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef application-identifier-type {
+            type enumeration {
+                enum PROPRIETARY {
+                    description "none";
+                }
+                enum ITUT_G959_1 {
+                    description "none";
+                }
+                enum ITUT_G698_1 {
+                    description "none";
+                }
+                enum ITUT_G698_2 {
+                    description "none";
+                }
+                enum ITUT_G696_1 {
+                    description "none";
+                }
+                enum ITUT_G695 {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef grid-type {
+            type enumeration {
+                enum DWDM {
+                    description "Fixed frequency grid in C & L bands as specified in ITU-T G.694.1
+                        ";
+                }
+                enum CWDM {
+                    description "Fixed frequency grid as specified in ITU-T G.694.2";
+                }
+                enum FLEX {
+                    description "Flexible frequency grid as specified in ITU-T G.694.1. In this case,
+                        - the allowed frequency slots have a nominal central frequency (in THz) defined by:
+                        193.1 + n × 0.00625 where n is a positive or negative integer including 0 and 0.00625 is the nominal central frequency granularity in THz
+                        - and a slot width defined by:
+                        12.5 × m where m is a positive integer and 12.5 is the slot width granularity in GHz.
+                        Any combination of frequency slots is allowed as long as no two frequency slots overlap.";
+                }
+                enum GRIDLESS {
+                    description "none";
+                }
+                enum UNSPECIFIED {
+                    description "Unspecified/proprietary frequency grid";
+                }
+            }
+            description "The frequency grid standard that specify reference set of frequencies used to denote allowed nominal central frequencies that may be used for defining applications.";
+        }
+        typedef adjustment-granularity {
+            type enumeration {
+                enum G_100GHZ {
+                    description "100000 MHz";
+                }
+                enum G_50GHZ {
+                    description "50000 MHz";
+                }
+                enum G_25GHZ {
+                    description "25000 MHz";
+                }
+                enum G_12_5GHZ {
+                    description "12500 MHz";
+                }
+                enum G_6_25GHZ {
+                    description "6250 MHz";
+                }
+                enum G_3_125GHZ {
+                    description "3125 MHz";
+                }
+                enum UNCONSTRAINED {
+                    description "none";
+                }
+            }
+            description "Adjustment granularity in Gigahertz. As per ITU-T G.694.1, it is used to calculate nominal central frequency";
+        }
+        grouping spectrum-g {
+            leaf upper-frequency {
+                type uint64;
+                description "The upper frequency bound of the media channel spectrum specified in MHz";
+            }
+            leaf lower-frequency {
+                type uint64;
+                description "The lower frequency bound of the media channel spectrum specified in MHz";
+            }
+            container frequency-slot {
+                uses frequency-slot-g;
+                description "none";
+            }
+            description "This data-type holds the spectrum information in termsof upper/lower frequency directly or optionally the information to determin this in terms of the nominal central frequency and spectral width for a FIXED grid (DWDM or CWDM) and FLEX grid type systems.";
+        }
+        typedef modulation-technique {
+            type enumeration {
+                enum RZ {
+                    description "none";
+                }
+                enum NRZ {
+                    description "none";
+                }
+                enum BPSK {
+                    description "none";
+                }
+                enum DPSK {
+                    description "none";
+                }
+                enum QPSK {
+                    description "none";
+                }
+                enum 8QAM {
+                    description "none";
+                }
+                enum 16QAM {
+                    description "none";
+                }
+                enum UNDEFINED {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping frequency-slot-g {
+            container central-frequency {
+                uses central-frequency-or-wavelength-g;
+                description "none";
+            }
+            leaf spectral-width {
+                type uint64;
+                description "Width of the media channel spectrum specified in MHz";
+            }
+            leaf slot-width-number {
+                type uint64;
+                description "As per ITU-T G.694.1, this attribute is denoted as 'm' and is used to calculate the slot width (in GHz) as follows:
+                    12.5 × m where m is a positive integer and 12.5 is the slot width granularity in GHz.";
+            }
+            description "The frequency range allocated to a slot and unavailable to other slots within a flexible grid. A frequency slot is defined by its nominal central frequency. As per ITU-T G.694.1  the slot width is calculated as follows:
+                12.5 × <slotWidthNumber> where slotWidthNumber is a positive integer and 12.5 is the slot width granularity in GHz";
+        }
+        typedef laser-type {
+            type enumeration {
+                enum PUMP {
+                    description "none";
+                }
+                enum MODULATED {
+                    description "none";
+                }
+                enum PULSE {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef spectrum-type {
+            type identityref {
+                base SPECTRUM_TYPE;
+            }
+            description "none";
+        }
+        typedef laser-control-type {
+            type enumeration {
+                enum FORCED-ON {
+                    description "none";
+                }
+                enum FORCED-OFF {
+                    description "none";
+                }
+                enum AUTOMATIC-LASER-SHUTDOWN {
+                    description "none";
+                }
+                enum UNDEFINED {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef laser-control-status-type {
+            type enumeration {
+                enum ON {
+                    description "none";
+                }
+                enum OFF {
+                    description "none";
+                }
+                enum PULSING {
+                    description "none";
+                }
+                enum UNDEFINED {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-topology@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-topology@2018-08-31.yang
new file mode 100644
index 0000000..0202846
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-topology@2018-08-31.yang
@@ -0,0 +1,701 @@
+module tapi-topology {
+    namespace "urn:onf:otcc:yang:tapi-topology";
+    prefix tapi-topology;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "
+        This module contains TAPI Topology Model definitions.
+        Source: TapiTopology.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    augment "/tapi-common:context" {
+        uses topology-context-g;
+        description "Augments the base TAPI Context with TopologyService information";
+    }
+
+    /*************************
+    * definitions of refrences
+    *************************/
+
+    grouping topology-ref-g {
+        leaf topology-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-topology:topology/tapi-topology:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping link-ref-g {
+        uses topology-ref-g;
+        leaf link-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-topology:topology/tapi-topology:link/tapi-topology:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping node-ref-g {
+        uses topology-ref-g;
+        leaf node-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping node-edge-point-ref-g {
+        uses node-ref-g;
+        leaf node-edge-point-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-topology:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping node-rule-group-ref-g {
+        uses node-ref-g;
+        leaf node-rule-group-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:node-rule-group/tapi-topology:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping link-g {
+            list node-edge-point {
+                uses node-edge-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid';
+                config false;
+                min-elements 2;
+                description "none";
+            }
+            leaf-list layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                min-elements 1;
+                description "none";
+            }
+            leaf direction {
+                type tapi-common:forwarding-direction;
+                config false;
+                description "The directionality of the Link. 
+                    Is applicable to simple Links where all LinkEnds are BIDIRECTIONAL (the Link will be BIDIRECTIONAL) or UNIDIRECTIONAL (the Link will be UNIDIRECTIONAL). 
+                    Is not present in more complex cases.";
+            }
+            container resilience-type {
+                uses resilience-type-g;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            uses tapi-common:admin-state-pac-g;
+            uses tapi-common:capacity-pac-g;
+            uses transfer-cost-pac-g;
+            uses transfer-integrity-pac-g;
+            uses transfer-timing-pac-g;
+            uses risk-parameter-pac-g;
+            uses validation-pac-g;
+            uses layer-protocol-transition-pac-g;
+            description "The Link object class models effective adjacency between two or more ForwardingDomains (FD). ";
+        }
+        grouping node-g {
+            list owned-node-edge-point {
+                key 'uuid';
+                config false;
+                uses node-edge-point-g;
+                description "none";
+            }
+            list aggregated-node-edge-point {
+            	uses node-edge-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid';
+                config false;
+                description "none";
+            }
+            list node-rule-group {
+                key 'uuid';
+                uses node-rule-group-g;
+                description "none";
+            }
+            container encap-topology {
+                uses topology-ref-g;
+                config false;
+                description "none";
+            }
+            leaf-list layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                min-elements 1;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            uses tapi-common:admin-state-pac-g;
+            uses tapi-common:capacity-pac-g;
+            uses transfer-cost-pac-g;
+            uses transfer-integrity-pac-g;
+            uses transfer-timing-pac-g;
+            description "The ForwardingDomain (FD) object class models the ForwardingDomain topological component which is used to effect forwarding of transport characteristic information and offers the potential to enable forwarding. 
+                At the lowest level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs). ";
+        }
+        grouping topology-g {
+            list node {
+                key 'uuid';
+                config false;
+                uses node-g;
+                description "none";
+            }
+            list link {
+                key 'uuid';
+                config false;
+                uses link-g;
+                description "none";
+            }
+            leaf-list layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                min-elements 1;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            description "The ForwardingDomain (FD) object class models the ForwardingDomain topological component which is used to effect forwarding of transport characteristic information and offers the potential to enable forwarding. 
+                At the lowest level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs). ";
+        }
+        grouping layer-protocol-transition-pac-g {
+            leaf-list transitioned-layer-protocol-name {
+                type string;
+                min-elements 2;
+                description "Provides the ordered structure of layer protocol transitions encapsulated in the TopologicalEntity. The ordering relates to the LinkPort role.";
+            }
+            description "Relevant for a Link that is formed by abstracting one or more LTPs (in a stack) to focus on the flow and deemphasize the protocol transformation. 
+                This abstraction is relevant when considering multi-layer routing. 
+                The layer protocols of the LTP and the order of their application to the signal is still relevant and need to be accounted for. This is derived from the LTP spec details.
+                This Pac provides the relevant abstractions of the LTPs and provides the necessary association to the LTPs involved.
+                Links that included details in this Pac are often referred to as Transitional Links.";
+        }
+        grouping node-edge-point-g {
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            leaf-list supported-cep-layer-protocol-qualifier {
+                type tapi-common:layer-protocol-qualifier;
+                min-elements 1;
+                description "none";
+            }
+            list aggregated-node-edge-point {
+            	uses node-edge-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid';
+                config false;
+                description "none";
+            }
+            list mapped-service-interface-point {
+                uses tapi-common:service-interface-point-ref-g;
+                key 'service-interface-point-uuid';
+                config false;
+                description "NodeEdgePoint mapped to more than ServiceInterfacePoint (slicing/virtualizing) or a ServiceInterfacePoint mapped to more than one NodeEdgePoint (load balancing/Resilience) should be considered experimental";
+            }
+            leaf link-port-direction {
+                type tapi-common:port-direction;
+                config false;
+                description "The orientation of defined flow at the LinkEnd.";
+            }
+            leaf link-port-role {
+                type tapi-common:port-role;
+                config false;
+                description "Each LinkEnd of the Link has a role (e.g., symmetric, hub, spoke, leaf, root)  in the context of the Link with respect to the Link function. ";
+            }
+            uses tapi-common:resource-spec-g;
+            uses tapi-common:admin-state-pac-g;
+            uses tapi-common:termination-pac-g;
+            uses tapi-common:capacity-pac-g;
+            description "The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. 
+                The structure of LTP supports all transport protocols including circuit and packet forms.";
+        }
+        grouping risk-parameter-pac-g {
+            list risk-characteristic {
+                key 'risk-characteristic-name';
+                config false;
+                min-elements 1;
+                uses risk-characteristic-g;
+                description "A list of risk characteristics for consideration in an analysis of shared risk. Each element of the list represents a specific risk consideration.";
+            }
+            description "The risk characteristics of a TopologicalEntity come directly from the underlying physical realization. 
+                The risk characteristics propagate from the physical realization to the client and from the server layer to the client layer, this propagation may be modified by protection.
+                A TopologicalEntity may suffer degradation or failure as a result of a problem in a part of the underlying realization.
+                The realization can be partitioned into segments which have some relevant common failure modes.
+                There is a risk of failure/degradation of each segment of the underlying realization.
+                Each segment is a part of a larger physical/geographical unit that behaves as one with respect to failure (i.e. a failure will have a high probability of impacting the whole unit (e.g. all cables in the same duct).
+                Disruptions to that larger physical/geographical unit will impact (cause failure/errors to) all TopologicalEntities that use any part of that larger physical/geographical entity.
+                Any TopologicalEntity that uses any part of that larger physical/geographical unit will suffer impact and hence each TopologicalEntity shares risk.
+                The identifier of each physical/geographical unit that is involved in the realization of each segment of a Topological entity can be listed in the RiskParameter_Pac of that TopologicalEntity.
+                A segment has one or more risk characteristic.
+                Shared risk between two TopologicalEntities compromises the integrity of any solution that use one of those TopologicalEntity as a backup for the other.
+                Where two TopologicalEntities have a common risk characteristic they have an elevated probability of failing simultaneously compared to two TopologicalEntities that do not share risk characteristics.";
+        }
+        grouping transfer-cost-pac-g {
+            list cost-characteristic {
+                key 'cost-name';
+                config false;
+                min-elements 1;
+                uses cost-characteristic-g;
+                description "The list of costs where each cost relates to some aspect of the TopologicalEntity.";
+            }
+            description "The cost characteristics of a TopologicalEntity not necessarily correlated to the cost of the underlying physical realization. 
+                They may be quite specific to the individual TopologicalEntity e.g. opportunity cost. Relates to layer capacity
+                There may be many perspectives from which cost may be considered  for a particular TopologicalEntity and hence many specific costs and potentially cost algorithms. 
+                Using an entity will incur a cost. ";
+        }
+        grouping transfer-integrity-pac-g {
+            leaf error-characteristic {
+                type string;
+                config false;
+                description "Describes the degree to which the signal propagated can be errored. 
+                    Applies to TDM systems as the errored signal will be propagated and not packet as errored packets will be discarded.";
+            }
+            leaf loss-characteristic {
+                type string;
+                config false;
+                description "Describes the acceptable characteristic of lost packets where loss may result from discard due to errors or overflow.
+                    Applies to packet systems and not TDM (as for TDM errored signals are propagated unless grossly errored and overflow/underflow turns into timing slips).";
+            }
+            leaf repeat-delivery-characteristic {
+                type string;
+                config false;
+                description "Primarily applies to packet systems where a packet may be delivered more than once (in fault recovery for example). 
+                    It can also apply to TDM where several frames may be received twice due to switching in a system with a large differential propagation delay.";
+            }
+            leaf delivery-order-characteristic {
+                type string;
+                config false;
+                description "Describes the degree to which packets will be delivered out of sequence.
+                    Does not apply to TDM as the TDM protocols maintain strict order.";
+            }
+            leaf unavailable-time-characteristic {
+                type string;
+                config false;
+                description "Describes the duration for which there may be no valid signal propagated.";
+            }
+            leaf server-integrity-process-characteristic {
+                type string;
+                config false;
+                description "Describes the effect of any server integrity enhancement process on the characteristics of the TopologicalEntity.";
+            }
+            description "Transfer intergrity characteristic covers expected/specified/acceptable characteristic of degradation of the transfered signal.
+                It includes all aspects of possible degradation of signal content as well as any damage of any form to the total TopologicalEntity and to the carried signals.
+                Note that the statement is of total impact to the TopologicalEntity so any partial usage of the TopologicalEntity (e.g. a signal that does not use full capacity) will only suffer its portion of the impact.";
+        }
+        grouping transfer-timing-pac-g {
+            list latency-characteristic {
+                key 'traffic-property-name';
+                config false;
+                min-elements 1;
+                uses latency-characteristic-g;
+                description "The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic.";
+            }
+            description "A TopologicalEntity will suffer effects from the underlying physical realization related to the timing of the information passed by the TopologicalEntity.";
+        }
+        grouping validation-pac-g {
+            list validation-mechanism {
+                key 'validation-mechanism';
+                config false;
+                min-elements 1;
+                uses validation-mechanism-g;
+                description "Provides details of the specific validation mechanism(s) used to confirm the presence of an intended topologicalEntity.";
+            }
+            description "Validation covers the various adjacenct discovery and reachability verification protocols. Also may cover Information source and degree of integrity.";
+        }
+        grouping network-topology-service-g {
+            list topology {
+                uses topology-ref-g;
+                key 'topology-uuid';
+                config false;
+                description "none";
+            }
+            uses tapi-common:service-spec-g;
+            description "none";
+        }
+        grouping topology-context-g {
+            container nw-topology-service {
+                config false;
+                uses network-topology-service-g;
+                description "none";
+            }
+            list topology {
+                key 'uuid';
+                config false;
+                uses topology-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping inter-rule-group-g {
+            list rule {
+                key 'local-id';
+                min-elements 1;
+                uses rule-g;
+                description "none";
+            }
+            list associated-node-rule-group {
+                uses node-rule-group-ref-g;
+                key 'topology-uuid node-uuid node-rule-group-uuid';
+                min-elements 2;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            uses tapi-common:capacity-pac-g;
+            uses transfer-cost-pac-g;
+            uses transfer-timing-pac-g;
+            uses risk-parameter-pac-g;
+            description "none";
+        }
+        grouping node-rule-group-g {
+            list rule {
+                key 'local-id';
+                min-elements 1;
+                uses rule-g;
+                description "none";
+            }
+            list node-edge-point {
+            	uses node-edge-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid';
+                min-elements 1;
+                description "none";
+            }
+            list composed-rule-group {
+                uses node-rule-group-ref-g;
+                key 'topology-uuid node-uuid node-rule-group-uuid';
+                description "none";
+            }
+            list inter-rule-group {
+                key 'uuid';
+                uses inter-rule-group-g;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            uses tapi-common:capacity-pac-g;
+            uses transfer-cost-pac-g;
+            uses transfer-timing-pac-g;
+            uses risk-parameter-pac-g;
+            description "none";
+        }
+        grouping rule-g {
+            leaf rule-type {
+                type rule-type;
+                description "none";
+            }
+            leaf forwarding-rule {
+                type forwarding-rule;
+                description "none";
+            }
+            leaf override-priority {
+                type uint64;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/ 
+        grouping cost-characteristic-g {
+            leaf cost-name {
+                type string;
+                description "The cost characteristic will related to some aspect of the TopologicalEntity (e.g. $ cost, routing weight). This aspect will be conveyed by the costName.";
+            }
+            leaf cost-value {
+                type string;
+                description "The specific cost.";
+            }
+            leaf cost-algorithm {
+                type string;
+                description "The cost may vary based upon some properties of the TopologicalEntity. The rules for the variation are conveyed by the costAlgorithm.";
+            }
+            description "The information for a particular cost characteristic.";
+        }
+        grouping latency-characteristic-g {
+            leaf traffic-property-name {
+                type string;
+                description "The identifier of the specific traffic property to which the queuing latency applies.";
+            }
+            leaf fixed-latency-characteristic {
+                type string;
+                config false;
+                description "A TopologicalEntity suffers delay caused by the realization of the servers (e.g. distance related; FEC encoding etc.) along with some client specific processing. This is the total average latency effect of the TopologicalEntity";
+            }
+            leaf queing-latency-characteristic {
+                type string;
+                description "The specific queuing latency for the traffic property.";
+            }
+            leaf jitter-characteristic {
+                type string;
+                config false;
+                description "High frequency deviation from true periodicity of a signal and therefore a small high rate of change of transfer latency.
+                    Applies to TDM systems (and not packet).";
+            }
+            leaf wander-characteristic {
+                type string;
+                config false;
+                description "Low frequency deviation from true periodicity of a signal and therefore a small low rate of change of transfer latency.
+                    Applies to TDM systems (and not packet).";
+            }
+            description "Provides information on latency characteristic for a particular stated trafficProperty.";
+        }
+        grouping risk-characteristic-g {
+            leaf risk-characteristic-name {
+                type string;
+                description "The name of the risk characteristic. The characteristic may be related to a specific degree of closeness. 
+                    For example a particular characteristic may apply to failures that are localized (e.g. to one side of a road) where as another characteristic may relate to failures that have a broader impact (e.g. both sides of a road that crosses a bridge).
+                    Depending upon the importance of the traffic being routed different risk characteristics will be evaluated.";
+            }
+            leaf-list risk-identifier-list {
+                type string;
+                min-elements 1;
+                description "A list of the identifiers of each physical/geographic unit (with the specific risk characteristic) that is related to a segment of the TopologicalEntity.";
+            }
+            description "The information for a particular risk characteristic where there is a list of risk identifiers related to that characteristic.";
+        }
+        grouping validation-mechanism-g {
+            leaf validation-mechanism {
+                type string;
+                description "Name of mechanism used to validate adjacency";
+            }
+            leaf layer-protocol-adjacency-validated {
+                type string;
+                description "State of validatiion";
+            }
+            leaf validation-robustness {
+                type string;
+                description "Quality of validation (i.e. how likely is the stated validation to be invalid)";
+            }
+            description "Identifies the validation mechanism and describes the characteristics of that mechanism";
+        }
+        typedef forwarding-rule {
+            type enumeration {
+                enum MAY_FORWARD_ACROSS_GROUP {
+                    description "none";
+                }
+                enum MUST_FORWARD_ACROSS_GROUP {
+                    description "none";
+                }
+                enum CANNOT_FORWARD_ACROSS_GROUP {
+                    description "none";
+                }
+                enum NO_STATEMENT_ON_FORWARDING {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef rule-type {
+            type enumeration {
+                enum FORWARDING {
+                    description "none";
+                }
+                enum CAPACITY {
+                    description "none";
+                }
+                enum COST {
+                    description "none";
+                }
+                enum TIMING {
+                    description "none";
+                }
+                enum RISK {
+                    description "none";
+                }
+                enum GROUPING {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping resilience-type-g {
+            leaf restoration-policy {
+                type restoration-policy;
+                description "none";
+            }
+            leaf protection-type {
+                type protection-type;
+                description "none";
+            }
+            description "none";
+        }
+        typedef restoration-policy {
+            type enumeration {
+                enum PER_DOMAIN_RESTORATION {
+                    description "none";
+                }
+                enum END_TO_END_RESTORATION {
+                    description "none";
+                }
+                enum NA {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef protection-type {
+            type enumeration {
+                enum NO_PROTECTON {
+                    description "none";
+                }
+                enum ONE_PLUS_ONE_PROTECTION {
+                    description "none";
+                }
+                enum ONE_PLUS_ONE_PROTECTION_WITH_DYNAMIC_RESTORATION {
+                    description "none";
+                }
+                enum PERMANENT_ONE_PLUS_ONE_PROTECTION {
+                    description "none";
+                }
+                enum ONE_FOR_ONE_PROTECTION {
+                    description "none";
+                }
+                enum DYNAMIC_RESTORATION {
+                    description "none";
+                }
+                enum PRE_COMPUTED_RESTORATION {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+
+    /***********************
+    * package interfaces
+    **********************/ 
+        rpc get-topology-details {
+            description "none";
+            input {
+                leaf topology-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container topology {
+                    uses topology-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-node-details {
+            description "none";
+            input {
+                leaf topology-id-or-name {
+                    type string;
+                    description "none";
+                }
+                leaf node-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container node {
+                    uses node-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-node-edge-point-details {
+            description "none";
+            input {
+                leaf topology-id-or-name {
+                    type string;
+                    description "none";
+                }
+                leaf node-id-or-name {
+                    type string;
+                    description "none";
+                }
+                leaf ep-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container node-edge-point {
+                    uses node-edge-point-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-link-details {
+            description "none";
+            input {
+                leaf topology-id-or-name {
+                    type string;
+                    description "none";
+                }
+                leaf link-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container link {
+                    uses link-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-topology-list {
+            description "none";
+            output {
+                list topology {
+                    uses topology-g;
+                    description "none";
+                }
+            }
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-virtual-network@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-virtual-network@2018-08-31.yang
new file mode 100644
index 0000000..50d8828
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-virtual-network@2018-08-31.yang
@@ -0,0 +1,252 @@
+module tapi-virtual-network {
+    namespace "urn:onf:otcc:yang:tapi-virtual-network";
+    prefix tapi-virtual-network;
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    import tapi-common {
+        prefix tapi-common;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "
+        This module contains TAPI Virtual Network Model definitions.
+        Source: TapiVirtualNetwork.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    augment "/tapi-common:context" {
+        uses virtual-network-context-g;
+        description "Augments the base TAPI Context with VirtualNetworkService information";
+    }
+    /*************************
+     * definitions of refrences
+     *************************/
+     grouping virtual-nw-service-ref-g {
+         leaf virtual-nw-service-uuid {
+             type leafref {
+                 path '/tapi-common:context/tapi-virtual-network:virtual-nw-service/tapi-virtual-network:uuid';
+             }
+             description "none";
+         }
+         description "none";
+     }
+     
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping virtual-network-constraint-g {
+            container src-service-end-point {
+                uses tapi-common:service-interface-point-ref-g;
+                config false;
+                description "none";
+            }
+            container sink-service-end-point {
+            	uses tapi-common:service-interface-point-ref-g;
+                config false;
+                description "none";
+            }
+            list diversity-exclusion {
+                uses virtual-nw-service-ref-g;
+                key 'virtual-nw-service-uuid';
+                config false;
+                description "none";
+            }
+            container requested-capacity {
+                uses tapi-common:capacity-g;
+                description "none";
+            }
+            leaf service-level {
+                type string;
+                description "An abstract value the meaning of which is mutually agreed – typically represents metrics such as - Class of service, priority, resiliency, availability";
+            }
+            leaf-list service-layer {
+                type tapi-common:layer-protocol-name;
+                description "none";
+            }
+            list cost-characteristic {
+                key 'cost-name';
+                uses tapi-topology:cost-characteristic-g;
+                description "The list of costs where each cost relates to some aspect of the TopologicalEntity.";
+            }
+            list latency-characteristic {
+                key 'traffic-property-name';
+                uses tapi-topology:latency-characteristic-g;
+                description "The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic.";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        grouping virtual-network-service-g {
+            container topology {
+                uses tapi-topology:topology-ref-g;
+                config false;
+                description "none";
+            }
+            list end-point {
+                key 'local-id';
+                min-elements 2;
+                uses virtual-network-service-end-point-g;
+                description "none";
+            }
+            list vnw-constraint {
+                key 'local-id';
+                min-elements 1;
+                uses virtual-network-constraint-g;
+                description "none";
+            }
+            leaf schedule {
+                type string;
+                description "none";
+            }
+            container state {
+                uses tapi-common:admin-state-pac-g;
+                description "none";
+            }
+            leaf-list layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                min-elements 1;
+                description "none";
+            }
+            uses tapi-common:service-spec-g;
+            description "The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms.
+                At the lowest level of recursion, a FC represents a cross-connection within an NE.";
+        }
+        grouping virtual-network-service-end-point-g {
+            container service-interface-point {
+            	uses tapi-common:service-interface-point-ref-g;
+                config false;
+                description "none";
+            }
+            leaf role {
+                type tapi-common:port-role;
+                config false;
+                description "Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root)  in the context of the FC with respect to the FC function. ";
+            }
+            leaf direction {
+                type tapi-common:port-direction;
+                config false;
+                description "The orientation of defined flow at the EndPoint.";
+            }
+            leaf service-layer {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            description "The association of the FC to LTPs is made via EndPoints.
+                The EndPoint (EP) object class models the access to the FC function. 
+                The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances.  
+                In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC. 
+                It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point.
+                The EP replaces the Protection Unit of a traditional protection model. 
+                The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component";
+        }
+        grouping virtual-network-context-g {
+            list virtual-nw-service {
+                key 'uuid';
+                uses virtual-network-service-g;
+                description "none";
+            }
+            description "none";
+        }
+
+    /***********************
+    * package interfaces
+    **********************/ 
+        rpc create-virtual-network-service {
+            description "none";
+            input {
+                list sep {
+                    min-elements 2;
+                    uses virtual-network-service-end-point-g;
+                    description "none";
+                }
+                container vnw-constraint {
+                    uses virtual-network-constraint-g;
+                    description "none";
+                }
+                leaf conn-schedule {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses virtual-network-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc delete-virtual-network-service {
+            description "none";
+            input {
+                leaf service-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses virtual-network-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-virtual-network-service-details {
+            description "none";
+            input {
+                leaf service-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses virtual-network-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-virtual-network-service-list {
+            description "none";
+            output {
+                list service {
+                    uses virtual-network-service-g;
+                    description "none";
+                }
+            }
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/version.properties b/sdnr/wt/devicemanager/provider/src/main/resources/version.properties
new file mode 100644
index 0000000..8037339
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/version.properties
@@ -0,0 +1,3 @@
+# Proberties filled in by maven during build process
+version = ${project.version}
+build = ${buildtime}
diff --git a/sdnr/wt/devicemanager/provider/src/main/test/AaiTest.java b/sdnr/wt/devicemanager/provider/src/main/test/AaiTest.java
new file mode 100644
index 0000000..397239e
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/test/AaiTest.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+import java.util.ArrayList;
+import java.util.List;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.aaiConnector.impl.AaiProviderClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InventoryInformation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.HtDevicemanagerConfiguration;
+
+public class AaiTest {
+
+    public static void main(String[] args)
+    {
+        HtDevicemanagerConfiguration cfg=HtDevicemanagerConfiguration.getTestConfiguration();
+
+        AaiProviderClient provider = new AaiProviderClient(cfg, null);
+
+        String mountPointName = "testDevice 01";
+        String type="Unit";
+        String model="Horizon Compact+";
+        String vendor="DragonWave-X";
+        String ipv4="127.0.0.1";
+        String ipv6="::1";
+        List<String> ifInfos = new ArrayList<>();
+        ifInfos.add("LP-MWPS-RADIO");
+        InventoryInformation ii=new InventoryInformation(type, model, vendor, ipv4, ipv6, ifInfos);
+        System.out.println("registering device");
+        provider.onDeviceRegistered(mountPointName,ii);
+        try {
+            Thread.sleep(5000);
+        } catch (InterruptedException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        System.out.println("unregistering device");
+        provider.onDeviceUnregistered(mountPointName);
+        System.out.println("finished");
+        try {
+            provider.close();
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/test/AkkaConfigTest.java b/sdnr/wt/devicemanager/provider/src/main/test/AkkaConfigTest.java
new file mode 100644
index 0000000..40a1910
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/test/AkkaConfigTest.java
@@ -0,0 +1,194 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.AkkaConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.AkkaConfig.ClusterNodeInfo;
+
+public class AkkaConfigTest {
+
+	private static String getAkkaConfigSingleNodeText()
+	{
+return "\n" +
+		"odl-cluster-data {\n" +
+		"  akka {\n" +
+		"    remote {\n" +
+		"      artery {\n" +
+		"        enabled = off\n" +
+		"        canonical.hostname = \"127.0.0.1\"\n" +
+		"        canonical.port = 2550\n" +
+		"      }\n" +
+		"      netty.tcp {\n" +
+		"        hostname = \"127.0.0.1\"\n" +
+		"        port = 2550\n" +
+		"      }\n" +
+		"      # when under load we might trip a false positive on the failure detector\n" +
+		"      # transport-failure-detector {\n" +
+		"        # heartbeat-interval = 4 s\n" +
+		"        # acceptable-heartbeat-pause = 16s\n" +
+		"      # }\n" +
+		"    }\n" +
+		"\n" +
+		"    cluster {\n" +
+		"      # Remove \".tcp\" when using artery.\n" +
+		"      seed-nodes = [\"akka.tcp://opendaylight-cluster-data@127.0.0.1:2550\"]\n" +
+		"\n" +
+		"      roles = [\n" +
+		"        \"member-1\"\n" +
+		"      ]\n" +
+		"\n" +
+		"    }\n" +
+		"\n" +
+		"    persistence {\n" +
+		"      # By default the snapshots/journal directories live in KARAF_HOME. You can choose to put it somewhere else by\n" +
+		"      # modifying the following two properties. The directory location specified may be a relative or absolute path. \n" +
+		"      # The relative path is always relative to KARAF_HOME.\n" +
+		"\n" +
+		"      # snapshot-store.local.dir = \"target/snapshots\"\n" +
+		"      # journal.leveldb.dir = \"target/journal\"\n" +
+		"\n" +
+		"      journal {\n" +
+		"        leveldb {\n" +
+		"          # Set native = off to use a Java-only implementation of leveldb.\n" +
+		"          # Note that the Java-only version is not currently considered by Akka to be production quality.\n" +
+		"\n" +
+		"          # native = off\n" +
+		"        }\n" +
+		"      }\n" +
+		"    }\n" +
+		"  }\n" +
+		"}";
+	}
+	private static String getAkkaConfigClusterNodeText()
+	{
+		return "\n" +
+				"odl-cluster-data {\n" +
+				"\n" +
+				"  akka {\n" +
+				"    loglevel = \"\"\n" +
+				"    remote {\n" +
+				"      netty.tcp {\n" +
+				"        hostname = \"zltcmtn23arbc01.2f0377.mtn23a.tci.att.com\"\n" +
+				"        port = 2550\n" +
+				"      }\n" +
+				"    }\n" +
+				"    actor {\n" +
+				"    debug{\n" +
+				"        autoreceive = on\n" +
+				"        lifecycle = on\n" +
+				"        unhandled = on\n" +
+				"        fsm = on\n" +
+				"        event-stream = on\n" +
+				"     }\n" +
+				"    }\n" +
+				"    cluster {\n" +
+				"      seed-nodes = [\"akka.tcp://opendaylight-cluster-data@zltcmtn23arbc01.2f0377.mtn23a.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23arbc02.2f0377.mtn23a.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23arbc03.2f0377.mtn23a.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23brbc01.f84e7a.mtn23b.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23brbc02.f84e7a.mtn23b.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23brbc03.f84e7a.mtn23b.tci.att.com:2550\"]\n" +
+				"      seed-node-timeout = 15s\n" +
+				"      roles = [\"member-1\"]\n" +
+				"\n" +
+				"    }\n" +
+				"    persistence {\n" +
+				"    journal-plugin-fallback {\n" +
+				"         circuit-breaker {\n" +
+				"            max-failures = 10\n" +
+				"            call-timeout = 60s\n" +
+				"            reset-timeout = 30s\n" +
+				"         }\n" +
+				"     }\n" +
+				"    }\n" +
+				"  }\n" +
+				"}\n" +
+				"\n" +
+				"odl-cluster-rpc {\n" +
+				"\n" +
+				"  akka {\n" +
+				"    loglevel = \"\"\n" +
+				"    remote {\n" +
+				"      netty.tcp {\n" +
+				"        hostname = \"zltcmtn23arbc01.2f0377.mtn23a.tci.att.com\"\n" +
+				"        port = 2551\n" +
+				"      }\n" +
+				"    }\n" +
+				"    actor {\n" +
+				"    debug{\n" +
+				"        autoreceive = on\n" +
+				"        lifecycle = on\n" +
+				"        unhandled = on\n" +
+				"        fsm = on\n" +
+				"        event-stream = on\n" +
+				"     }\n" +
+				"    }\n" +
+				"    cluster {\n" +
+				"	seed-nodes = [\"akka.tcp://odl-cluster-rpc@zltcmtn23arbc01.2f0377.mtn23a.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23arbc02.2f0377.mtn23a.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23arbc03.2f0377.mtn23a.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23brbc01.f84e7a.mtn23b.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23brbc02.f84e7a.mtn23b.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23brbc03.f84e7a.mtn23b.tci.att.com:2551\"]\n" +
+				"        seed-node-timeout = 15s\n" +
+				"    }\n" +
+				"    persistence {\n" +
+				"    journal-plugin-fallback {\n" +
+				"         circuit-breaker {\n" +
+				"            max-failures = 10\n" +
+				"            call-timeout = 60s\n" +
+				"            reset-timeout = 30s\n" +
+				"         }\n" +
+				"     }\n" +
+				"     }\n" +
+				"  }\n" +
+				"}\n" +
+				"\n" +
+				"";
+	}
+	public static void main(String[] args)
+	{
+		AkkaConfig cfg;
+		try {
+			System.out.println("testing clusternode config1");
+			System.out.println("===========================");
+			cfg = AkkaConfig.parse(getAkkaConfigClusterNodeText());
+			System.out.println("succeeded: ");
+			System.out.println(cfg.toString());
+			System.out.println(String.format("found %d cluster nodes",cfg.getClusterConfig().getSeedNodes().size()));
+			for(ClusterNodeInfo n : cfg.getClusterConfig().getSeedNodes())
+			{
+				System.out.println(n.toString());
+			}
+		} catch (Exception e) {
+			System.out.println("failed: "+e.getMessage());
+		}
+		try {
+			System.out.println("testing singlenode config1");
+			System.out.println("===========================");
+			cfg = AkkaConfig.parse(getAkkaConfigSingleNodeText());
+			System.out.println("succeeded: ");
+			System.out.println(cfg.toString());
+		} catch (Exception e) {
+			System.out.println("failed: "+e.getMessage());
+		}
+		try {
+			System.out.println("testing clusternode config1");
+			System.out.println("===========================");
+			cfg = AkkaConfig.load("/home/herbert/Nextcloud/captured-karaf-logs/akka.conf");
+			System.out.println("succeeded: ");
+			System.out.println(cfg.toString());
+			System.out.println(String.format("found %d cluster nodes",cfg.getClusterConfig().getSeedNodes().size()));
+			for(ClusterNodeInfo n : cfg.getClusterConfig().getSeedNodes())
+			{
+				System.out.println(n.toString());
+			}
+		} catch (Exception e) {
+			System.out.println("failed: "+e.getMessage());
+		}
+
+	}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/test/ClusterConfigTest.java b/sdnr/wt/devicemanager/provider/src/main/test/ClusterConfigTest.java
new file mode 100644
index 0000000..1f2f183
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/test/ClusterConfigTest.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.AkkaConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.GeoConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.HtDevicemanagerConfiguration;
+
+public class ClusterConfigTest {
+
+	public static void main(String[] args)
+	{
+		final String geoconf="/home/herbert/Nextcloud/captured-karaf-logs/geo.conf";
+		final String akkconf="/home/herbert/Nextcloud/captured-karaf-logs/akka.conf";
+		final String devmgrprop="";
+
+
+		try {
+			GeoConfig geo = geoconf==null?null:GeoConfig.load(geoconf);
+			AkkaConfig akkaConfig = AkkaConfig.load(akkconf);
+			//HtDevicemanagerConfiguration config = HtDevicemanagerConfiguration.getTestConfiguration(devmgrprop);
+			String hostName = "0.0.0.0";
+		hostName=akkaConfig.getClusterConfig().getHostName(hostName);
+		String clusterDBName=akkaConfig.getClusterConfig().getDBClusterName(null);
+		String nodeName=String.format("node%d.%s",akkaConfig.getClusterConfig().getRoleMemberIndex(),clusterDBName);
+
+		System.out.println("hostname="+hostName);
+		System.out.println("clusterdbName="+clusterDBName);
+		System.out.println("nodename="+nodeName);
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/test/ConfigTest.java b/sdnr/wt/devicemanager/provider/src/main/test/ConfigTest.java
new file mode 100644
index 0000000..48cf2db
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/test/ConfigTest.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.AaiConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.DcaeConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.EsConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.HtDevicemanagerConfiguration;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.PmConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.ToggleAlarmConfig;
+
+public class ConfigTest {
+
+    public static void main(String[] args)
+    {
+            HtDevicemanagerConfiguration config;
+            DcaeConfig c;
+            EsConfig c3;
+            AaiConfig c4;
+            PmConfig c5;
+            ToggleAlarmConfig c6;
+            /*config= = HtDevicemanagerConfiguration.getTestConfiguration();
+            c=config.getDcae();
+            c2=AotsMConfig.getAots(config);
+            c3=config.getEs();
+            c4= config.getAai();
+            c5 = config.getPm();
+            System.out.println(c.toString());
+            System.out.println(c2.toString());
+            System.out.println(c3.toString());
+            System.out.println(c4.toString());
+            System.out.println(c5.toString());
+            IConfigChangedListener listener = new IConfigChangedListener() {
+
+                @Override
+                public void onConfigChanged() {
+                    System.out.println("sth changed");
+                    AaiConfig c=AaiConfig.reload();
+                    System.out.println(c.toString());
+                }
+            };
+            System.out.println("start listening for changes");
+
+            config.registerConfigChangedListener(listener );
+            try {
+                Thread.sleep(5000);
+            } catch (InterruptedException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+            config.unregisterConfigChangedListener(listener);
+            System.out.println("finished");
+            */
+            HtDevicemanagerConfiguration.clear();
+            config = HtDevicemanagerConfiguration.getTestConfiguration("/home/herbert/tmp/devicemanager.properties");
+            c=config.getDcae();
+            c3=config.getEs();
+            c4 = config.getAai();
+            c5 = config.getPm();
+            c6 = config.getToggleAlarm();
+            System.out.println(c.toString());
+            System.out.println(c3.toString());
+            System.out.println(c4.toString());
+            System.out.println(c5.toString());
+            System.out.println(c6.toString());
+
+
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/test/ESWebAPITest.java b/sdnr/wt/devicemanager/provider/src/main/test/ESWebAPITest.java
new file mode 100644
index 0000000..9f9962a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/test/ESWebAPITest.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+import java.io.IOException;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseWebAPIClient;
+
+public class ESWebAPITest {
+
+	public static void main(String[] args)
+	{
+		HtDatabaseWebAPIClient client=new HtDatabaseWebAPIClient();
+		try {
+			String response=client.sendRequest("/mwtn/mediator-server/_search", "GET", new JSONObject("{\"match\":{\"id\":id}}"));
+			System.out.println(response);
+		} catch (JSONException | IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/test/GeoConfigTest.java b/sdnr/wt/devicemanager/provider/src/main/test/GeoConfigTest.java
new file mode 100644
index 0000000..36e60e1
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/test/GeoConfigTest.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.GeoConfig;
+
+public class GeoConfigTest {
+
+
+	private static String getClusterGeoConfigContent()
+	{
+return "\n" +
+		"lumina-geo-cluster {\n" +
+		"    primary_roles = [\n" +
+		"	\"member-1\",\"member-2\",\"member-3\"\n" +
+		"    ]\n" +
+		"    secondary_roles = [\n" +
+		"	\"member-4\",\"member-5\",\"member-6\"\n" +
+		"    ]\n" +
+		"    ip_roles_table = [\n" +
+		"\n" +
+		"	{\n" +
+		"role=\"member-1\"\n" +
+		"ip=\"zltcmtn23arbc01.2f0377.mtn23a.tci.att.com\"\n" +
+		"},\n" +
+		"{\n" +
+		"role=\"member-2\"\n" +
+		"ip=\"zltcmtn23arbc02.2f0377.mtn23a.tci.att.com\"\n" +
+		"},\n" +
+		"{\n" +
+		"role=\"member-3\"\n" +
+		"ip=\"zltcmtn23arbc03.2f0377.mtn23a.tci.att.com\"\n" +
+		"},\n" +
+		"{\n" +
+		"role=\"member-4\"\n" +
+		"ip=\"zltcmtn23brbc01.f84e7a.mtn23b.tci.att.com\"\n" +
+		"},\n" +
+		"{\n" +
+		"role=\"member-5\"\n" +
+		"ip=\"zltcmtn23brbc02.f84e7a.mtn23b.tci.att.com\"\n" +
+		"},\n" +
+		"{\n" +
+		"role=\"member-6\"\n" +
+		"ip=\"zltcmtn23brbc03.f84e7a.mtn23b.tci.att.com\"\n" +
+		"}\n" +
+		"    \n" +
+		"	]\n" +
+		"}\n" +
+		"\n" +
+		"\n" +
+		"\n" +
+		"\n" +
+		"";
+	}
+	public static void main(String[] args)
+	{
+		GeoConfig config;
+		try {
+			System.out.println("testing clusternode geo config1");
+			System.out.println("===========================");
+			config = GeoConfig.parse(getClusterGeoConfigContent());
+			System.out.println("succeeded: ");
+			System.out.println(config.toString());
+			System.out.println("primary roles:");
+			System.out.println(config.getPrimaryRoles().toString());
+			System.out.println("secondary roles:");
+			System.out.println(config.getSecondaryRoles().toString());
+
+		} catch (Exception e) {
+			System.out.println("failed: "+e.getMessage());
+		}
+		try {
+			System.out.println("testing clusternode geo config1");
+			System.out.println("===========================");
+			config = GeoConfig.load("/home/herbert/Nextcloud/captured-karaf-logs/geo.conf");
+			System.out.println("succeeded: ");
+			System.out.println(config.toString());
+			System.out.println("primary roles:");
+			System.out.println(config.getPrimaryRoles().toString());
+			System.out.println("secondary roles:");
+			System.out.println(config.getSecondaryRoles().toString());
+
+		} catch (Exception e) {
+			System.out.println("failed: "+e.getMessage());
+		}
+	}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/test/ResTest.java b/sdnr/wt/devicemanager/provider/src/main/test/ResTest.java
new file mode 100644
index 0000000..17e8d30
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/test/ResTest.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+import java.io.IOException;
+import java.util.List;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.Resources;
+
+public class ResTest {
+
+    private static void testDuplicateKeyJSON()
+    {
+        try
+        {
+            String str=Resources.getFileContent("/elasticsearch/index/mwtn/modelDescription/CoreModel-ForMicrowave.json");
+
+            JSONObject o=new JSONObject(str) {
+
+                @Override
+                public JSONObject putOnce(String key, Object value) throws JSONException {
+
+
+                        Object storedValue;
+                        if (key != null && value != null) {
+                            if ((storedValue = this.opt(key)) != null ) {
+                                if(!storedValue.equals(value)) {                         //Only through Exception for different values with same key
+                                    //Replace
+                                    System.out.println("duplicate found");
+                                    this.remove(key);
+                                    this.put(key, value);
+
+                                } else {
+                                    return this;
+                                }
+                            } else {
+                                this.put(key, value);
+                            }
+                        }
+                        return this;
+                }
+            };
+            System.out.println(o.toString());
+        }
+        catch(IOException err)
+        {
+                err.printStackTrace();
+        }
+    }
+    public static void main(String[] args)
+    {
+        JSONObject o=Resources.getJSONFile("/elasticsearch/index/sdnevents/sdneventsMapping.json");
+        System.out.println(o==null?"null":o.toString());
+
+        List<JSONObject> list=Resources.getJSONFiles("/elasticsearch/index", true);
+        System.out.println("found "+list.size()+" valid json files");
+
+        testDuplicateKeyJSON();
+
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/test/TestFileChangeNotification.java b/sdnr/wt/devicemanager/provider/src/main/test/TestFileChangeNotification.java
new file mode 100644
index 0000000..812ce47
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/test/TestFileChangeNotification.java
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+import java.io.File;
+import java.io.IOException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class TestFileChangeNotification {
+	/**
+	 * Check every now and then that a certain file has not changed. If it has, then
+	 * call the {@link #doOnChange} method.
+	 *
+	 * @author JunHo Yoon
+	 * @since 3.1.1
+	 */
+	public static abstract class FileWatchdog extends Thread {
+
+		private static final Logger LOGGER = LoggerFactory.getLogger(FileWatchdog.class);
+		/**
+		 * The default delay between every file modification check, set to 60
+		 * seconds.
+		 */
+		public static final long DEFAULT_DELAY = 60000;
+		/**
+		 * The name of the file to observe for changes.
+		 */
+		private String filename;
+
+		/**
+		 * The delay to observe between every check. By default set
+		 * {@link #DEFAULT_DELAY}.
+		 */
+		private long delay = DEFAULT_DELAY;
+
+		private File file;
+		private long lastModified = 0;
+		private boolean warnedAlready = false;
+		private boolean interrupted = false;
+
+		protected  FileWatchdog(String filename) {
+			this.filename = filename;
+			file = new File(filename);
+			setDaemon(true);
+			checkAndConfigure();
+		}
+
+		/**
+		 * Set the delay to observe between each check of the file changes.
+		 *
+		 * @param delay
+		 *            the frequency of file watch.
+		 */
+		public  void setDelay(long delay) {
+			this.delay = delay;
+		}
+
+		/**
+		 * abstract method to be run when the file is changed.
+		 */
+		protected abstract void doOnChange();
+
+		protected  void checkAndConfigure() {
+			boolean fileExists;
+			try {
+				fileExists = file.exists();
+			} catch (SecurityException e) {
+				LOGGER.warn("Was not allowed to read check file existence, file:[" + filename + "].");
+				interrupted = true; // there is no point in continuing
+				return;
+			}
+
+			if (fileExists) {
+				long l = file.lastModified(); // this can also throw a
+				if (lastModified ==0) {
+					lastModified = l; // is very unlikely.
+				}
+				if (l > lastModified) { // however, if we reached this point this
+					lastModified = l; // is very unlikely.
+					doOnChange();
+					warnedAlready = false;
+				}
+			} else {
+				if (!warnedAlready) {
+					LOGGER.debug("[" + filename + "] does not exist.");
+					warnedAlready = true;
+				}
+			}
+		}
+
+		@Override
+		public  void run() {
+			while (!interrupted && !isInterrupted()) {
+				try {
+					Thread.sleep(delay);
+				} catch (InterruptedException e) {
+				}
+				checkAndConfigure();
+			}
+		}
+	}
+
+	public static class SomeWatchFile extends FileWatchdog{
+
+	      protected SomeWatchFile(String filename) {
+	            super(filename);
+	            this.setDelay(1000);
+	        }
+
+	        @Override
+	        protected void doOnChange() {
+	            System.out.println("File has changed");
+	        }
+	}
+
+    public static void main(String args[]) throws IOException {
+	            SomeWatchFile someWatchFile = new SomeWatchFile ("watchedFile.txt");
+	            someWatchFile.start();
+
+	            String fileName = "watchedFile.txt";
+	            File tempFile = new File(fileName);
+	            tempFile.createNewFile();
+
+	            System.out.println("1. Press F5 in eclipse to see and modify 2. Press enter to exit");
+	            System.in.read();
+	            System.out.println("Remove file "+fileName);
+	            tempFile.delete();
+	        }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/test/UntilTest.java b/sdnr/wt/devicemanager/provider/src/main/test/UntilTest.java
new file mode 100644
index 0000000..fdf62c2
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/test/UntilTest.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+public class UntilTest {
+
+	public static void main(String[] args) {
+
+		System.out.println("Test");
+        int retry=0, maxRetries=3;
+        boolean noErrorIndication=false;
+
+		do {
+
+			if (retry > 0)
+				System.out.println("Sleep");
+			noErrorIndication = retry == 0;
+			System.out.println(retry+ "  " + noErrorIndication);
+
+		} while (noErrorIndication == false && retry++ < maxRetries);
+
+		System.out.println("Done "+noErrorIndication+" "+retry);
+	}
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/test/ZonedDateTimeTimesTest.java b/sdnr/wt/devicemanager/provider/src/main/test/ZonedDateTimeTimesTest.java
new file mode 100644
index 0000000..860a46b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/test/ZonedDateTimeTimesTest.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+import java.time.ZonedDateTime;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.database.types.EsMaintenanceFilter;
+
+public class ZonedDateTimeTimesTest {
+
+	public static void main(String[] args) {
+
+
+		EsMaintenanceFilter fi = new EsMaintenanceFilter();
+
+		System.out.println("Default 1: "+fi);
+
+
+		fi.setEndAsString("2018-01-01T10:00:00+05:00");
+
+		System.out.println("Default 2: "+fi);
+
+		System.out.println("As String: "+fi.getEndAsString());
+
+
+		ZonedDateTime start = ZonedDateTime.parse("2018-01-01T10:00:00+05:00");
+		ZonedDateTime end = ZonedDateTime.parse("2019-01-01T10:00:00+05:00");
+		ZonedDateTime now;
+
+		now = ZonedDateTime.parse("2017-05-01T10:00:00+05:00");
+		System.out.println("Vor: "+EsMaintenanceFilter.isInPeriod(start, end, now));
+
+		now = ZonedDateTime.parse("2018-05-01T10:00:00+05:00");
+		System.out.println("in: "+EsMaintenanceFilter.isInPeriod(start, end, now));
+
+		now = ZonedDateTime.parse("2019-05-01T10:00:00+05:00");
+		System.out.println("nach: "+EsMaintenanceFilter.isInPeriod(start, end, now));
+
+	}
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/test/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/DBPluginExtractTest.java b/sdnr/wt/devicemanager/provider/src/main/test/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/DBPluginExtractTest.java
new file mode 100644
index 0000000..4da7251
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/test/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/DBPluginExtractTest.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseNode;
+
+public class DBPluginExtractTest {
+
+    public static void main(String[] args)
+    {
+        HtDatabaseNode.checkorcreateplugins("/home/herbert/test");
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/ExampleHttpClient.java b/sdnr/wt/devicemanager/provider/src/test/java/ExampleHttpClient.java
new file mode 100644
index 0000000..c5426e3
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/ExampleHttpClient.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.http.BaseHTTPClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.http.BaseHTTPResponse;
+
+/*
+ * base... baseURL, e.g. http://10.10.55.11:8432/api/paut/
+ *
+ * usage: this.sendRequest()
+ * 		uri... all after the baseURL => request-url=base+uri
+ *		headers: https://developer.mozilla.org/de/docs/Web/HTTP/Headers
+ *
+ */
+public class ExampleHttpClient extends BaseHTTPClient{
+
+	private final String username;
+	private final String password;
+
+	/*
+	 * for normal http request without ssl client certificate authorization
+	 */
+	public ExampleHttpClient(String base, boolean trustAllCerts,String user,String passwd)
+	{
+		super(base,trustAllCerts);
+		this.username=user;
+		this.password=passwd;
+		int timeout=60000;//http timeout in ms
+		this.setTimeout(timeout);
+
+
+	}
+	/*
+	 * for client cert authorization
+	 */
+	public ExampleHttpClient(String base, boolean trustAllCerts, String certFilename, String passphrase,
+			int sslCertType) {
+		super(base, trustAllCerts, certFilename, passphrase, sslCertType);
+		this.username="";
+		this.password="";
+
+	}
+
+
+	public void doExamplePost(String param1,int param2) throws IOException
+	{
+		String uri="network/pnf/id";
+		String method="GET";
+		String body=String.format("{\"param1\":\"%s\",\"param1\":%d}",param1,param2);
+		Map<String, String> headers = new HashMap<String,String>();
+		headers.put("Accept-Encoding", "utf-8");
+		headers.put("Authorization", BaseHTTPClient.getAuthorizationHeaderValue(this.username, this.password));
+		BaseHTTPResponse response=this.sendRequest(uri, method, body, headers );
+
+		if(response.code==BaseHTTPResponse.CODE200)
+		{
+
+		}
+
+
+	}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/TestMappEquipment.java b/sdnr/wt/devicemanager/provider/src/test/java/TestMappEquipment.java
new file mode 100644
index 0000000..fd77735
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/TestMappEquipment.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+
+public class TestMappEquipment<T> {
+
+    public static void main(String[] args) {
+
+        /*
+        MyEquipmentBuilder eb = new MyEquipmentBuilder();
+        eb.setAdministrativeState(AdministrativeState.Unlocked);
+        eb.setCategory((new CategoryBuilder()).setCategory(EquipmentCategory.Rack).build());
+
+        Equipment e2 = eb.build();
+
+        String inspect = HtDatabaseEventsService.inspect(e2,0);
+        System.out.println("Inspect: "+inspect);
+
+        String json = HtDatabaseEventsService.toJson(e2);
+        System.out.println("JSON: "+json);
+         */
+
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/DcaePrivateTester.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/DcaePrivateTester.java
new file mode 100644
index 0000000..e9ccc53
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/DcaePrivateTester.java
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk feature sdnr wt
+ *  ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeConnector.test;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.URL;
+import java.net.URLConnection;
+import java.security.cert.X509Certificate;
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+public class DcaePrivateTester {
+
+
+    public static void test(URL url, boolean readFromServer) throws Exception {
+        // Create a trust manager that does not validate certificate chains
+        TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
+            @Override
+            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
+                return null;
+            }
+            @Override
+            public void checkClientTrusted(X509Certificate[] certs, String authType) {
+            }
+            @Override
+            public void checkServerTrusted(X509Certificate[] certs, String authType) {
+            }
+        } };
+        // Install the all-trusting trust manager
+        final SSLContext sc = SSLContext.getInstance("TLS");
+        sc.init(null, trustAllCerts, new java.security.SecureRandom());
+        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
+        // Create all-trusting host name verifier
+        HostnameVerifier allHostsValid = (hostname, session) -> true;
+
+        // Install the all-trusting host verifier
+        HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
+
+        //URL url = new URL("https://www.google.com");
+        URLConnection con = url.openConnection();
+        System.out.println("Connection background: "+con.getClass().getName()+" "+url.getHost());
+
+        if (readFromServer) {
+            final Reader reader = new InputStreamReader(con.getInputStream());
+            final BufferedReader br = new BufferedReader(reader);
+            String line = "";
+            while ((line = br.readLine()) != null) {
+                System.out.println(line);
+            }
+            br.close();
+        } /**/
+    } // End of main
+
+
+
+//    httpTestUrl=https://plan.fritz.box:9092/ux/#
+//    keyStore=etc/clientkeystore
+//    keyStorePassword=daylight2016
+    public static void main(String[] args) {
+
+        String urlString = "https://www.google.de";
+        //String urlString = "https://plan.fritz.box:9092/ux/#";
+        //String urlString = "http://plan.fritz.box:9091/ux/#";
+        //String urlString = "http://127.0.0.1:30000/eventListener/v3";
+
+        try {
+            test(new URL(urlString), true);
+        } catch (Exception e) {
+            System.out.println("(..something..) failed");
+            e.printStackTrace();
+        }
+        /*
+        System.out.println("Test HTTPS");
+
+        final HttpsClient httpTestClient;
+        httpTestClient = new HttpsClient();
+
+        httpTestClient.testIt(
+                //"https://plan.fritz.box:9092/ux/#",
+                "https://www.google.de",
+                "/home/herbert/odl/distribution-karaf-0.5.1-Boron-SR1/etc/clientkeystore",
+                "daylight2016"
+        );/**/
+
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/DcaeTestClient.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/DcaeTestClient.java
new file mode 100644
index 0000000..ffc007a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/DcaeTestClient.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk feature sdnr wt
+ *  ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeConnector.test;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.DcaeConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl.DcaeMessages;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl.DcaeSenderImpl;
+
+public class DcaeTestClient {
+
+    private static final boolean TESTCOLLECTOR_YES = true;
+
+    public static void main(String[] args) {
+
+        System.out.println("Test program to verify DCAE https connectivity");
+
+        //Get configuration
+        DcaeConfig configuration = DcaeConfig.getDefaultConfiguration();
+
+        if (configuration != null) {
+
+            //Start services
+            System.out.println("Configuration: "+configuration);
+
+            DcaeSenderImpl dcaeClient = new DcaeSenderImpl(configuration.getEventReveicerUrl(), configuration.getUserCredentials());
+
+            if (TESTCOLLECTOR_YES) {
+                System.out.println("Connect to testclient and send notifications");
+
+                DcaeMessages dcaeMessages = new DcaeMessages(dcaeClient, "ControllerName", 31, null);
+
+                for (int t=0; t < 2; t++) {
+                    try {
+                        Thread.sleep(1000);                 //1000 milliseconds is one second.
+                    } catch(InterruptedException ex) {
+                        Thread.currentThread().interrupt();
+                    }
+                    System.out.println(t+". Send notification and receive answer message");
+                    System.out.println("Heartbeat message: "+dcaeMessages.postHeartBeat());
+                    System.out.println("Status of ECOMP Client: "+dcaeClient.getStatusAsString());
+                }
+
+            } else {
+
+                System.out.println("Connect to server and receive initial answer.");
+                System.out.println("Message: "+dcaeClient.testConnectServer());
+
+            }
+
+        }
+   }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/HttpsClient.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/HttpsClient.java
new file mode 100644
index 0000000..6ff18b4
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/HttpsClient.java
@@ -0,0 +1,304 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk feature sdnr wt
+ *  ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeConnector.test;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.security.cert.Certificate;
+import java.security.cert.X509Certificate;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLPeerUnverifiedException;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl.DcaeProviderClient;
+
+public class HttpsClient{
+
+    private static final MyLogger LOG = MyLogger.getLogger(DcaeProviderClient.class);
+
+    void test() {
+
+        TrustManager tm = new X509TrustManager() {
+
+            @Override
+            public void checkClientTrusted(X509Certificate[] chain, String authType)
+                    throws java.security.cert.CertificateException {
+                //do nothing, you're the client
+            }
+
+            @Override
+            public void checkServerTrusted(X509Certificate[] chain, String authType)
+                    throws java.security.cert.CertificateException {
+                /* chain[chain.length -1] is the candidate for the
+                 * root certificate.
+                 * Look it up to see whether it's in your list.
+                 * If not, ask the user for permission to add it.
+                 * If not granted, reject.
+                 * Validate the chain using CertPathValidator and
+                 * your list of trusted roots.
+                 */
+            }
+
+            @Override
+            public X509Certificate[] getAcceptedIssuers() {
+                   //also only relevant for servers
+                 return null;
+            }
+        };
+
+        TrustManager tml[] = new TrustManager[1];
+        tml[0] = tm;
+
+
+        try {
+            SSLContext ctx = SSLContext.getInstance("TLS");
+            ctx.init(null, tml, null);
+            @SuppressWarnings("unused")
+            SSLSocketFactory sslF = ctx.getSocketFactory();
+
+        } catch (NoSuchAlgorithmException | KeyManagementException e) {
+            e.printStackTrace();
+        }
+
+
+    };
+
+    void setupAllTrustingManager() {
+        // Create a trust manager that does not validate certificate chains
+        TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager(){
+            @Override
+            public X509Certificate[] getAcceptedIssuers(){return null;}
+            @Override
+            public void checkClientTrusted(X509Certificate[] certs, String authType){}
+            @Override
+            public void checkServerTrusted(X509Certificate[] certs, String authType){}
+        }};
+
+        // Install the all-trusting trust manager
+        try {
+            SSLContext sc = SSLContext.getInstance("TLS");
+            sc.init(null, trustAllCerts, new SecureRandom());
+            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
+        } catch (Exception e) {
+            ;
+        }
+    }
+
+    void testIt(String https_url, String keyStoreName, String keyStorePassword){
+
+        LOG.info("Message to: {} begin.", https_url);
+
+        if (https_url.equals("off")) {
+            LOG.info("Function switched off");
+            return;
+        }
+
+        /*
+        KeyManagerFactory keyManagerFactory = null;
+
+        try {
+            KeyStore ks = KeyStore.getInstance("JKS");
+            FileInputStream in = new FileInputStream(keyStoreName);
+            ks.load(in, keyStorePassword.toCharArray());
+
+            CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
+            FileInputStream in2 = new FileInputStream("etc/eventprovider.cert");
+            X509Certificate cert = (X509Certificate)certFactory.generateCertificate(in2);
+
+            KeyStore.Entry newEntry = new KeyStore.TrustedCertificateEntry(cert);
+            ks.setEntry("someAlias", newEntry, null);
+
+            keyManagerFactory = KeyManagerFactory.getInstance("X509");
+            keyManagerFactory.init(ks, "yourKeyStorePassword".toCharArray());
+
+        } catch (KeyStoreException e1) {
+            LOG.info("Exception: {}", e1.getMessage());
+        } catch (FileNotFoundException e1) {
+            LOG.info("Exception: {}", e1.getMessage());
+        } catch (NoSuchAlgorithmException e1) {
+            LOG.info("Exception: {}", e1.getMessage());
+        } catch (CertificateException e1) {
+            LOG.info("Exception: {}", e1.getMessage());
+        } catch (IOException e1) {
+            LOG.info("Exception: {}", e1.getMessage());
+        } catch (UnrecoverableKeyException e1) {
+            LOG.info("Exception: {}", e1.getMessage());
+        }
+
+        // Create a trust manager that does not validate certificate chains
+        TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager(){
+            @Override
+            public X509Certificate[] getAcceptedIssuers(){return null;}
+            @Override
+            public void checkClientTrusted(X509Certificate[] certs, String authType){}
+            @Override
+            public void checkServerTrusted(X509Certificate[] certs, String authType){}
+        }};
+         */
+        File file = new File(keyStoreName);
+        LOG.info("Setup keystore begin "+keyStoreName+" "+keyStorePassword+" Exists: "+file.exists());
+
+        System.setProperty("javax.net.debug","ssl");
+        System.setProperty("javax.net.ssl.keyStoreType", "jks");
+        System.setProperty("javax.net.ssl.keyStore", keyStoreName);
+        System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword);
+
+        LOG.info("Setup keystore complete");
+
+        javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
+                (hostname, sslSession) -> {
+                 LOG.info("Hostname check {}", hostname);
+                 return true;
+              });
+        LOG.info("Setup name verifier.");
+
+        try {
+            /*
+            SSLContext sslContext = SSLContext.getInstance("TLS");
+            sslContext.init(keyManagerFactory.getKeyManagers(), trustAllCerts, null);
+            SSLContext.setDefault(sslContext);
+            */
+
+            URL url = new URL(https_url);
+            LOG.info("Url object created");
+
+            HttpsURLConnection con = (HttpsURLConnection)url.openConnection();
+
+            LOG.info("openConnection");
+
+            //dumpl all cert info
+            print_https_cert(con);
+
+            //dump all the content
+            print_content(con);
+
+        } catch (MalformedURLException e) {
+            LOG.info("Exception: {}", e.getMessage());
+        } catch (IOException e) {
+            LOG.info("Exception: {}", e.getMessage());
+        }
+
+        LOG.info("Message to: {} end.", https_url);
+
+    }
+
+    private void print_https_cert(HttpsURLConnection con){
+
+        StringBuffer logMsg = new StringBuffer();
+
+        if(con!=null){
+
+            try {
+                logMsg.append("Response Code : " + con.getResponseCode());
+                logMsg.append("Cipher Suite : " + con.getCipherSuite());
+                logMsg.append("\n");
+
+                Certificate[] certs = con.getServerCertificates();
+                for(Certificate cert : certs){
+                    logMsg.append("Cert Type : " + cert.getType());
+                    logMsg.append("Cert Hash Code : " + cert.hashCode());
+                    logMsg.append("Cert Public Key Algorithm : " + cert.getPublicKey().getAlgorithm());
+                    logMsg.append("Cert Public Key Format : " + cert.getPublicKey().getFormat());
+                    logMsg.append("\n");
+                }
+
+
+            } catch (SSLPeerUnverifiedException e) {
+                logMsg.append(e.getMessage());
+            } catch (IOException e){
+                logMsg.append(e.getMessage());
+            }
+        } else {
+            logMsg.append("No connection");
+        }
+
+        LOG.info(logMsg.toString());
+   }
+
+    private void print_content(HttpsURLConnection con){
+
+         StringBuffer logMsg = new StringBuffer();
+         if(con!=null){
+
+            try {
+
+
+                logMsg.append("****** Content of the URL ********");
+                BufferedReader br =
+                        new BufferedReader(
+                                new InputStreamReader(con.getInputStream()));
+
+                String input;
+
+                while ((input = br.readLine()) != null){
+                    logMsg.append(input);
+                }
+                br.close();
+
+
+            } catch (IOException e) {
+                logMsg.append(e.getMessage());
+            }
+
+        } else {
+            logMsg.append("No connection");
+        }
+
+        LOG.info(logMsg.toString());
+
+    }
+
+    private static class MyLogger {
+
+        private void out( String s, Object...oList) {
+            StringBuffer sb = new StringBuffer();
+            sb.append("-------> ");
+            sb.append(s);
+            sb.append(" P: ");
+            int t = 0;
+            for (Object o: oList) {
+                sb.append("[");
+                sb.append(t++);
+                sb.append("](");
+                sb.append(o.toString());
+                sb.append(")");
+            }
+            System.out.println(sb.toString());
+        }
+
+        void info( String s, Object...o) {
+            out(s,o);
+        }
+
+        static MyLogger getLogger(Class<?> c) {
+            return new MyLogger();
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/Test1dm.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/Test1dm.java
new file mode 100644
index 0000000..358a17c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/Test1dm.java
@@ -0,0 +1,175 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk feature sdnr wt
+ *  ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.test;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerService.Action;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock.DataBrokerNetconfMock;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock.MountPointMock;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock.MountPointServiceMock;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock.NotificationPublishServiceMock;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock.RpcProviderRegistryMock;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.MountPointService;
+import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+
+public class Test1dm {
+
+    private static int DATABASETIMEOUTSECONDS = 30;
+
+    private static Path KARAF_ETC = Paths.get("etc");
+    private static DeviceManagerImpl deviceManager;
+    private static MountPointMock  mountPoint;
+
+
+    @BeforeClass
+    public static void before() throws InterruptedException, IOException {
+
+        // Call System property to get the classpath value
+        Path etc = KARAF_ETC;
+        delete(etc);
+        System.out.println("Create empty:"+etc.toString());
+        Files.createDirectories(etc);
+
+        //Create mocks
+        DataBroker dataBroker = new DataBrokerNetconfMock();
+        MountPointService mountPointService = new MountPointServiceMock(mountPoint = new MountPointMock());
+        NotificationPublishService notificationPublishService = new NotificationPublishServiceMock();
+        RpcProviderRegistry rpcProviderRegistry = new RpcProviderRegistryMock();
+
+        //start using blueprint interface
+        deviceManager = new DeviceManagerImpl();
+
+        deviceManager.setDataBroker(dataBroker);
+        deviceManager.setMountPointService(mountPointService);
+        deviceManager.setNotificationPublishService(notificationPublishService);
+        deviceManager.setRpcProviderRegistry(rpcProviderRegistry);
+
+        try {
+            deviceManager.init();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        System.out.println("Initialization status: "+deviceManager.isDevicemanagerInitializationOk());
+        assertTrue("Devicemanager not initialized", deviceManager.isDevicemanagerInitializationOk());
+        System.out.println("Initialization done");
+    }
+
+    @AfterClass
+    public static void after() throws InterruptedException, IOException {
+
+        System.out.println("Start shutdown");
+        //close using blueprint interface
+        try {
+            deviceManager.close();
+        } catch (Exception e) {
+            System.out.println(e);
+        }
+        delete(KARAF_ETC);
+
+    }
+
+    @Test
+    public void test1() throws InterruptedException  {
+
+        System.out.println("Test1: Wait for database");
+        int timeout = DATABASETIMEOUTSECONDS;
+        while ( !deviceManager.isDatabaseInitializationFinished() && timeout-- > 0) {
+            System.out.println("Test1: "+timeout);
+            Thread.sleep(1000); //On second
+        }
+        System.out.println("Test1: database initialized");
+    }
+
+    @Test
+    public void test2() {
+        System.out.println("Test2: slave mountpoint");
+
+        mountPoint.setDatabrokerAbsent(true);
+        NodeId nodeId = new NodeId("mountpointTest1");
+        NetconfNodeBuilder nNodeBuilder = new NetconfNodeBuilder();
+
+        System.out.println("Call devicemanager");
+        try {
+            deviceManager.startListenerOnNodeForConnectedState(Action.ADD, nodeId, nNodeBuilder.build());
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail("Exception received.");
+        }
+        System.out.println("Test2: Done");
+
+    }
+
+    @Test
+    public void test3() {
+        System.out.println("Test3: master mountpoint");
+
+        mountPoint.setDatabrokerAbsent(false);
+        NodeId nodeId = new NodeId("mountpointTest2");
+        NetconfNodeBuilder nNodeBuilder = new NetconfNodeBuilder();
+
+        System.out.println("Call devicemanager");
+
+        try {
+            deviceManager.startListenerOnNodeForConnectedState(Action.ADD, nodeId, nNodeBuilder.build());
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail("Exception received.");
+        }
+        System.out.println("Test3: Done");
+
+    }
+
+    //********************* Private
+
+    private static void delete(Path etc) throws IOException {
+        if (Files.exists(etc)) {
+            System.out.println("Found and remove:"+etc.toString());
+            delete(etc.toFile());
+        }
+    }
+
+    private static void delete(File f) throws IOException {
+        if (f.isDirectory()) {
+            for (File c : f.listFiles()) {
+                delete(c);
+            }
+        }
+        if (!f.delete()) {
+            throw new FileNotFoundException("Failed to delete file: " + f);
+        }
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestMapper.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestMapper.java
new file mode 100644
index 0000000..4166101
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestMapper.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2019 Red Hat, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.test;
+
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtMapper;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types.EsHistoricalPerformance15Minutes;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.LayerProtocolName;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.Lp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.LpBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.air._interface.historical.performances.g.HistoricalPerformanceDataListBuilder;
+
+public class TestMapper {
+
+    @Test
+    public void test() {
+
+        int t = 0;
+        System.out.println(t++);
+
+        HtMapper<EsHistoricalPerformance15Minutes> mapper = new HtMapper<>(EsHistoricalPerformance15Minutes.class);
+        System.out.println(t++);
+
+
+        Lp layerProtocol = new LpBuilder().setUuid(new UniversalId("TestId")).setLayerProtocolName(new LayerProtocolName("LayprotcolTest")).build();
+        System.out.println(t++);
+        EsHistoricalPerformance15Minutes pmData = new EsHistoricalPerformance15Minutes("Testnode", layerProtocol);
+        System.out.println(t++);
+
+        //AirInterfaceHistoricalPerformancesBuilder builder1 = new AirInterfaceHistoricalPerformancesBuilder();
+        //System.out.println(t++);
+
+
+        HistoricalPerformanceDataListBuilder builder2 = new HistoricalPerformanceDataListBuilder();
+        System.out.println(t++);
+        builder2.setPeriodEndTime(new DateAndTime("2019-06-06T12:12:12.1Z"));
+        System.out.println(t++);
+
+        String json = mapper.objectToJson(pmData);
+
+        System.out.println("Result: "+pmData);
+        System.out.println("Result: "+json);
+
+        //fail("Not yet implemented");
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerMountpointMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerMountpointMock.java
new file mode 100644
index 0000000..09e0db7
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerMountpointMock.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk feature sdnr wt
+ *  ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock;
+
+import org.opendaylight.controller.md.sal.binding.api.BindingService;
+import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+/**
+ * @author herbert
+ *
+ */
+@SuppressWarnings("deprecation")
+public class DataBrokerMountpointMock implements DataBroker, BindingService {
+
+    @Override
+    public <T extends DataObject, L extends DataTreeChangeListener<T>> ListenerRegistration<L> registerDataTreeChangeListener(
+            DataTreeIdentifier<T> arg0, L arg1) {
+        return null;
+    }
+
+    @Override
+    public BindingTransactionChain createTransactionChain(TransactionChainListener listener) {
+        return null;
+    }
+
+    @Override
+    public ReadOnlyTransaction newReadOnlyTransaction() {
+        return null;
+    }
+
+    @Override
+    public ReadWriteTransaction newReadWriteTransaction() {
+         return null;
+    }
+
+    @Override
+    public WriteTransaction newWriteOnlyTransaction() {
+        return null;
+    }
+
+    @Override
+    public ListenerRegistration<DataChangeListener> registerDataChangeListener(LogicalDatastoreType store,
+            InstanceIdentifier<?> path, DataChangeListener listener, DataChangeScope triggeringScope) {
+        return null;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerNetconfMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerNetconfMock.java
new file mode 100644
index 0000000..77ee587
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerNetconfMock.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk feature sdnr wt
+ *  ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock;
+
+import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+/**
+ * @author herbert
+ *
+ */
+@SuppressWarnings("deprecation")
+public class DataBrokerNetconfMock implements DataBroker {
+
+    @Override
+    public <T extends DataObject, L extends DataTreeChangeListener<T>> ListenerRegistration<L> registerDataTreeChangeListener(
+            DataTreeIdentifier<T> arg0, L arg1) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public BindingTransactionChain createTransactionChain(TransactionChainListener listener) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public ReadOnlyTransaction newReadOnlyTransaction() {
+        return new ReadOnlyTransactionMock();
+    }
+
+    @Override
+    public ReadWriteTransaction newReadWriteTransaction() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public WriteTransaction newWriteOnlyTransaction() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public ListenerRegistration<DataChangeListener> registerDataChangeListener(LogicalDatastoreType store,
+            InstanceIdentifier<?> path, DataChangeListener listener, DataChangeScope triggeringScope) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointMock.java
new file mode 100644
index 0000000..ca63dcf
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointMock.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk feature sdnr wt sdnr-wt-devicemanager-provider
+ *  ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ ******************************************************************************/
+
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock;
+
+import com.google.common.base.Optional;
+import org.opendaylight.controller.md.sal.binding.api.BindingService;
+import org.opendaylight.controller.md.sal.binding.api.MountPoint;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+/**
+ * @author herbert
+ *
+ */
+public class MountPointMock implements MountPoint {
+
+    private boolean databrokerAbsent = true;
+    private final DataBrokerMountpointMock dataBroker = new DataBrokerMountpointMock();
+
+    @Override
+    public InstanceIdentifier<?> getIdentifier() {
+        return null;
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public <T extends BindingService> Optional<T> getService(Class<T> service) {
+
+        System.out.println("Requested mountpoint service: "+service.getSimpleName()+" databrokerAbsent state: "+databrokerAbsent);
+
+        Optional<?> res = Optional.absent();
+        if (service.isInstance(dataBroker)) {
+            res =  databrokerAbsent ? Optional.absent() : Optional.of(dataBroker);
+        } else if (service.isInstance(org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry.class)) {
+            res = Optional.of(new RpcConsumerRegistryMock());
+        }
+        return (Optional<T>)res;
+    }
+
+    public void setDatabrokerAbsent( boolean state) {
+        this.databrokerAbsent = state;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointServiceMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointServiceMock.java
new file mode 100644
index 0000000..797ccb2
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointServiceMock.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk feature sdnr wt
+ *  ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock;
+
+import com.google.common.base.Optional;
+import org.opendaylight.controller.md.sal.binding.api.MountPoint;
+import org.opendaylight.controller.md.sal.binding.api.MountPointService;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+/**
+ * @author herbert
+ *
+ */
+public class MountPointServiceMock implements MountPointService {
+
+    private final MountPointMock mountpoint;
+
+    public MountPointServiceMock(MountPointMock mountpoint) {
+        this.mountpoint = mountpoint;
+    }
+
+    @Override
+    public Optional<MountPoint> getMountPoint(InstanceIdentifier<?> mountPoint) {
+
+        Optional<MountPoint> optional = Optional.of(mountpoint);
+        return optional;
+    }
+
+    @Override
+    public <T extends MountPointListener> ListenerRegistration<T> registerListener(InstanceIdentifier<?> path,
+            T listener) {
+        return null;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/NotificationPublishServiceMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/NotificationPublishServiceMock.java
new file mode 100644
index 0000000..54408c4
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/NotificationPublishServiceMock.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk feature sdnr wt
+ *  ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.concurrent.TimeUnit;
+import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
+import org.opendaylight.yangtools.yang.binding.Notification;
+
+/**
+ * @author herbert
+ *
+ */
+public class NotificationPublishServiceMock implements NotificationPublishService {
+
+    /* (non-Javadoc)
+     * @see org.opendaylight.controller.md.sal.binding.api.NotificationPublishService#offerNotification(org.opendaylight.yangtools.yang.binding.Notification)
+     */
+    @Override
+    public ListenableFuture<?> offerNotification(Notification notification) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.opendaylight.controller.md.sal.binding.api.NotificationPublishService#offerNotification(org.opendaylight.yangtools.yang.binding.Notification, int, java.util.concurrent.TimeUnit)
+     */
+    @Override
+    public ListenableFuture<?> offerNotification(Notification notification, int timeout, TimeUnit unit)
+            throws InterruptedException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.opendaylight.controller.md.sal.binding.api.NotificationPublishService#putNotification(org.opendaylight.yangtools.yang.binding.Notification)
+     */
+    @Override
+    public void putNotification(Notification notification) throws InterruptedException {
+        // TODO Auto-generated method stub
+
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/ReadOnlyTransactionMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/ReadOnlyTransactionMock.java
new file mode 100644
index 0000000..0bfe4b3
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/ReadOnlyTransactionMock.java
@@ -0,0 +1,143 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk feature sdnr wt sdnr-wt-devicemanager-provider
+ *  ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ ******************************************************************************/
+
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc.WrapperMicrowaveModelRev181010;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilitiesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapability;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapabilityBuilder;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+/**
+ * @author herbert
+ *
+ */
+@SuppressWarnings("deprecation")
+public class ReadOnlyTransactionMock implements ReadOnlyTransaction {
+
+
+    @Override
+    public Object getIdentifier() {
+        return null;
+    }
+
+    @Override
+    public <T extends DataObject> CheckedFuture<Optional<T>, ReadFailedException> read(LogicalDatastoreType store,
+            InstanceIdentifier<T> path) {
+
+        NetconfNodeBuilder netconfNodeBuilder = new NetconfNodeBuilder();
+        netconfNodeBuilder.setConnectionStatus(ConnectionStatus.Connected);
+        netconfNodeBuilder.setAvailableCapabilities(getCababilitiesList(WrapperMicrowaveModelRev181010.QNAME.toString()).build());
+        NetconfNode nnode = netconfNodeBuilder.build();
+        NodeBuilder nodeBuilder = new NodeBuilder();
+        nodeBuilder.addAugmentation(NetconfNode.class, nnode);
+        Node node = nodeBuilder.build();
+        @SuppressWarnings("unchecked")
+        Optional<T> res1 = (Optional<T>) Optional.of(node);
+        CheckedFuture<Optional<T>, ReadFailedException> res = new CheckedFuture<Optional<T>, ReadFailedException>() {
+
+            @Override
+            public void addListener(Runnable arg0, Executor arg1) {
+            }
+
+            @Override
+            public boolean cancel(boolean mayInterruptIfRunning) {
+                return false;
+            }
+
+            @Override
+            public Optional<T> get() throws InterruptedException, ExecutionException {
+                return null;
+            }
+
+            @Override
+            public Optional<T> get(long timeout, TimeUnit unit)
+                    throws InterruptedException, ExecutionException, TimeoutException {
+                return null;
+            }
+
+            @Override
+            public boolean isCancelled() {
+                return false;
+            }
+
+            @Override
+            public boolean isDone() {
+                return false;
+            }
+
+            @Override
+            public Optional<T> checkedGet() throws ReadFailedException {
+                return res1;
+            }
+
+            @Override
+            public Optional<T> checkedGet(long arg0, TimeUnit arg1) throws TimeoutException, ReadFailedException {
+                return null;
+            }
+
+        };
+
+
+        return res;
+    }
+
+    private AvailableCapabilitiesBuilder getCababilitiesList(String ... strings) {
+        return getCababilitiesList(null, strings);
+    }
+
+    private AvailableCapabilitiesBuilder getCababilitiesList(AvailableCapabilitiesBuilder valueBuilder, String ... strings) {
+        if (valueBuilder == null) {
+            valueBuilder = new AvailableCapabilitiesBuilder();
+        }
+        List<AvailableCapability> capabilites = new ArrayList<>();
+        for (String s : strings) {
+            AvailableCapabilityBuilder capabilityBuilder = new AvailableCapabilityBuilder();
+            capabilityBuilder.setCapability(s);
+            capabilites.add(capabilityBuilder.build());
+        }
+        valueBuilder.setAvailableCapability(capabilites);
+        return valueBuilder;
+    }
+
+    @Override
+    public void close() {
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcConsumerRegistryMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcConsumerRegistryMock.java
new file mode 100644
index 0000000..5cac977
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcConsumerRegistryMock.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk feature sdnr wt sdnr-wt-devicemanager-provider
+ *  ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ ******************************************************************************/
+
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock;
+
+import org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry;
+import org.opendaylight.yangtools.yang.binding.RpcService;
+
+/**
+ * @author herbert
+ *
+ */
+public class RpcConsumerRegistryMock implements RpcConsumerRegistry {
+
+    @Override
+    public <T extends RpcService> T getRpcService(Class<T> serviceInterface) {
+        return null;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcProviderRegistryMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcProviderRegistryMock.java
new file mode 100644
index 0000000..831d5ae
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcProviderRegistryMock.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk feature sdnr wt
+ *  ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock;
+
+import org.opendaylight.controller.md.sal.common.api.routing.RouteChangeListener;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RoutedRpcRegistration;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.controller.sal.binding.api.rpc.RpcContextIdentifier;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.RpcService;
+
+public class RpcProviderRegistryMock implements RpcProviderRegistry {
+
+    @Override
+    public <T extends RpcService> T getRpcService(Class<T> serviceInterface) {
+        return null;
+    }
+
+   @Override
+    public <L extends RouteChangeListener<RpcContextIdentifier, InstanceIdentifier<?>>> ListenerRegistration<L> registerRouteChangeListener(
+            L listener) {
+        return null;
+    }
+
+
+    @Override
+    public <T extends RpcService> RoutedRpcRegistration<T> addRoutedRpcImplementation(Class<T> serviceInterface,
+            T implementation) throws IllegalStateException {
+        return null;
+    }
+
+    @Override
+    public <T extends RpcService> RpcRegistration<T> addRpcImplementation(Class<T> serviceInterface, T implementation)
+            throws IllegalStateException {
+        System.out.println("Register class "+serviceInterface);
+        return null;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/aaiclient.properties b/sdnr/wt/devicemanager/provider/src/test/resources/aaiclient.properties
new file mode 100644
index 0000000..3e4da05
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/resources/aaiclient.properties
@@ -0,0 +1,165 @@
+###
+
+# ============LICENSE_START=======================================================
+
+# openECOMP : SDN-C
+
+# ================================================================================
+
+# Copyright (C) 2017 AT&T Intellectual Property. All rights
+
+#                                               reserved.
+
+# ================================================================================
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+
+# you may not use this file except in compliance with the License.
+
+# You may obtain a copy of the License at
+
+#
+
+#      http://www.apache.org/licenses/LICENSE-2.0
+
+#
+
+# Unless required by applicable law or agreed to in writing, software
+
+# distributed under the License is distributed on an "AS IS" BASIS,
+
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+# See the License for the specific language governing permissions and
+
+# limitations under the License.
+
+# ============LICENSE_END=========================================================
+
+###
+
+ 
+
+#
+
+# Configuration file for A&AI Client
+
+#
+
+ 
+
+#
+
+# Certificate keystore and truststore
+
+#
+
+org.onap.ccsdk.sli.adaptors.aai.ssl.trust=/opt/logs/externals/data/stores/truststore.client.jks
+
+org.onap.ccsdk.sli.adaptors.aai.ssl.trust.psswd=adminadmin
+
+ 
+
+org.onap.ccsdk.sli.adaptors.aai.ssl.key=/opt/logs/externals/data/stores/keystore.client.p12
+
+org.onap.ccsdk.sli.adaptors.aai.ssl.key.psswd=adminadmin
+
+org.onap.ccsdk.sli.adaptors.aai.host.certificate.ignore=true
+
+ 
+
+org.onap.ccsdk.sli.adaptors.aai.application=SDNC
+
+ 
+
+#org.onap.ccsdk.sli.adaptors.aai.uri=https://aai-int1.test.att.com:8443
+
+org.onap.ccsdk.sli.adaptors.aai.uri=https://aai-pwt3.ecomp.cci.att.com:8443
+
+ 
+
+connection.timeout=60000
+
+read.timeout=60000
+
+ 
+
+# query
+
+org.onap.ccsdk.sli.adaptors.aai.path.query=/aai/v13/search/sdn-zone-query
+
+org.onap.ccsdk.sli.adaptors.aai.query.nodes=/aai/v13/search/nodes-query?search-node-type={node-type}&filter={entity-identifier}:EQUALS:{entity-name}
+
+org.onap.ccsdk.sli.adaptors.aai.query.generic=/aai/v13/search/generic-query?key={identifier}:{value}&start-node-type={start-node-type}&include=complex&depth=3
+
+ 
+
+# named query
+
+org.onap.ccsdk.sli.adaptors.aai.query.named=/aai/search/named-query
+
+ 
+
+#update
+
+org.onap.ccsdk.sli.adaptors.aai.update=/aai/v13/actions/update
+
+ 
+
+# UBB Notify
+
+org.onap.ccsdk.sli.adaptors.aai.path.notify=/aai/v13/actions/notify
+
+org.onap.ccsdk.sli.adaptors.aai.notify.selflink.fqdn=/restconf/config/L3SDN-API:services/layer3-service-list/{service-instance-id}
+
+org.onap.ccsdk.sli.adaptors.aai.notify.selflink.avpn=/restconf/config/L3AVPN-EVC-API:services/service-list/{service-instance-id}/service-data/avpn-logicalchannel-information
+
+ 
+
+# P-Interfaces
+
+org.onap.ccsdk.sli.adaptors.aai.path.pserver.pinterfaces=/aai/v13/cloud-infrastructure/pservers/pserver/{hostname}/p-interfaces
+
+org.onap.ccsdk.sli.adaptors.aai.path.pserver.pinterface=/aai/v13/cloud-infrastructure/pservers/pserver/{hostname}/p-interfaces/p-interface/{interface-name}
+
+ 
+
+# VNF IMAGES
+
+org.onap.ccsdk.sli.adaptors.aai.path.vnf.images=/aai/v13/service-design-and-creation/vnf-images
+
+org.onap.ccsdk.sli.adaptors.aai.path.vnf.image=/aai/v13/service-design-and-creation/vnf-images/vnf-image/{att-uuid}
+
+org.onap.ccsdk.sli.adaptors.aai.path.vnf.image.query=/aai/v13/service-design-and-creation/vnf-images/vnf-image?application={application_model}&application-vendor={application_vendor}
+
+ 
+
+# service instance
+
+org.onap.ccsdk.sli.adaptors.aai.path.svcinst.query=/aai/v13/search/generic-query?key=service-instance.service-instance-id:{svc-instance-id}&start-node-type=service-instance&include=service-instance
+
+org.onap.ccsdk.sli.adaptors.aai.path.service.instance=/aai/v13/business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances/service-instance/{service-instance-id}
+
+ 
+
+# VNF IMAGES QUERY
+
+org.onap.ccsdk.sli.adaptors.aai.path.vnf.image.query=/aai/v13/service-design-and-creation/vnf-images/vnf-image?application={application_model}&application-vendor={application_vendor}
+
+ 
+
+#
+
+# Formatting
+
+#
+
+org.onap.ccsdk.sli.adaptors.aai.param.format=filter=%s:%s
+
+org.onap.ccsdk.sli.adaptors.aai.param.vnf_type=vnf-type
+
+org.onap.ccsdk.sli.adaptors.aai.param.physical.location.id=physical-location-id
+
+org.onap.ccsdk.sli.adaptors.aai.param.service.type=service-type
+
+ 
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/test.properties b/sdnr/wt/devicemanager/provider/src/test/resources/test.properties
new file mode 100644
index 0000000..943c25b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/resources/test.properties
@@ -0,0 +1,47 @@
+[dcae]
+dcaeUserCredentials=admin:admin
+dcaeUrl=off
+dcaeHeartbeatPeriodSeconds=120
+dcaeTestCollector=no
+
+[aots]
+userPassword=passwd
+soapurladd=off
+soapaddtimeout=10
+soapinqtimeout=20
+userName=user
+inqtemplate=inqreq.tmpl.xml
+assignedto=userid
+addtemplate=addreq.tmpl.xml
+severitypassthrough=critical,major,minor,warning
+systemuser=user
+prt-offset=1200
+soapurlinq=off
+#smtpHost=
+#smtpPort=
+#smtpUsername=
+#smtpPassword=
+#smtpSender=
+#smtpReceivers=
+
+[es]
+esCluster=sendateodl5
+
+[aai]
+#keep comment
+aaiHeaders=["X-TransactionId: 9999"]
+aaiUrl=http://localhost:81
+aaiUserCredentials=AAI:AAI
+aaiDeleteOnMountpointRemove=false
+aaiTrustAllCerts=false
+aaiApiVersion=aai/v13
+aaiPropertiesFile=aaiclient.properties
+aaiApplicationId=SDNR
+aaiPcks12ClientCertFile=/opt/logs/externals/data/stores/keystore.client.p12
+aaiPcks12ClientCertPassphrase=adminadmin
+aaiClientConnectionTimeout=30000
+
+[pm]
+pmCluster=sendateodl5
+pmEnabled=true
+
